Kill the Pull Request

8 min read1,505 words

Pull requests have stopped paying for themselves. Push small changes to main, turn review comments into rules, and give the code you already have a jubilee.

branch. push. wait. stamp. merge. wait.

Every change waits in line for a person to look at it.

That made sense when code was slow to write.

Now the code arrives faster than anyone can read it, and the line is the only thing still slow.

We have too much process around pull requests. Open the branch, push, wait for CI, ping the channel, wait for a stamp, rebase, wait for CI again, merge, wait for CI a third time. That loop made sense when writing code was slow and every change carried a human’s guesswork. It isn’t worth the squeeze anymore.

I’m not the first to say it. Thorsten Ball, who builds the coding agent Amp, has spent most of 2026 making the case. This post collects his argument and the people around it, then adds what I think should replace the PR: rules instead of reviewers, and a reset for the code we already have.

The case

Thorsten’s argument goes like this. Review used to be how we caught bugs, shared knowledge, and integrated code. Agents now do a lot of the checking, can generate a walkthrough or video of any change, and run the tests before they push. So the PR mostly adds waiting: the same tests on a branch, again on merge, and a human stamp in between.

Thorsten Ball@thorstenball
Why are you still using pull requests?

Is it for code review?

If so, do you really think your or your colleagues catch bugs and mistakes that an Opus 5.5 or Fable or Astra won't find? You can literally spawn all three of them and have them check four times each.

(Also, don't tell me you don't have a "stamp plz" Slack channel or group chat somewhere.)

Is it for knowledge sharing?…
  • 1.7Klikes (1,698)
  • 86reposts (86)
  • 420replies (420)
Thorsten Ball@thorstenball
Next question: why are you still using branches?

We talked about PRs. I don't think they make sense anymore, if you rethink them from first principles.

Yes, if you only use them to trigger CI, then sure, go ahead. That's a fat commit, not a PR. But for mandatory code review? Knowledge sharing? C'mon.

But some of you said: "we use PRs because we use branches! I love to keep my stuff on branches."

And I'm here to tell you: you don't need branches! You can just push to main.…
  • 1.2Klikes (1,176)
  • 59reposts (59)
  • 188replies (188)
Thorsten Ball@thorstenball
I now honestly think that most engineers who still think that agents will be plopped into existing software development loops - tickets, push to GitHub, run CI, review a PR, merge a PR - aren't thinking far enough ahead.
  • 1.2Klikes (1,156)
  • 60reposts (60)
  • 117replies (117)
Thorsten Ball@thorstenball
Increasingly convinced: people who do best with agents are those that are good at shipping things in small pieces.

Someone who could ship a feature in 4 commits going to main now does better with agents than the guy who always ended up with a 6k PR on Friday afternoon.
  • 664likes (664)
  • 27reposts (27)
  • 67replies (67)
a note on the numbers

Attention isn’t proof. But it shows how many people are having this argument.

The part of his branches post that stuck with me: trunk-based development was always the right idea, it was just tedious. Feature flags, splitting a change into safe pieces, keeping two configurations alive for a day, migrating one call site at a time. That busywork is exactly what agents are good at. They do the tedious part now.

open the branchwait for ciping the channelwait for a stamprebasewait for ci again

It isn’t just Amp

Others got there too. Some reject PRs outright, and some just think they’ve stopped making sense for routine work.

Gergely Orosz@GergelyOrosz
I cannot unsee the death of the pull request in open source upon us.

PRs from external contributors made a lot of sense when it was hard to write code, and it took lots of time investment (+ lots of thinking!) to do so.

Now that it takes seconds/minutes: dynamics change
  • 754likes (754)
  • 27reposts (27)
  • 82replies (82)

Review already stopped scaling

Agents don’t prove code correct. But neither does a reviewer skimming a 640-line diff, and that’s what review has become on teams that merge four times the code they did a month ago. The bottleneck moves to review, then CI, then deploys, then GitHub’s rate limit.

Alex Lavaee@alexlavaee
I've never trusted code I didn't review until now.

Agents write more code than any of us can review. We often end up skimming the PR/diff and pushing. Current review methods do not prove the code is correct or does what we asked. Recent research found the best AI code reviewer caught the bug on its first try only 42% of the time.*

The evaluation bottleneck, regressions, and security incidents have forced us to find a better way.…
  • 1.1Klikes (1,136)
  • 59reposts (59)
  • 50replies (50)
Paul@PaulSangleF
we merged 4x more commits last week than we did a month ago (thanks opus 5.5). our dev setup and CI couldn't keep up, so we reworked both:

