Why a One-Line Change Can Break Your Whole Stack - Cole Gannaway, Qodo

Read the talk

Why a One-Line Change Can Break Your Whole Stack

Recording frame at 2:03: Why a One-Line Change Can Break Your Whole StackOpen full source frame
Why a One-Line Change Can Break Your Whole Stack — recording at 2:03

Passing builds and unit tests can leave downstream consumers unchecked. Cole Gannaway’s Qodo walkthrough follows a Bitwarden data-model rename through repository dependencies, reusable review rules, independent review agents, and checks against the original ticket.

From a talk by Cole Gannaway

At a glance

Ideas worth remembering

  • Review the components connected across repositories. A one-line data-model rename can affect web, mobile, MCP, and CLI consumers even when local checks pass.

  • Turn compatibility expectations into explicit rules, such as adding a deprecation flag or closer review for public API changes, and supply those rules to the coding agent before generation.

  • A dedicated review agent can reserve context for codebase knowledge, the dependency graph, and information specific to the review. Varying models and harnesses aims to reduce shared blind spots.

  • Qodo’s PR-comment example turns feedback into a suggested rule that can be applied to future PRs, while the software graph directs reviewer attention to changes with broad impact.

  • Check implementation against the ticket’s acceptance criteria. Reviews around 25%, 50%, and 75% of the coding work are suggested checkpoints for catching the wrong direction while the implementation can still change.

  • Blast radius can inform which changes need human scrutiny, while the criterion for allowing unattended merges remains an open decision in the talk.

When review becomes the bottleneck

Teams can generate code faster and still struggle to get it through review. Cole Gannaway, a solutions engineer at Qodo, describes customers who want a software factory that takes work from a ticket all the way to production. Their pull requests become the bottleneck: implementation accelerates, while deciding whether the resulting change is trustworthy remains difficult.

Qodo focuses on that review stage, supplying context to the human or agent making the decision. It occupies one part of the larger ticket-to-production workflow. Code generation still makes mistakes, and faster generation makes it more urgent to understand the consequences of a proposed change before approving it.

To see why an ordinary review can look reassuring, consider Gannaway’s illustrative example from Bitwarden, the open-source password manager. A developer wants a rename and changes one line of its data model. In the imagined approval decision, the build passes, the unit tests pass, and perhaps the linters pass too. The edit matches the developer’s intention, so approving it feels reasonable.

Recording frame at 2:39: When review becomes the bottleneckOpen full source frame
When review becomes the bottleneck — recording at 2:39

The familiar verdict is “seems good to me.” Gannaway’s show-of-hands question surfaces the compromise behind it: reviewers sometimes merge without reading every changed line, depending on their tools for confidence. The scope of those tools’ context then becomes part of the review decision.

0:421:12
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

0:12 · section reference included

Map the components that depend on the change

The missing question is what else depends on the changed model. In the Bitwarden scenario, the back-end server can connect to web clients, mobile or iOS clients, MCP servers, and command-line clients. A rename can become a compatibility problem when a consumer still expects the previous model. The server’s checks can look healthy while the effect appears elsewhere, perhaps as a production bug report or a crashing web application.

To understand which connections matter, a reviewer needs more detail than a line joining two repository names. Qodo’s cross-repository review uses an automatically built software graph and an integration surface: the actual components through which repositories connect. Knowing that Bitwarden server connects to Bitwarden Android identifies a relationship; knowing which components connect makes it possible to assess whether that relationship matters to the edited model.

Recording frame at 3:43: Map the components that depend on the changeOpen full source frame
Map the components that depend on the change — recording at 3:43

The graph lets the human or review agent widen its investigation from the edited repository to the affected consumers. That is the reason to map the system at component level: a small diff can reach several clients in other repositories, even when the local change looks correct. The relevant measure of impact is how far the change reaches through those connections.

2:042:34
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

3:34 · section reference included

Put API rules in place before generation

Dependencies are part of what experienced reviewers contribute. They also bring conventions, taste, and memories of earlier mistakes. If that knowledge stays with a senior engineer, the same person may need to recognize and explain the same problem on every review. Custom rules make some of that judgment available to subsequent reviewers.

Recording frame at 6:13: Put API rules in place before generationOpen full source frame
Put API rules in place before generation — recording at 6:13

The example rule says that a public API change should receive either a deprecation flag or closer review. Applied to the rename, it turns the status of the interface into a review condition: if the changed model is part of a public API, the edit warrants that additional handling. The rule preserves a compatibility concern that might otherwise depend on an experienced reviewer noticing it.

