AI code review bottleneck with many pull requests converging on one human reviewer
← Back to Blog
September 2026·AI Engineering·14 min read

AI Is Writing Code Faster Than Humans Can Review It

AI creates pull requests faster than teams can review them. Compare review tools, test-first development, and a safer workflow for keeping up.

I can now ask an AI coding agent to take one task while I work on another. A second agent can inspect a bug. A third can prepare tests. Before lunch, several changes can be ready for attention.

That sounds like productivity until all of them become pull requests.

The agents can work in parallel. I cannot review in parallel. Neither can the senior developer whose approval carries the most architectural context. We still read one diff at a time, reconstruct one decision at a time, run one risky path at a time, and accept responsibility for one merge at a time.

The AI code review bottleneck appears when code generation grows faster than a team's ability to understand, verify, and safely accept the resulting changes. The queue has not disappeared. It has moved from implementation to judgment.

This is not an argument against coding agents. I use them heavily because the speed is real. It is an argument against calling generated output delivered value before the rest of the engineering system has absorbed it.

We moved the queue, not the constraint

For years, software teams tried to reduce the time between an idea and working code. Better frameworks removed boilerplate. CI automated repetitive checks. Cloud environments reduced setup time. AI has accelerated the most visible part of that chain again: producing a plausible implementation.

But a software delivery system moves only as fast as its constrained stage. If developers can create ten changes while reviewers can responsibly verify five, the extra five do not become productivity. They become inventory.

That inventory has a cost. A pull request waits. Its author switches context. The target branch changes. Review comments arrive after the reasoning is no longer fresh. A reviewer opens a diff without sharing the path that produced it. When the author updates the branch, both people must reload some of the context.

The uncomfortable part is that the dashboard can still look impressive. More commits. More branches. More pull requests opened. More agent sessions completed. None of those numbers proves that customers received more reliable software.

I do not think the solution is to make humans read faster. Speed-reading a diff is not review. The solution is to stop sending unproven work into the scarce part of the system and to reserve human attention for questions that actually require judgment.

Code generation is becoming abundant. Accountable judgment is not.

Why AI-generated pull requests are deceptively expensive to review

AI-generated code often looks unusually complete. The names are sensible. There are helper methods, comments, validation branches, and tests. A polished diff creates a subtle temptation to assume that someone - or something - must have thought through all of it.

Sometimes nobody did.

The model produced a statistically convincing path through the task. The developer may have guided it carefully, or may have accepted the first result. The reviewer cannot see the difference from formatting alone.

This creates four kinds of review work.

First, the reviewer must reconstruct intent. Does the change solve the actual requirement, or only the example described in the ticket?

Second, the reviewer must identify unnecessary code. AI is cheap enough to generate an abstraction, fallback, configuration layer, and test fixture that the problem never required. Every extra line may be reasonable in isolation and still be a maintenance cost the team did not choose.

Third, the reviewer must challenge shared assumptions. If one model wrote both implementation and tests from the same incomplete prompt, green tests may prove only that the code agrees with itself.

Fourth, the reviewer must recover the implementation journey. A developer who built a change manually usually remembers which approaches failed and which boundary was difficult. When an agent returns a finished diff, that useful friction is hidden unless the author records it.

This is why an AI-assisted PR can be quick to create and slow to trust. The problem is not necessarily poor code. The problem is missing evidence.

I wrote previously about quality assurance for AI-generated code and the verification debt created when output outruns understanding. A growing pull request queue is what that debt looks like at team scale.

What automated AI review can genuinely do

The obvious response is to put another AI between the coding agent and the human reviewer. I think that is useful. I do not think it closes the case.

Automated review can reduce the startup cost of opening a pull request. It can summarize the change, flag suspicious logic, look for security problems, compare the diff with repository instructions, and point a human toward the riskiest files. It can also provide feedback before a human is available, which shortens the loop for the author.