• lint: 4x faster
• memory per agent session: half
• CI setup step: 50x faster
• CI type check: 10x faster

we often run 10+ agents at once locally, and each one runs its own lint, type checks and tests.

from time to time, several agents would run these at the same time and block each other.…
  • 685likes (685)
  • 29reposts (29)
  • 44replies (44)
Steve Faulkner@southpolesteve
Everybody's trying to figure out how to scale PRs/code review, but the bigger bottleneck is going to be deployment. If models keep getting cheaper, eventually you have 100s of agents working autonomously. What is the plan for getting all that code merged and deployed? You can't put them all in a single merge train. We need to start letting agents validate changes against tiny slices of production traffic before the PR is merged.
  • 357likes (357)
  • 14reposts (14)
  • 57replies (57)
Kun Chen@kunchenguid
now that i solved the code review and ci bottleneck, the next bottleneck revealed itself

TIL github limits 5000 request per user per hour. that's not enough when "a user" means "hundreds of agents working for a human"

what's the solve?
  • 310likes (310)
  • 5reposts (5)
  • 100replies (100)

Even people building better review tools are moving away from reading diffs.

human review threads per pull request

Aviator’s Ankit Jain described how his team reviews four times more AI code: agents debate a change before the PR exists, a year of review comments becomes 64 machine-checked invariants, and agents prove each acceptance criterion in a preview environment.

On one PR, all that was left for a person was a naming call.

They still require a human approval on every PR, and I think that’s the step to question next. If the evidence is already recorded and most decisions are already settled, the PR is mostly a container. Thorsten makes the same point with an agent-recorded video of a feature working end to end: how differently do you review once you’ve seen proof?

The best objections

Some of the pushback is right about the goal. Teams need a shared mental model. Some domains need a human to read the money-movement code. Nobody wants half-finished work on main.

Romain Lanz@romainlanz
Hard disagree.

PRs aren't just about catching bugs.

They group related commits into a single change. Opus 5.5 implements a feature, Sol 6.1 reviews it, Opus pushes fixes, and so on. I don't want every intermediate commit landing directly on main, mixed in with everyone else's work.

Draft PRs let you prepare features that take time to build and aren't ready to ship yet.

Required PRs on a protected default branch keep agents from pushing whatever they want straight to main.…
  • 245likes (245)
  • 3reposts (3)
  • 35replies (35)
Panta@thepanta82
Is this a strawman? Pr reviews answer 3 questions:

1. are we doing the right thing?
2. are we doing it in the right way?
3. can we do it better?

And yes, you can fix all that later. But what you're adding and why is never gonna be clearer than before it settles in the codebase.
  • 48likes (48)
  • 1reposts (1)
  • 9replies (9)
Mark Ajzenstadt@mardehaym
A senior architect told me she'd stopped approving AI-generated PRs from her juniors.

Her VP noticed. Approval rates dropped. Cycle times spiked. Suddenly, she's the bottleneck.

So she invited the VP to a code review. Just to observe.

The junior explained the PR. Confident. Articulate. Code executed. Tests passed.

Then she asked, "What happens if we add a second payment provider next quarter?"

Silence. The junior stared at the code.…
  • 361likes (361)
  • 45reposts (45)
  • 53replies (53)
nanomader@nanomader
Code review is dead? I work in fintech and we read every line of source code in the MRs. Would you be comfortable knowing that, for example, your bank's money movement was implemented without an engineer reading the code and without looking at the solution from different perspectives?

Sure, we can implement anything we want with AI agents. No, we are not there yet because we cannot just prompt and have it done. …
  • 132likes (132)
  • 2reposts (2)
  • 9replies (9)

Here’s how I’d answer them without a PR:

Grouping and unfinished work. Every commit to main should be complete, green, small, and easy to revert on its own. Unfinished behavior hides behind a feature flag. Work in progress lives in a checkout, or, as Thorsten put it when someone asked where five agents’ half-done work goes, “in checkouts, obviously.”

Protection from agents pushing junk. Run the authoritative checks once, on the exact commit that lands on main, and block the deploy when they fail. Add canaries and automatic rollback where the risk warrants it. That’s a gate on the code, not on a person’s calendar.

Shared understanding. Talk about the decisions that matter early, while they’re still cheap to change. When asked how a team knows its intent was understood, Thorsten’s answer was “Talk to each other? Make small changes? Share a prototype?” A short record of decisions made during the work beats a comment thread at merge time.

Regulated or high-risk code. Keep a human gate there. Just don’t force every other change through it.

Rules, not reviewers

