Home → Leadership
The Bottleneck Is Review, Not Writing: Team Speed After AI
End-of-quarter meeting. I shared my screen: PRs opened had gone from 19 to 34 a week. A satisfied silence in the room. The second slide showed delivered work: almost unchanged. The third showed why: waiting time in the review queue had gone from 0.9 days to 2.5. We were writing faster and delivering at the same rate. The difference was waiting on somebody’s screen.
- A bottleneck does not disappear, it moves. When writing speeds up, the next step fills: review, testing, release, understanding.
- Output metrics no longer tell you anything. PRs, lines, closed tickets — all rise with AI. Three numbers matter: lead time, rollback rate, review waiting time.
- PR size is the new discipline. A 1,400-line PR is not reviewed, it is approved. We use a 400-line line; larger ones waited 3.1 days, smaller ones closed the same day.
- The “why” is mandatory. With AI-written code the author’s reasoning can be missing; if the PR does not say what was tried and what failed, review becomes guesswork.
- Review goes in the calendar. “I will look when I get a moment” grows the queue; a 45-minute morning block drained it.
- The manager’s job is to move capacity. Not telling the team to write more, but giving time and people to review, testing and release.
Why did we not get faster?
The answer is systems thinking: speeding up one station does not speed up the line, it moves the bottleneck. We doubled the writing step; everything after it stayed the same.
| Step | Before | After AI | Change |
|---|---|---|---|
| Writing code | 2.1 days | 0.8 days | Faster |
| Waiting in the review queue | 0.9 days | 2.5 days | Slower |
| Review time (reading) | 0.4 days | 0.7 days | PRs grew |
| Test / fix round | 1.2 days | 1.4 days | Roughly unchanged |
| Release | 0.6 days | 0.6 days | Same |
| Total (lead time) | 5.2 days | 6.0 days | Worse |
The table is clear: we gained 1.3 days in writing and lost 1.6 days in review. And nobody did anything wrong; everyone produced more. The system could not turn more output into delivery.
Change the measurement
The first thing I did was change the slide. PR counts, line counts and closed tickets are no longer discussed in the team; all three rise with AI and none of them produces a decision.
- PRs opened
- Lines added/removed
- Tickets closed
- “Productivity” per person
- Lead time: from ticket to production
- Review waiting time: from PR opened to first comment
- Rollback rate: share of changes reverted in production
- Open PRs: work in progress at any moment
When the metric changed, the conversation changed. “Who wrote how much” took nobody anywhere; “where is the work waiting” has an answer in a table and can be fixed. The old rule from measuring performance holds here too: the thing that is easy to count is not the thing worth measuring.
Four changes
1. A limit on open PRs
At most 2 open PRs per person. Before opening a third you have to close one — which usually means “go and review somebody else’s PR”. The rule sounds bureaucratic; the effect showed in the first week: open PRs fell from 23 to 11 and waiting time from 2.5 days to 1.1. No new code was written; existing code was delivered.
2. PR size: 400 lines
A bot comments automatically on PRs over 400 lines: “can this be split?” Not a ban, a question. The difference we measured is convincing:
| PR size | Average wait | Comments | Rollbacks |
|---|---|---|---|
| < 100 lines | 0.3 days | 2.1 | 1% |
| 100–400 lines | 0.9 days | 4.7 | 3% |
| 400–1,000 lines | 2.2 days | 3.9 | 7% |
| > 1,000 lines | 3.1 days | 1.8 | 11% |
Look at the third column: as PRs get bigger, the number of comments falls. That does not mean review improved; it means review was abandoned. Nobody reads 1,400 lines line by line; approval happens at “it seems to work” level, and the rollback rate triples.
AI is part of the fix here too: splitting a large change into three used to be tedious manual work. There is no excuse left.
3. The “why” is mandatory
AI-written code opens a new gap: sometimes the person who wrote it does not know why it is that way. “It suggested this and it worked.” The reviewer does not know either. Two people approve code whose reasoning neither of them knows.
We added three lines to the PR template:
- What was tried and what did not work? (One sentence is enough.)
- Where is the risk in this change? In the author’s own words.
- Which test did you try to break? Break the code on purpose and watch the test go red.
The third one turned out to be the most useful. AI writes tests too, and whether those tests actually check anything is a separate question. Breaking the code on purpose and seeing the test fail takes 2 minutes; in the first month we found 6 tests that checked nothing this way.
4. Review goes in the calendar
“I will look when I get a moment” is the best-intentioned form of postponing; nobody gets a moment. There is now a block in the calendar from 09:30 to 10:15: review. No meetings allowed. Not until the queue is drained — every day.
Its effect on the team was bigger than I expected: once review stopped being something squeezed between tasks, its quality rose too. Comments per PR went from 3.2 to 5.1 and the rollback rate from 6% to 2%.
From the field: six weeks
| Measure | Start | After 6 weeks |
|---|---|---|
| PRs opened / week | 34 | 31 (not a goal) |
| Open PRs at once | 23 | 9 |
| Waiting in review | 2.5 days | 0.8 days |
| Average PR size | 620 lines | 240 lines |
| Comments per PR | 3.2 | 5.1 |
| Lead time | 6.0 days | 3.4 days |
| Rollbacks in production | 6% | 2% |
The first row is deliberate: PR count fell, and that is not a failure. Delivered work went up, because work in progress went down. The sentence I used with the team was: “We will start less and finish more.”
What is the manager’s job here?
Three things, none of them popular:
- Move capacity. Giving time to review and testing means taking it from feature work. You are the one who has to defend that; the team cannot.
- Take output metrics off the agenda. If you report upward, you have to change it there too, otherwise the team works against two different measures. This is exactly where managing up earns its keep.
- Protect the junior’s learning path. When output rises, the person who suffers most is the one still learning: the code arrives finished, the review queue is long, and the space for questions shrinks. The subject of AI or leadership becomes concrete here: pairing, explaining, and deliberately slowing down.
What to watch
- Lead time (p50 / p85). Not one number but a distribution; where is the long tail?
- Waiting in review. From PR opened to first comment.
- Open PRs at once. Work in progress; if it rises, starting is rising, not delivery.
- PR size distribution. The share above 400 lines.
- Comments per PR. Falling means review is being abandoned.
- Rollback rate in production. The most honest number about quality.
- Distribution of review load. If one person does half the reviews, that person is the next bottleneck.
Checklist
- Which step got faster? Does the next step have the capacity?
- Am I measuring lead time, or PR count?
- How many PRs are open at once? Is there a per-person limit?
- What share of PRs is over 400 lines?
- Do comments drop on large PRs?
- Does the PR description say what was tried and what failed?
- Who checked that the test actually fails?
- Is review in the calendar, or in the gaps?
- How many of the reviews does one person do?
- Can a junior ask why this code is written this way?
- Which metric does my report upward celebrate?
Conclusion
The first slide I showed in that meeting was the wrong slide. 34 PRs was a nice number and it said nothing; the number that said something was that delivered work had not changed. The team was producing more and the system was delivering at the same rate; the difference was sitting on someone’s screen, piling up.
Nothing we did over those six weeks was new: WIP limits, small batches, time set aside for review, the right metric. The only new thing is that writing is no longer the bottleneck. That is why managing a team after AI is not an “AI topic” but an old flow problem — the bottleneck simply moved one step down the line.
The sentence to remember: start less, finish more. If output got cheap, output is not what is valuable; delivery is.