As of September 2026, the platform details matter:

  • Claude Code Review is Anthropic's managed, multi-agent review service for GitHub pull requests. It analyzes a diff with codebase context and posts severity-labelled findings. Anthropic explicitly says the findings do not approve or block a PR. Teams using GitLab can run Claude in their own CI/CD infrastructure, but that is different from the managed GitHub reviewer.
  • GitLab Duo can perform an initial merge-request review, either through an agentic Code Review Flow or a non-agentic review depending on the setup. GitLab supports automatic reviews and custom instructions. Its own documentation also explains that large merge requests can lose file context or fail because of model context and timeout limits - another practical reason to keep changes small.
  • Bitbucket with Rovo Dev offers an AI-assisted first pass on code changes inside Atlassian's ecosystem. This can remove mechanical work from a human review, but Atlassian itself describes it as a head start, which is the right mental model.
  • CodeRabbit supports GitHub, GitLab, Azure DevOps, and Bitbucket. It can review pull requests, learn from team feedback, run from the CLI before a commit, and help triage a PR queue by risk and value.

Those tools are useful for first-pass inspection. I would ask them to find likely regressions, missing failure handling, unsafe patterns, deviations from project conventions, unexplained complexity, and test gaps. I would also use a different reviewer from the system that generated the implementation where possible. Independence is imperfect when models share similar training and context, but a second pass can still expose assumptions the first session did not challenge.

That separation is part of staying AI-assisted rather than AI-dependent. A second model can question the work. It should not become the reason I stop questioning it myself.

What I would not delegate is the final meaning of the change.

An AI reviewer does not attend the conversation in which a vague business rule was clarified. It does not carry the same memory of why the team rejected a similar abstraction two years ago. It may understand the repository and still misunderstand the product. It can tell me that code is internally consistent while missing that the requested behavior is wrong.

There is another operational risk: review noise. If a bot leaves fifteen low-value comments on every PR, humans learn to scan past the bot. The tool has increased the number of things to review instead of reducing them. An automated reviewer should be measured by useful findings and reduced uncertainty, not by comment volume.

So I treat AI review as triage and adversarial assistance. It is a layer of evidence, not an approval.

Should humans write tests before AI writes the code?

Yes, writing or approving tests before code generation can create a valuable independent specification - but only for behavior the tests express correctly. It verifies conformance to those examples, not the entire requirement, architecture, integration, or user experience.

The idea is attractive for good reason. A human translates the requirement into executable expectations. The tests fail because the implementation does not exist. AI then writes the smallest change that makes them pass. The human has defined the destination before the model chooses the route.

That separation is stronger than asking one model to “implement the feature and add tests.” In the second workflow, the same misunderstanding can appear twice: once in the code and once in the tests. Everything turns green because both artifacts agree on the wrong behavior.

I would use test-first development with AI for boundaries that can be stated precisely:

  • permission and authorization rules,
  • financial or state-transition invariants,
  • validation and serialization contracts,
  • regressions with a known failing example,
  • API compatibility and error behavior,
  • combinations that have already failed in production.

But “humans must manually type every test before AI can write code” can become another ceremony and another queue. The important property is not whose fingers typed the test. It is whether the expected behavior was defined and challenged independently before the implementation was accepted.

My preferred version looks like this:

  1. The human writes acceptance examples, invariants, and dangerous counterexamples in plain language or tests.
  2. AI may expand those into repetitive test cases.
  3. The human reviews the tests before the implementation is generated or revealed.
  4. The tests are run in the red state to prove they can fail for the missing behavior.
  5. AI writes the implementation.
  6. The team adds integration, browser, exploratory, security, or performance evidence according to risk.

The red step matters. A test that never failed may be testing an existing path, a mock, or nothing useful at all.

Tests also have blind spots. A perfectly tested method can be wired to the wrong button. A mocked integration can disagree with the real provider. A test suite can omit the old URL, stale browser state, concurrent update, timezone boundary, or permission combination that breaks production. That is why my process still includes testing the running application after I like both the code and the automated checks.

Test-first AI development is not proof that the feature is correct. It is a good way to make part of the proof independent from the generated implementation.

The review system I would build now

If AI increases the rate at which a team produces changes, review cannot remain a single human activity at the end. Verification has to be distributed across the workflow.

1. Make the author carry the first burden of proof

A PR should arrive with more than “tests pass.” I want a concise explanation of the requirement, risky assumptions, changed behavior, tests performed, and evidence from the running system where appropriate. The author owns this even when an agent wrote every line.

