CodingFebruary 10, 20264 min read
Code Review Is a Culture, Not a Gate
USAMA DARWASHI

I've watched code review save projects, and I've watched it quietly kill them. The difference was never the tooling, the branch strategy, or the checklist in the PR template. It was whether the team treated review as a conversation or as a gate you have to get past.
What the gate version looks like
You know this one. A PR sits untouched for three days. The author has mentally moved on. A senior engineer finally opens it, skims 900 changed lines, and leaves either LGTM or a wall of formatting nitpicks a linter should have caught. The author fixes the nitpicks without really reading them and merges. The review happened. Nothing was reviewed.
I ran into this hard while leading development on Sabr, the analytics and monitoring platform we built for Oman's telecom regulator. Mixed-seniority team, hard deadlines, and a review process that had drifted into ceremony. Junior engineers waited days for approvals, so they started batching work into enormous PRs to "save reviewer time". Big PRs got shallower reviews, shallow reviews let bugs through, bugs added pressure, and pressure made the PRs even bigger. Gate-thinking is a spiral, and it only turns one way.
What broke the spiral wasn't a new tool. It was deciding, out loud, that review is how the team thinks together. The senior engineers' mental model of the system, the domain rules buried in a regulator's reporting requirements, the reason a query is shaped the way it is: review is where that knowledge actually moves between heads. A gate moves nothing. It just slows the queue.
Latency is the health metric nobody graphs
If I could put one number about a team on a dashboard, it would be the median time from "review requested" to the first meaningful comment. Not time to approval. First contact.
At Byanat we built monitoring for a living, tracking degradation across telecom towers and the health of some 300,000 IoT SIMs, and it always struck me that we measured our infrastructure far better than we measured ourselves. Review latency is the closest thing I know to a single vital sign for a team. When it's short, it says unblocking a colleague matters more than protecting your own flow for another hour. When it stretches into days, it says review is a tax people pay grudgingly, and everything downstream inherits that attitude.
A review that arrives in twenty minutes teaches. One that arrives in three days just judges.
The fix is unglamorous: make review the first thing you do after a break, not the last thing before one. When I open my laptop, pending reviews come before my own branch. On teams where two or three people adopt that habit, latency collapses within a week and nobody needs a policy document.
Small diffs, kind sentences
Latency and PR size feed each other, so you attack both. My rule of thumb: if a reviewer can't hold the whole change in their head, they'll review the parts they understand and approve the parts they don't. Under about 300 lines, people read code. Above that, they pattern-match.
Tone matters more than most engineers want to admit, and it isn't about being soft. A review comment is documentation with an audience of one, often someone early in their career reading it at the end of a long day. A few habits that cost nothing:
- Say why, not just what. "Extract this" teaches nothing; "this duplicates the validation in
ReportService, and the two will drift" teaches the codebase. - Separate blocking from preference. I prefix non-blockers with
nit:and I mean it: the author can ignore them and merge. - Ask real questions. "Why did you go this way?", asked honestly, has shown me more than once that the author knew something I didn't.
- Praise specifically. "This migration ordering is clever" costs five seconds and shapes what people do next time.
The most senior engineer's comments set the ceiling for the whole team's tone. Juniors imitate whatever they receive.
When review is the wrong tool
Some PRs should never have been PRs. If a thread passes three rounds of back-and-forth on the same design question, the medium has failed. Stop typing, get on a call, share a screen, and pair for thirty minutes. Async review is excellent for verification and knowledge transfer; it is terrible for design negotiation. When I led the team at Sagan World, fully remote across time zones, we had a standing rule: three rounds on one thread and either side can call a pairing session, no justification needed. It saved us days every month, and more than a few working relationships.
The point of all of it, the latency, the size, the tone, knowing when to pair, is the same point: review is the team thinking together in writing. Treat it as a gate and you get a queue. Treat it as a culture and you get a team smarter than any individual on it. Six years in, that is still the highest-leverage engineering practice I know.