Explainer

Copilot Code Review vs Human Review

What automated review reliably catches, what it structurally cannot, and how to sequence the two so the machine handles the pass humans are worst at.

Copilot Code Review vs Human Review/blog/copilot-code-review-vs-human/

Short answer. Automated review replaces the first pass, not the review. It is good at exactly the things humans are worst at — reading every line of a large diff with equal attention — and structurally incapable of the thing review exists for, which is deciding whether the change should have been made.

Run it first, so humans arrive at a diff where the mechanical objections are already resolved.

The asymmetry

Human reviewers degrade predictably. Attention falls off after the first few files, the last hunk of a 600-line diff gets less scrutiny than the first, and a reviewer who has already found three problems is measurably less likely to find a fourth. None of that is a character flaw; it is how reading works.

Automated review does not degrade across a diff. It reads line 600 exactly as carefully as line 6.

It is also unable to tell you the feature should not ship.

Those two facts, together, are the entire argument for sequencing rather than choosing.

What automated review reliably catches

  • The error path nobody exercised. A resource opened and not closed on the exception branch, an early return that skips cleanup.
  • The second caller. A signature changed in one place and used in three.
  • Near-duplicate blocks that differ in one detail — the copy-paste with one variable not renamed, which human eyes slide straight over.
  • Mechanical consistency. Naming, error handling shape, missing null checks.
  • Volume. It will review the 40-file refactor at 3pm on a Friday.

What it structurally cannot

  • Whether the change is a good idea. It will review the implementation of a bad plan without once mentioning the plan.
  • Whether the test asserts the right thing. A test can be well-formed, passing and checking the wrong behaviour, and nothing in the diff says so.
  • Cross-system consequences it was not pointed at — the migration that breaks a consumer in another repository.
  • Team context. That this module is being replaced next quarter, that this pattern was tried and abandoned, that this author is new and needs the reasoning rather than the fix.
  • Accountability. Someone has to approve the change. That is a human act with a human consequence, and delegating it is not available.

The sequence that works

1. Automated review runs first, on push. By the time a human opens the pull request, the mechanical findings are resolved or explicitly dismissed.

2. The author responds to it before requesting review. This is the step teams skip, and skipping it moves the noise onto the human instead of removing it.

3. Humans review intent. Is this the right change? Does the test check the thing that matters? What does this break that is not in the diff?

4. A human approves. Always.

The measurable effect is not “fewer bugs” — that is a claim this page cannot support with evidence. It is that the human review conversation stops being about a missing null check and starts being about the design, because the null check was already handled.

The cost, which is real

Each review deducts 13 from your monthly premium request allowance, regardless of model. On Copilot Pro’s 300 requests, that is roughly 23 reviews before the allowance is gone — so “review every pull request automatically” is a budget decision, not just a workflow one.

Two sensible policies:

  • Automated review on pull requests to main only, not on every push to a branch.
  • Automated review on diffs above a size threshold, where human attention degrades most and the machine’s advantage is largest.

Where it goes wrong

Treating dismissal as agreement. A finding you dismissed is a finding you made a decision about. If nobody records why, the next reviewer re-litigates it.

Volume as a proxy for value. A review producing fifteen findings on a twenty-line diff is not thorough; it is noise, and it teaches the team to skim. Tune the prompt or the scope.

Automated approval. If your branch protection can be satisfied without a human, you have removed review rather than augmented it.

Assuming it saw everything. It reviewed the diff. It did not read the system.

Frequently asked questions

Can Copilot code review replace a junior reviewer? It replaces part of what a junior reviewer does — and removes the thing a junior reviewer is there for, which is learning to review by reviewing. Consider what the second-order effect is on your team before optimising the first.

Does it find security vulnerabilities? It finds some, and it is not a security scanner. Run actual scanning as well — see security best practices.

Should we require it before merge? Requiring it to have run is reasonable. Requiring it to have found nothing is not — that pressures authors into shaping code to satisfy a reviewer that cannot be argued with.

Is it worth 13 requests per review? On a large or risky diff, comfortably. On a three-line change, no. That is why the size threshold above is the policy worth having.

Where to go next

Sources

Every version-sensitive claim on this page was checked against first-party documentation. Only sources actually used are listed.

Primary sources

Go deeper in the Academy