The reviewer should not be the first person to discover whether the feature opens.

2. Keep pull requests small enough to understand

AI makes large changes cheap to produce, not cheap to review. Smaller PRs reduce context reconstruction, make automated feedback more precise, and make rollback easier. If a change cannot be explained without a tour through twenty unrelated files, it is probably several decisions hiding inside one branch.

I would also limit work in progress. Starting another agent because the review queue is blocked creates more inventory. At some point the highest-value action is to review, test, or help finish existing work.

3. Run deterministic gates before probabilistic review

Formatting, static analysis, type checks, unit and integration tests, dependency scanning, secret detection, migration checks, and project policies should fail consistently. Do not spend model tokens or human attention rediscovering what a deterministic tool already knows.

This is part of the development pipeline, not optional decoration on the pull request.

4. Put AI review before the human queue

Run a local or automated AI review while the author still owns the context. Let Claude Code Review, GitLab Duo, Rovo Dev, CodeRabbit, or another suitable tool challenge the diff. Resolve useful findings and suppress recurring noise through repository-specific instructions.

The goal is not an “AI approved” badge. The goal is a cleaner, better-explained change reaching the scarce reviewer.

5. Route human attention by risk

Not every change deserves the same review path. A documentation typo and a permission-system refactor should not wait in one undifferentiated queue.

Risk can include affected component, data sensitivity, public API changes, database migrations, authentication, payment logic, blast radius, rollback difficulty, and the author's familiarity with the area. Code ownership rules can route a change to the people with the relevant context. Low-risk changes can rely more heavily on automated gates; high-risk changes may require multiple humans and runtime evidence.

6. Preserve the human decision

The human reviewer should focus on the things worth interrupting a human for:

  • Does this solve the right problem?
  • Is the change consistent with the architecture we intend to keep?
  • Are the assumptions and trade-offs acceptable?
  • Is the evidence proportional to the risk?
  • Can the team operate, debug, and reverse this change?

That is a better use of senior attention than finding a missing import or asking for formatting changes a pipeline could enforce.

7. Keep production in the feedback loop

Review is a prediction. Production provides evidence. Feature flags, gradual rollout, monitoring, useful logs, and tested rollback paths reduce the cost of the unknowns no review process can eliminate.

This does not excuse weak verification. It acknowledges that confidence is built in layers and that some behavior becomes visible only under real use.

Measure delivery, not the size of the queue

If a team wants to know whether AI is improving delivery, I would not begin with lines of code, commits, or pull requests opened. Those measure activity entering the system.

I would watch:

  • time from PR readiness to first meaningful review,
  • time from first review to merge,
  • rework after review and after merge,
  • escaped defects and rollback frequency,
  • how much senior time each class of change consumes,
  • which automated findings humans accept, ignore, or repeatedly dismiss.

The goal is not to eliminate the review queue at any cost. A queue can be a healthy quality boundary. The goal is to know whether it protects the system or merely hides unfinished work.

Faster generation needs a different definition of done

I do not want coding agents to become slower. I want the rest of the engineering workflow to become more honest about what their speed means.

A generated diff is not saved time if a tired reviewer has to reverse-engineer its intent. An automatic review is not safety if the team treats a bot's silence as approval. A green test suite is not independent evidence if the same misunderstanding wrote the code and the tests. Five open pull requests are not five delivered outcomes.

AI review tools can help. Tests written before implementation can help. Small changes, deterministic gates, risk-based routing, runtime verification, and better evidence can all increase the amount of work a team safely absorbs.

But none of them removes the central responsibility: someone has to understand why this change should exist and decide that the available evidence is good enough to ship it.

That is not an outdated human bottleneck we should be embarrassed about. It is the control point that keeps software engineering connected to consequences.

Use AI to produce code quickly. Use automation to remove mechanical review. Use tests to make intent executable. Then spend human attention where only judgment will do.

The pull request queue is not full of finished work. It is full of claims waiting to be proved.

Sources and further reading

Igor Gawrys
Igor Gawrys
AI Engineer & IT Consultant · Katowice, Poland