Back to articles
LeadershipEngineering

Code Review Is Culture, Not a Checklist

The best teams I've led didn't review code to catch bugs — they reviewed to teach, to share context, and to raise the floor. Here's how to run reviews that make people better instead of making them defensive.

Yash Thakur
4 min read
Code Review Is Culture, Not a Checklist

The short answer: code review's real job isn't catching bugs — tests and linters do that better. It's transferring context, teaching taste, and raising the whole team's floor. You get there by reviewing the change and never the person, and by clearly separating "must change" from "I'd prefer."

I used to think the point of code review was to catch bugs. Eight years and a few teams later, I think that's the least interesting thing it does. A good linter catches more bugs than I do, and a good test suite catches more than both. What review actually does — when it's healthy — is transfer context, teach taste, and slowly raise the quality floor of a whole team. When it's unhealthy, it does the opposite: it teaches people that submitting a pull request means getting ambushed. The difference isn't the rules. It's the culture.

Review the change, not the person

The fastest way to poison a review culture is to make feedback feel personal. "Why did you do this?" reads as an accusation. "What's the thinking behind doing it this way?" reads as curiosity. Same question, completely different emotional payload. I coach my teams to assume the author had a reason — because they almost always did — and to ask about it rather than correct it.

The tell for a toxic review is defensiveness. If authors are explaining themselves instead of discussing the code, the reviewer has made it about competence. Pull it back to the artifact: the diff is the thing on trial, never the human who wrote it.

Separate "must change" from "I'd prefer"

A review where every comment carries the same weight is a review where the author can't tell what actually matters. A naming nitpick drowns out the real concurrency bug three files down. We tag the intent of every non-trivial comment, and it changed everything.

Making the intent explicit does two things. It lets the author triage — fix the blockers, consider the suggestions, ignore the nits if they're in a hurry. And it stops reviewers from using "approve with comments" as a passive-aggressive way to hold a change hostage over a style preference.

Praise is feedback too

Nobody teaches you to write "this is a great pattern, I'm going to copy it" in a review, but it's some of the highest-leverage feedback there is. It tells the author what to do more of, it spreads a good idea to everyone watching the thread, and it makes the whole exercise feel less like an audit. A review that is 100% criticism trains people to associate review with pain. A review that names what went right trains them to associate it with growth.

Protect the author's time, protect the reviewer's attention

Two failure modes, same root cause: reviews that drag. A pull request sitting for two days blocks the author and goes stale against main. A reviewer facing a 2,000-line diff can't give it real attention, so they skim and approve. Both are fixed upstream, not in the review: small pull requests, reviewed within a few hours, with the author having written a description that explains why before the reviewer reads a single line of how. The description is the most under-rated artifact in the whole process — it's the author's one chance to give the reviewer the context the diff can't.

The real output is the team

Here's the reframe that stuck with me. The output of a code review isn't the merged commit — the commit was going to merge anyway. The output is two engineers who now share a little more context, a junior who learned a pattern, a senior who got their assumption questioned, and a codebase whose standards nudged up a notch. Measure your review culture by whether people come out of it smarter and still willing to ship, not by how many comments got left. A checklist can catch a missing null check. Only a culture can make the whole team better at the same time.

Written by Yash Thakur

Senior React Developer · 8+ years building for the web

More articles

Keep reading