Back to blog

Reviewing the Diff Was Never the Hard Part

AI review made the local problem smaller. It made the systemic one bigger.

AI changed software development. We now write software in plain English. But the impact of those changes on the rest of the product is harder to see, until it is too late.

A product request becomes a branch. A bug report becomes a pull request. An agent can turn a sentence into a working change before a human has finished tracing the old behavior it may have touched.

That is the part everyone can see. The pace changed. The quantity changed. For some teams, the difference is not a five-year before and after. It is what the workflow felt like a few months ago versus what it feels like now.

AI code review helps with this new pace. It can read the diff, catch the null you missed, flag the injection you did not think about, and leave useful comments on the code in front of it.

But the same progress creates the harder problem.

Every tool in that loop helps you produce the change, summarize the change, or review the change. Almost none can reliably tell you what the change did to the parts of the product outside the diff.

That gap has always existed. AI makes it compound. Our own team went from about three pull requests a day to twenty, sometimes thirty. The ways to break an existing flow grow much faster than the capacity to review them.

AI Review Solves the Local Problem

AI code review tools are already useful. That is not the argument.

They make the visible part of review faster. They find issues in new code. They reduce the amount of human attention spent on obvious mistakes. In doing that, they help teams push more features, fixes, and experiments through the pipeline.

That is exactly why regression pain gets bigger.

The local defect problem improves while the system impact problem expands. More changes touch the same product surface. More reasonable diffs arrive with less shared history behind them. More of the question shifts from “is this code okay?” to “what existing behavior did this change put at risk?”

The diff got easier to inspect. The impact did not get easier to understand.

The Failure Shape Is Familiar

Imagine a validation change in account setup. The diff is small. The tests pass. The review looks reasonable.

Then a week later, a segment of returning customers can no longer complete checkout. The issue does not look connected to account setup at first. It appears inside a revenue flow, across a boundary no single reviewer was staring at.

Nobody was careless. The failure escaped because the review process inspected the change, not the product behavior that depended on it.

This is the kind of regression engineering leaders are describing when they ask what a change puts at risk. They are not asking for another comment on the diff. They are asking what customer flows are now at risk.

The diff is visible. The system around it is where the regression hides.

Diff Tools Look in the Wrong Place

These are good products, and the limitation is not quality. It is frame.

Read the category by what it is pointed at. An AI reviewer is given a pull request: the diff, the files it touches, the task it claims to implement, and whatever repository context it can pull in around them. Everything it can tell you is a property of that material. Which is why the category is strong at finding problems inside new code, and structurally quiet about what the new code did to old behavior.

A tool that reads a diff can tell you a great deal about the diff. It cannot reliably tell you what the diff did to the parts of the system that are not in it. That is not a gap in any particular product. It is what the input allows.

That is where many expensive regressions live: at boundaries no single team owns, inside flows no reviewer had fully loaded into their head, after a change that looked clean in the files.

The Missing Piece Is Context

The obvious objection is a good one. If models are this capable, why not hand one the pull request and ask what might break?

Teams try this. Some do it seriously, at scale, with real engineering discipline behind it. The answers come back with the same constraint.

The context is too large for a single session. A meaningful answer to “what does this change affect?” requires the system, not just the change. It requires knowing what the product does, which behaviors depend on which, how production behaved before the change, and which flows matter most to the business.

That is not a prompt. It is a maintained model of the product.

Reasoning is increasingly abundant. The scarce thing is the context the reasoning needs.

Which reframes what teams adopting AI actually need. Not a better prompt, and not a more capable model. A maintained layer of product context that a model can reason against, kept current by something other than the person asking the question.

A maintained context layer gives the model the product context a session does not have.

Regression Intelligence Changes the Release Question

Does this product still behave the way it behaved yesterday?

That is the release question AI has made urgent.

It is not answered by a better summary of the pull request. It needs a reference point. The only honest reference point available is the behavior running in production right now.

Your current release is the most complete specification of your product that exists. Documentation can age. Tests are selective. Design documents simplify reality. Production behavior is what customers already rely on.

We call the category Regression Intelligence: understanding the business impact of every code change, in the business flows it puts at risk, before it ships.

Not regression testing, which checks cases somebody thought to write down. Not code analysis, which reads structure rather than behavior. The point is impact in the language the business uses, before a change reaches customers.

This is the problem Early is built around: understanding which business flows a release candidate changes before those changes reach production.

The Through-Line

The tooling got dramatically better at the part of software delivery that was already visible: writing the change, reading the diff, and catching local bugs.

The invisible part got harder at the same time.

What a change does to everything you were not looking at is now the central question of release confidence. Volume went up. The shared system model that review depended on became weaker. The reviewer inherited more of the burden.

That is the gap.

The problem is not that teams need another testing tool or another code review tool. They need a release-time layer that protects releases by catching regressions before they reach production.

See what your next release puts at risk