Stop Using Pull Requests
- title
- Stop Using Pull Requests
- type
- summary
- summary
- Laforgia's evidence synthesis against PRs as default workflow β origin-story category error, <15% of comments are about bugs, 86-99% of lead time is waiting, T*D as the alternative
- tags
- code-review, software-engineering, continuous-delivery
- sources
- stop-using-pull-requests
- created
- 2026-05-22
- updated
- 2026-05-22
Andrea Laforgia's March 2026 substack essay assembles two decades of peer-reviewed research, large-scale industry data (DORA, Microsoft, ThoughtWorks), and practitioner consensus to argue that the standard pull-request workflow is Deming's "inspection after the fact" β and that better practices already exist. The piece is not anti-review; it is anti-blocking-async-PR-as-default.
The category-error origin
git-request-pull (Torvalds, 2005) and GitHub's web PR (2008) were designed as a gatekeeper mechanism for untrusted contributors submitting code to repositories they do not own. That was a genuine innovation for open source. The category error is teams of trusted colleagues importing the same model internally β they get the friction without the trust mismatch the friction was solving.
Thierry de Pauw's framing: "Pull requests are designed to make it easier to accept contributions from the outside world, from untrusted people we do not know about." When applied to a team that hired each member for trusted competence, the model imports the wrong assumption.
This is the same structural critique i-dont-want-your-prs makes from the maintainer's side, except Laforgia's piece pre-dates the LLM angle and grounds the case in classical software-engineering research.
The bug-catching myth
The most common stated justification for code review is "to catch bugs." The peer-reviewed evidence says this is largely wrong:
- Microsoft Research 2015 ("Code Reviews Do Not Find Bugs"): only a small percentage of review comments relate to bugs; most are structural and style issues.
- Bacchelli & Bird 2013 ("Expectations, Outcomes, and Challenges of Modern Code Review"): <15% of issues discussed in reviews relate directly to bugs. The primary benefits are knowledge transfer, team awareness, and alternative solutions.
- One unnamed major tech company, after analyzing 9 million code reviews: knowledge transfer is the primary source of ROI. Up to 75% of comments affect evolvability/maintainability rather than functionality.
The piece is careful: this doesn't make code review worthless. It locates its value in code-review-knowledge-transfer β and a blocking async queue is one of the worst possible mechanisms for that.
The waiting-time math
If a change takes 10 min to write but waits 1 hour for review, the code waits for 86% of its lead time. If review takes one working day, the code spends 99% of its existence waiting for a human.
Fowler's client number that anchors the piece: 130,000 hours in 2020 waiting for 7,000 PRs that received no comments at all (91% of their PRs). The vast majority were rubber-stamped, yet still imposed the delay.
The damage compounds via context switching: developers wait an average of 4 days; 86% of PRs are handled under context-switching conditions; context-switching PRs are 223% slower than non-context-switching ones. Rebuilding mental context after a PR opens takes 30-60 minutes if it happens at all.
Reinertsen's lens (Principles of Product Development Flow): PRs create a perverse incentive toward larger batches. Because the transaction cost of getting a review is high, developers batch more changes into each PR to amortize it. Larger PRs review worse. Cycle reinforces.
Dragan Stepanovic's observation across 30+ repos: teams with small async PRs sometimes have lower throughput than teams with large PRs, because waiting β high WIP β less review availability β more handoffs β more waiting. The team becomes "N teams of one person."
The DORA evidence
Accelerate (Forsgren, Humble, Kim, 2018) and successive DORA reports across 36,000+ professionals:
- Trunk-based development correlates with higher delivery performance across every metric.
- Elite performers meeting reliability targets are 2.3Γ more likely to use trunk-based-development.
- The DORA capabilities framework explicitly names "heavyweight code review processes" as a barrier.
- Accelerating code review alone improves software delivery performance by 50% (2023 report). The problem is the speed, not review itself.
Caveat the piece makes honestly: DORA is correlational. High-performing teams that adopt TBD may be better-funded or better-cultured. But consistency across years and tens of thousands of respondents makes it the strongest industry evidence available.
The T*D alternative
Laforgia coins T*D as the union of three practices sharing the same initials and the same shift-left philosophy:
- Test-Driven Development β Microsoft/IBM studies: 40-90% defect reduction at 15-35% more dev time. Every line satisfies a test before it reaches anyone; no human gatekeeper needed for "does it work."
- Trunk-Based Development β daily integration to mainline, branches under a day, feature flags for incomplete work. See trunk-based-development.
- Team-focused Development (pair-programming, ensemble/mob programming) β review happens during creation, not after.
The crucial empirical claim is Muller & Tichy (2005): pair programming and solo programming with peer review achieve equivalent cost at equal quality. The review phase for solo work adds enough overhead to match pairing. So pairing doesn't add cost; it relocates QA from after development to during it.
Laforgia is honest about a gap: no peer-reviewed study has directly proven teams can safely eliminate post-hoc review when practising pair programming. The full claim is practitioner consensus extending the cost-equivalence finding.
The five-stage transition
The piece is unusually careful about teams that aren't ready to drop PRs:
- Optimize PRs β small (<200 lines), 4-hour SLA, automated style/lint, one required approver.
- ship-show-ask (Wilsenach) β categorize changes: ship (merge without review for routine), show (merge immediately, review post-merge), ask (open PR and wait for complex/uncertain).
- Pair programming + TBD β pair on production code, multiple trunk merges/day, post-commit review for unpaired work.
- Ensemble programming + TBD β whole team co-creating, continuous review, direct trunk commits, feature flags.
- Full T*D β all three practices together, fast automated pipeline.
Thierry de Pauw's "non-blocking continuous code review" sits between stages 2 and 3: reviews happen on mainline post-merge, on a per-feature level, no hierarchical requirements (juniors review seniors and vice versa), unreviewed code may reach production if automated tests pass. One organization's internal auditors found this superior to traditional checkbox-based compliance.
The trust gradient
Laforgia rejects the binary framing his own argument seems to imply. Trust is a gradient:
- Small co-located team that pairs daily β case against async PRs is strongest.
- Large org with many teams β cross-team contributions may still warrant lightweight PRs with fast SLAs.
- Inner-source / platform teams accepting semi-external contributions β some gatekeeping remains defensible.
- Distributed teams with timezone overlap β pair during overlap, non-blocking review outside it.
- Minimal-overlap distributed teams β async PRs may be least-bad, but should still be optimized aggressively.
The antipattern diagnosis applies most strongly to same-team, same-context work where async blocking PRs replace trust that should already exist.
Connections in the wiki
- i-dont-want-your-prs β CiΔΕΌarkiewicz attacks the maintainer side of OSS PRs from the post-LLM angle; Laforgia attacks the internal-team side from the classical-SWE-research angle. Different premises, same target.
- agent-principal-agent-problem β Crawshaw on how agents collapse the effort signal that made review-then-commit work; Laforgia's piece doesn't go there but the two stack neatly (agents kill review-as-effort-signal, but the signal was already weak per Bacchelli & Bird).
- stacked-prs / billjings-git-not-fine β Jings argues git lacks the primitives PRs need; Laforgia argues the workflow itself is wrong. Both arrive at "the PR ceremony is overhead."
- no-silver-bullet-llms β Bennett's piece, separately, on DORA's recent inversion under LLM-assisted coding.
- cult-of-vibe-coding, clean-code-coding-agents β adjacent threads on what review is for in a post-LLM world.
What's new vs already known
The arguments aren't novel β Fowler, Farley, Kerr, de Pauw, Stepanovic, Hammant, and the Minimum CD initiative have been writing this for years. What Laforgia adds is a single document that:
- Cites the actual peer-reviewed studies (rather than the practitioner blog chain).
- Names the bug-catching myth concretely (<15%, 1.5M comments, 9M reviews).
- Quantifies the waiting cost (the 130,000-hour number).
- Lays out an honest five-stage transition that doesn't pretend trust is binary.
- Acknowledges where the evidence has gaps (no direct study replacing PRs with pairing).
The piece is a good single-link reference when someone asks "why are PRs bad for an internal team?" without committing to read four blog posts and a DORA report.