On coding agents, batched decisions, and code review
When AI Makes the Wrong Design Look Ready
Agent code arrives in minutes, before anyone has a reason to stop and ask the design questions. My reviewers had to ask them for me.
My pull request was small and looked ready. To derive the timestamp I needed, my coding agent had found two candidate sources, a filename and a configuration value. It used the filename first and kept configuration as a fallback, explaining that CI required the filename while local runs used the configuration value. That sounded reasonable, so I opened the pull request and assigned some reviewers to it.
The reviewers saw the two sources and asked a question I had skipped. Why were there two sources at all?
I reached out to the team that owned the data. After we discussed it, they decided to embed the timestamp in the data and put the change on their roadmap. My task had to wait.
The conversation was necessary to finish the task, but it began only after the code looked finished. The reviewers had to uncover the unresolved design question first.
Slower Implementation Would Have Made Me Ask Earlier
Before coding agents, I probably would have talked to the team that owned the timestamp well before writing the change. Understanding the repository well enough to find both candidate sources would have taken an hour or two. At that point, asking someone who knew the system about the timestamp would have been cheaper than continuing to dig.
With the agent, I had it make a plan, and then the implementation took minutes. I spent about half an hour reading the diff and making edits, then sent it to reviewers. I had checked what the code did, but I had not traced why the agent had made each choice.
The speed of agent-generated code changes how design decisions arrive. When writing code by hand, they tend to appear one at a time as the implementation runs into ambiguity. Each question creates a chance to stop and resolve it before continuing. An agent can choose a path through several ambiguities in minutes and return those answers implicitly inside one coherent diff.
The finished code gave me several choices to evaluate at once. I had to work backward from the code to find where the agent had encountered ambiguity, then decide whether the agent had enough information to choose. Some of those decision points were absent from its explanation because the agent had treated them as ordinary implementation details.
That is what happened with the timestamp source. The missing contract was already there, but the final code made one interpretation look settled before I had asked what the producer promised.
Plan mode seems like the obvious way to restore the missing pause. It helps by exposing the approach before implementation, but it surfaces only the choices the agent recognizes as choices. In my case, the plan the agent produced specified the filename and configuration fallback without asking whether either source was guaranteed.
Some choices become visible only after implementation produces more evidence. Types, tests, failure paths, and operating conditions can change what the next decision requires. Several decisions made before coding are therefore not equivalent to the same decisions made as that evidence emerges.
The plan also made that assumption feel more deliberate than it was. It presented the filename as an implementation step, so I read the choice as settled instead of as a question for the producing team.
Reviewers Inherit the Discovery Work
Code review has always done more than find defects. In a study of code review at Microsoft, Alberto Bacchelli and Christian Bird found that reviews were “less about defects than expected.” Developers described finding defects as the goal, but reviews also produced knowledge transfer, team awareness, and alternative solutions. The study also found that understanding the code and the change was central to review and that developers met that need mostly outside their tools.
AI changes when and how much of that work reaches reviewers. An author can arrive at review before working through each design question, so the unresolved questions appear together and without the context that would have accumulated while coding by hand.
The reviewer has to verify the behavior while checking assumptions (that may depend on contracts outside the repository). That is a heavier review even when the diff is small.
The reviewers' confusion signaled that a cross-team conversation had been skipped. By then, the pull request was open and they had spent time reconstructing a decision I should have resolved before review.
Authors Need More Than One Decision Checkpoint
Reviewers should validate design decisions without being responsible for discovering all of them. Before opening an AI-assisted pull request, the author needs to review what the agent decided as carefully as what it changed.
That requires checkpoints across the change. Before coding begins, I ask what is ambiguous and which external contracts the approach assumes. During implementation, I compare the code with the plan and ask what the agent learned or decided along the way. Before review, I separate the choices supported by evidence in the repository from those that need agreement from another person or team.
No set of prompts will expose every hidden assumption. The author still has to notice when a local-looking choice requires knowledge the code cannot supply. My reviewers noticed this one before I did.
So to finish the anecdote that I introduced in the beginning, the pull request never shipped. The reviewer's question was the most useful thing that came from it:
What does the producing system guarantee?
I should have asked it before I started coding.