The same information can influence implementation before there is anything to review. In the example, an MCP server brings Codebase Wisdom, custom rules, and accumulated team knowledge into the coding agent before code generation. The agent can consider downstream effects while choosing the change, rather than learning about them only after opening a pull request. This improves the opportunity to get the first attempt right; Gannaway still calls for a later check.

4:565:26
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

4:56 · section reference included

Give the reviewer its own context and judgment

An implementation agent such as Claude Code already has useful background, which makes asking it to review its own work an appealing shortcut. The case for a separate review agent has two parts: controlling what occupies its context window and reducing the chance that it repeats the implementer’s blind spots.

Recording frame at 7:10: Give the reviewer its own context and judgmentOpen full source frame
Give the reviewer its own context and judgment — recording at 7:10
  • Context devoted to review: The implementation agent spends context on debugging, implementation, and exploring the codebase. A review agent can concentrate on Codebase Wisdom, the software graph, and information specific to this review. Larger windows do not prevent relevant details from getting buried or prevent hallucinations; choosing the contents still matters.

  • Different models and harnesses: A reviewer can use a different model, including choices from Anthropic, OpenAI, or open-weight models. The harness—the software that organizes the agent’s work—can differ too. Reusing the same model and harness may reproduce similar biases, so both are candidates for variation.

Gannaway also proposes adversarial reviewers that inspect the same code and compare findings. He treats agreement as a stronger signal that a problem is real, while very different findings call for further investigation. The point of the comparison is to expose mistakes that one route through the review might miss. Agreement remains a review heuristic, not a guarantee that a finding is correct.

6:176:47
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

6:17 · section reference included

Make a PR comment useful on future PRs

Learning from a failure also has to outlast the review conversation. Postmortems can lead to changes in process or organization, which need their own follow-through. For code-level lessons, the practical question is how to turn knowledge held by a few people into a check that everyone can use.

The PR-comment example makes that conversion concrete. A comment on a pull request supplies the input; Qodo suggests a rule based on it. The conversion gives the feedback an explicit form that future reviews can check.

Recording frame at 9:00: Make a PR comment useful on future PRsOpen full source frame
Make a PR comment useful on future PRs — recording at 9:00

Applying the rule to later PRs reduces dependence on someone remembering to repeat the comment. Separately, the software graph can flag the rename’s large blast radius to a human or another agent, directing closer attention to a change that looked small in the diff. Running these checks through MCP or a CLI before opening the PR gives the coding agent an earlier chance to fix the problem.

8:198:49
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

8:19 · section reference included

Check the implementation against the original intent

An audience member describes already reviewing work with an agent and writing down the resulting guidance for the next run of the factory. The harder question is about intent: what happens when the context given to the implementation agent misses what the task was really meant to accomplish?

The distinction takes a moment to pin down. Gannaway first considers a poorly written ticket, then an agent that over-engineers a small request into a wholesale rewrite. The questioner sharpens the concern: the agent may be approaching the problem incorrectly and implementing the wrong thing. Review has to check the requested outcome as well as the implementation’s internal quality.

The live example addresses how a reviewer can check the intended outcome. Qodo supports integrations with Jira and Linear; a linked ticket supplies acceptance criteria to the PR review. The review then highlights requirements gaps against that ticket, making incomplete requested behavior part of the review output.

A requirements-gap finding tells the implementation agent to return to behavior the ticket requested. Its limit follows from its input: the check depends on the ticket expressing the real intent. An omitted or mistaken requirement still needs clarification; comparing the implementation with the written criteria cannot supply intent that those criteria never captured.

These checks can guide implementation before a PR exists. Gannaway recommends adding a skill that requests a review around the 25%, 50%, and 75% points of the coding work. The specialized reviewer can then act almost like a manager, steering the implementation agent away from the wrong solution or unnecessary rebuilding. As implementation consumes more of the agent’s context window, a separate review can return attention to the requirements while the next edits can still change direction.

10:2310:52
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

10:15 · section reference included

Deciding when human review can be skipped

The closing question is which changes can be merged without a human looking at them. Gannaway says some teams already do this and presents deciding when it is appropriate as the next step for the review layer.

Blast-radius information gives that decision a useful input: a one-line edit can affect several clients and warrant more scrutiny than its size suggests. The graph makes those consequences easier to inspect. The decision rule for when the available evidence is sufficient to allow an unattended merge remains open.

13:5314:23
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

13:53 · section reference included

Resources

Transcript & slides

Loading transcript and slides…

Transcript download