Shipping 50 PRs in a Week: What Actually Changed

A week of deliberately high throughput taught me where velocity actually comes from — and that the bottleneck is almost never typing speed. Notes on small diffs, fast review, and the discipline that makes speed safe.


I spent a week trying to ship as many pull requests as I responsibly could, partly as an experiment and partly because the backlog had gotten personal. Fifty merged PRs later, the lesson wasn’t what I expected. The constraint on throughput was never how fast I could write code. It was everything around the code — review latency, branch hygiene, the half-hour tax of context-switching, and the slow accretion of work-in-progress that nobody had finished.

Velocity, it turns out, is mostly a property of your workflow, not your fingers. The teams that ship fast aren’t typing faster. They’ve removed the friction between “this change is done” and “this change is live,” and that friction lives in surprising places.

Three habits did the heavy lifting. Keep every diff small enough to review in five minutes. Keep every branch to a single task so work never piles up half-finished. Trust the tests enough to stop hand-checking each change. None of it is about working harder.

Small diffs are a velocity technology

The biggest single change was shrinking my pull requests. A 600-line PR sits in review for a day because no reviewer wants to start it; a 40-line PR gets reviewed in the gap between two meetings because the cost of looking is low. Review latency is a function of diff size far more than diff difficulty, and review latency is the real bottleneck in most teams.

Small diffs compound. They merge faster, so they conflict less, so rebasing is cheap, so you ship the next one sooner. They’re easier to revert, so shipping them is less scary, so you ship more readily. They isolate failures, so when something breaks the bisect is short. The whole system gets faster because each unit of work is small enough to flow through it without clogging.

The fastest way to ship more is to ship smaller. A diff small enough to review in five minutes is a diff that’s already half-merged. — the rule that ran my whole week

One task, one branch, one PR

The second thing that mattered was refusing to let work pile up in the working tree. Every task got its own branch off the latest main, did exactly one thing, and opened exactly one PR. No “while I’m in here” detours, no two features sharing a branch, no half-finished experiment blocking a finished fix.

# start clean off the latest main, every single time
git fetch origin main
git switch -c fix/specific-thing origin/main

# ... one focused change ...

git push -u origin fix/specific-thing
gh pr create --fill   # one task, one PR

This sounds rigid and it’s actually liberating. When each branch is one task, an in-progress change never blocks a finished one — you just switch branches. When a review comes back with comments, you address them in isolation instead of untangling them from three other things you’d started. The discipline of one thing per branch is what let me have a dozen changes in flight without any of them stepping on the others.

Speed is safe only when the safety net is automatic

None of this would have been responsible without tests and CI doing the worrying for me. Shipping fifty changes by hand-verifying each one would have been reckless; shipping fifty changes where every one ran the full suite and couldn’t merge red was just fast. The thing that makes velocity safe is automation you trust enough to not double-check.

That trust has to be earned. A flaky test suite is worse than no suite, because it teaches you to ignore red, and a team that ignores red eventually merges something genuinely broken. The week worked because the suite was fast and honest: green meant safe, red meant stop, and there was no third state where I had to use judgment about whether a failure was “real.”

The real takeaway is almost anticlimactic. High throughput didn’t come from working harder or cutting corners. It came from making each change small, each branch isolated, and each safety check automatic — and then letting the system do what a well-built system does, which is get out of your way.

Common questions

What actually limits how fast you can ship code?

Almost never typing speed. The real constraints are review latency, branch hygiene, context-switching overhead, and unfinished work piling up. Velocity is mostly a property of your workflow, not your fingers.

Why do small pull requests ship faster?

Review latency tracks diff size far more than diff difficulty. A 40-line PR gets reviewed between two meetings; a 600-line PR sits for a day. Small diffs merge faster, conflict less, revert easily, and isolate failures, so each one flows through the system without clogging it.

How does one-task-per-branch help throughput?

When each branch does exactly one thing, an in-progress change never blocks a finished one. You just switch branches. Review comments get addressed in isolation, and you can keep a dozen changes in flight without any of them stepping on each other.

What makes shipping fast also safe?

Automation you trust enough not to double-check. A fast, honest test suite where green means safe and red means stop lets you ship many changes without hand-verifying each one. A flaky suite is worse than none, because it teaches you to ignore red.