You know the exact feeling. You’ve written the code, you’ve tested it, and it works perfectly. You submit the pull request. Then, you wait. A day passes. Two days. Your feature is stuck in review purgatory because the senior dev on your team is drowning in their own backlog.
When the review finally arrives, it’s usually a rubber-stamp 👍 or a pedantic debate over a variable name, because nobody has the mental bandwidth to deeply dissect 500 lines of completed logic. We all pretend this ritual makes us better engineers. But does it?
We have institutionalized the worst kind of bottleneck in the name of quality assurance.
Martin Fowler recently posed a question that sent shockwaves through engineering circles: Maybe we shouldn’t be reviewing all this code. The knee-jerk reaction is defiance. Of course we need reviews! How else do we ensure quality and shared ownership?
But the blind review dogma assumes every single line of code carries the exact same risk profile. It treats a one-line CSS tweak with the same life-or-death gravity as a massive refactor of our authentication system. This is absurd.
Treating every code change as equally risky is the most expensive security theater in engineering management.
The real friction lies in the timing. Post-hoc code review is the absolute worst place to catch design flaws. By the time the code is written, the developer has already spent hours building it. Sunk costs have piled up. Egos are attached to the implementation.
When you finally review the code and spot an architectural flaw, suggesting a completely different approach doesn’t feel like collaboration anymore. It feels like an attack. You don’t get a brainstorm; you get a defensive standoff.
Post-hoc code review is the worst place to catch design problems: by the time the code exists, sunk cost and ego make it brutally hard to change direction.
If we actually care about knowledge transfer, we shouldn’t be reading completed work in isolation. We should be pairing. Sitting next to someone—physically or virtually—while they reason through a problem teaches you infinitely more than reading their finished solution after the fact.
If we want to explore alternative solutions, let’s do it before someone spends three days implementing the wrong one.
The pushback in the industry is predictable. ‘Pair programming doesn’t scale!’ cries the developer who hasn’t tried it for more than an hour. ‘Are we just going back to waterfall?’ asks the manager terrified of losing their Jira metrics.
But the counter-argument isn’t ‘no review.’ It’s reviewing earlier, more cheaply, and having the courage to skip it entirely for low-risk changes. It’s about applying the ‘it depends’ framework with actual critical thought.
If you mandate a formal review for a non-critical change that won’t cascade and break things, you aren’t protecting the system. You’re just slowing everyone down to satisfy a process checklist.
We need to stop hiding behind process theater. If you are reviewing absolutely everything, you aren’t actually reviewing anything of value. You’re just rubber-stamping to meet a quota.
True engineering maturity isn’t measured by the number of PRs you block; it’s measured by the confidence to ship fast and the wisdom to know when to slow down.
FAQ
Q: If we don't mandate reviews for all code, won't bugs inevitably slip into production?
A: Not all code carries the same risk. Skipping reviews for low-risk, isolated changes frees up your senior engineers to do deep, meaningful reviews on critical business logic instead of rubber-stamping trivial UI tweaks.
Q: What's the practical alternative if pair programming doesn't scale for an 8-hour workday?
A: You don't need to pair 40 hours a week. The alternative is synchronous design discussions before coding begins, and establishing a clear, risk-based tiering system that dictates what requires formal review versus what can ship immediately.
Q: Isn't skipping reviews just an excuse for careless, 'move fast and break things' engineering?
A: No, it's the opposite. Carelessness is blindly following a process without evaluating context. True engineering maturity requires the critical thinking to differentiate between a high-risk architectural change and a low-risk text update, and applying review time where it actually matters.