A lot of what reviewers write is a rule they’ve written before. “Use the retryable exception here.” “Add a timeout.” “Don’t swallow that error.” Every senior engineer carries a private list like this and applies it by hand, inconsistently, to whatever they happen to notice.

I tried to make that list visible. We use Jira at work, like a lot of the industry, and for a while I turned every review comment into a ticket. It didn’t work. The tickets buried the few comments that mattered under hundreds that didn’t, and they ate the attention I needed for real decisions.

what the tickets taught me

A PR plus a ticket per comment is twice the ceremony.

The better move is to write the rule down for the machine instead of for a person. That happens at three levels:

the language

TypeScript lets you do almost anything, which is a problem when an agent writes most of the code. Effect gives you one standard way to model errors, dependencies, retries, and resources, so “how should this be done?” stops being a review comment.

lint rules

Anything mechanical should fail a check, not wait for a human. Dillon Mulroy’s anti-slop rules for Oxlint reject patterns agents love: chained type assertions, widening a value and then asserting it back, unknown parameters and returns, and ad hoc typeof checks. They’re meant to be copied into your repo and changed, so they become yours. The Effect team is writing similar rules for its own idioms.

traits

Some rules are judgment, not syntax. For those I like traits: short Markdown guides that describe one philosophy or invariant, written for agents to load before they work. They’re the “Effect way of doing things” for everything a type checker can’t see.

lauren@poteto
every team needs a gardener. someone quietly watching the stream of PRs flowing into your codebase, noticing the smells: the third isRecord this week, the lint suppressions creeping like ivy across your carefully planned garden. a steady hand tending the weeds that would engulf it in slop if left unchecked.

with careful grooming it stays a garden. every weed you pull becomes a rule, so it can't grow back. without that, it's just whatever grew.
  • 854likes (854)
  • 53reposts (53)
  • 39replies (39)
lauren@poteto
everything i know about managing agents i learned from the amazing programmers and computer scientists that came before

constraints in your codebase are freeing for both humans and agents! this has always been true, but if you were a small dev team you likely never had to think that deeply because you could trust your fellow programmers to write code and review well…
  • 2.9Klikes (2,863)
  • 186reposts (186)
  • 134replies (134)
lauren@poteto
something that keeps bothering me is how some people see slop as something that is happening to them, like they're some kind of helpless bystander powerless to do anything about it

excuse me but you are a software engineer, you literally learned how to make sand think and make computers do your bidding?! and now you can't do anything about it? please

the 2 things you should know to cut through all the noise:…
  • 4.6Klikes (4,622)
  • 340reposts (340)
  • 231replies (231)
shadcn@shadcn
An agent helped me come up with a lint rule and a script to detect and remove slop comments.

The check-comment.mjs script it wrote has 10+ lines of slop comments.

🤦‍♂️
  • 1.2Klikes (1,227)
  • 18reposts (18)
  • 155replies (155)

Rules don’t replace judgment about intent and risk. They clear away the repetitive comments, so the few decisions that need a person are easy to see. And as shadcn found, agents will write slop into the very tools meant to catch it, so every rule needs an owner.

A jubilee for the codebase

New rules raise an awkward question: what about the code written before them? Most codebases have years of contradictions in them, and agents read all of it as context. If half the code does something one way and half another, the agent learns both.

Leviticus 25 has a word for this kind of reset. It prescribes a jubilee every fiftieth year: a horn blast on the Day of Atonement, the release of Israelites in debt servitude, a year of rest for the fields, and land returned to the families it originally belonged to. The idea is that debt and loss don’t get to compound forever.

leviticus 25:10, cast on the liberty bell

Proclaim liberty throughout all the land.

Do that to your codebase. Removing contradictions matters as much as the fixes, because every future agent gets a cleaner context. Just don’t do it as one giant cleanup PR. A jubilee is a season you declare, not a single change:

Write down your philosophies and invariants.

Point agents at one area at a time.

Fix what breaks the rules. Delete what no longer earns its place.

Land it as many small commits to main.

I’ve also written a draft arguing Git Flow deserves a second look, because its worst part was always the people. Humans are bad at resolving conflicts and at finding the bug in a big pile of commits, and agents are much faster at both. That’s a separate post. Faster merging doesn’t remove the risk of code that hasn’t run together, and the process around each change is the bigger cost.

Kill it

Push small changes to main.

Turn your review comments into rules.

Let agents run the checks, record the proof, and watch the deploy.

Kill the pull request.

Talk to your teammates about the decisions that matter, and keep a gate only for the code that needs one. Try it on one repo for a week. See what you actually miss.