2026-09-03
Understanding Cannot Wait for Code Review
A pull request is a terrible place to discover why the system changed. By then, the important decisions have already been made and buried in a diff.
The diff arrives too late
Code review has been carrying jobs it was never built to do. Teams use it to debate architecture, teach the system, spread context, catch security mistakes, enforce style, and decide whether the feature was worth building. That pile of responsibilities held together while people produced code slowly enough for another person to read most of it.
Agents break that bargain. They can generate and revise more code than a senior engineer can inspect with care. Adding an AI reviewer to the same queue only makes the old ceremony faster. It does not answer the deeper question: why did the team wait until the solution was finished to discuss the decisions that shaped it?
The diff is evidence of implementation. It is not the first draft of shared understanding. If the team meets the design there, feedback is late by definition. The factory has already spent the work, selected the boundaries, and multiplied assumptions across files before judgment enters the route.
Move the decision, not the ceremony
Useful feedback belongs next to the decision it can still change cheaply. Product intent should be argued before planning. Competing designs should collide before implementation. Security boundaries and failure consequences should be named before an agent chooses a route through them. Waiting for review turns every one of those questions into rework.
This does not require a calendar full of meetings. It requires an explicit artifact and a gate. Record the intended behavior, the rejected alternatives, the boundaries that must hold, and the evidence that will count as done. Let people challenge that record while the cost of changing direction is still low. Then give the agent a decision it can execute instead of an ambiguity it has permission to settle.
Our position is that this is where experienced engineers gain leverage in an agent-run organization. They stop narrating preferences over completed code and start shaping the rules the machinery runs. The typing moves down into the factory. Judgment moves up, earlier, where it can govern every implementation rather than repair one patch.
Do not spend judgment on settled questions
Formatting, dependency policy, known security checks, interface rules, and testable architecture constraints should not wait for a reviewer at all. If the answer is already known, encode it. A deterministic gate can reject the same violation on every change without getting tired, skimming the middle, or deciding that today is a reasonable day for an exception.
That is more than automation around review. It changes the source of authority. The standard no longer lives in a senior engineer's memory or in a comment that the next agent may never see. It lives in the route, where work cannot advance without satisfying it.
Keep probabilistic review for questions that still require interpretation. Keep human review for consequences that deserve accountable judgment. But route both by risk and uncertainty. Requiring the same inspection on every change does not create rigor. It hides the few decisions that truly need attention inside a flood of work that machinery could have settled.
People need the system, not every patch
There is a real danger here. As agents produce more implementation, people can lose the reasons the software has its current shape. Mandatory review is a weak defense. Reading a stream of finished diffs may create familiarity with recent edits, but it does not reliably preserve the product intent, operating model, or architectural choices behind them.
Preserve those things directly. Keep the decision record beside the code. Make architecture constraints executable. Give teams responsibility for how the system behaves in production, not just whether they approved its patches. Feed incidents and surprises back into the specification and gates so understanding changes the machinery instead of evaporating after a conversation.
The goal is not for every person to remember every generated line. The goal is for the organization to know what the system promises, why its boundaries exist, how it fails, and which evidence proves a change belongs. That knowledge survives a patch, a model, and an employee. Review comments usually do not.
Make review an exception with a reason
Some changes should still stop for close human attention: a new trust boundary, an irreversible migration, an unfamiliar critical path, or a decision with a blast radius the factory cannot yet prove. The stop should name the reason. That gives the reviewer a consequence to judge instead of a pile of syntax to bless.
Everything else should move through specifications, automated controls, independent verification, and recorded operating evidence. When those controls expose a new class of uncertainty, escalate it. When the same judgment repeats, harden it into the factory. The review queue should shrink as the system learns, not grow in proportion to machine output.
Code review is not disappearing because quality matters less. It is losing its place as the universal container for quality, teaching, architecture, and ownership. Good. Those responsibilities deserve systems built for them. Move the thinking before the code, put settled rules in machinery, and call people back only when their judgment can still change the outcome.
In response to Maybe We Shouldn't Be Reviewing All This Code by Martin Fowler.