What Is a Code Review? A Plain-English Guide for Beginners
- Shawn West
- Mar 25
- 7 min read
Updated: Aug 10
Before a developer's work becomes part of the product, another person reads it first — line by line, like an editor reading a draft before it goes to print. That habit has a name: the code review. It is one of the highest-leverage quality habits a team has, and it is almost always misunderstood by newcomers as "someone hunts for your bugs."
Bug-hunting is part of it. But if that were the whole story, a good test suite would make reviews pointless — and teams with excellent tests still review every change. Something else is going on. This guide walks through what a review actually is, using one small feature carried all the way through, and shows you the part beginners miss: a review is as much about spreading knowledge as it is about catching mistakes.
Takeaway: a code review is a second person reading a change before it ships — and it does more than find bugs.
Meet the change
Priya is a developer on a small team that makes a note-taking app. She just built a new feature: export a note to PDF, so a user can save or print what they wrote. The code works on her machine. She clicks the button, a PDF appears, everyone's happy.
On this team — like most teams — "works on my machine" is not enough to ship. Priya's change has to be read by someone else first. That someone is Marcus.
We will follow this one feature from Priya's finished code all the way to it becoming part of the live app. Everything below is the same small story, seen from a few angles.
Takeaway: a review starts the moment a developer says "I think this is done" — not before, and not after it ships.
The basic shape of a review
Here is the loop, in plain terms.
Propose. Priya opens a pull request — usually just called a "PR." A PR is a polite way of saying: "Here is my change. Please look before it goes in." It shows exactly what she added, changed, or deleted.
Review. Marcus reads the change and leaves comments on specific lines — questions, suggestions, or "this looks good."
Discuss. Priya answers the questions and talks through anything unclear.
Revise. She makes fixes based on what came up.
Approve. When Marcus is satisfied, he approves.
Merge. The change is combined into the shared codebase and becomes part of the product.
If you have ever asked a colleague to read an important email before you hit send, you already understand the shape. The reviewer is not doubting you. They are catching the thing you are too close to see.
Takeaway: every review is the same six-step loop — propose, review, discuss, revise, approve, merge.
One real comment thread, start to finish
(Developed example — a simple scenario.)
Let's zoom in on a single comment, because this is where the whole point lives.
Marcus is reading Priya's export-to-PDF code. It handles the normal case well: a note with a title and some paragraphs turns into a tidy PDF. Then he pauses on one line and leaves a comment:
Marcus: What happens here if the note is empty — no title, no text? Does the export still run?
Priya reads it and stops. She had tested with her own notes, which always had content. She had never once tried exporting a blank note, because in her head a note always has something in it. She opens the app, creates an empty note, and clicks export.
The app throws an error and the button gets stuck spinning. For a real user, that would look like the app freezing.
She replies:
Priya: Good catch — I didn't handle that. An empty note crashes the export. I'll add a check: if there's nothing to export, show a small "Nothing to export yet" message instead of running.
She makes the fix, adds a quick test so the empty-note case can't quietly break again later, and pushes the update. Marcus re-reads it:
Marcus: Looks good. The message is clearer than a silent failure. Approving.
He approves. The change merges. The feature ships — now safe for the note Priya never thought to try.
Notice two separate wins in that one thread. First, a real problem got caught before a user ever hit it. Second — and this is the part beginners overlook — Priya learned something: always consider the empty case. She will carry that lesson into the next feature she writes, and the one after that. The review didn't just fix this PDF; it made Priya a slightly better developer. That is knowledge moving from one person to the team.
Takeaway: a single review comment can both prevent a bug and teach a lasting habit — that is why reviews outlast any one change.
Why a fresh reader catches what the author can't
Why did Marcus see the empty note when Priya didn't? Not because he is smarter. Because he wasn't in her head.
When you build something, you build it around the picture in your mind — for Priya, a note with content in it. That picture is invisible to you; it just feels like "how notes are." A reviewer doesn't share your picture. They come in cold, ask the plain question — "what if it's empty?" — and the gap you couldn't see becomes obvious.
This is the quiet engine behind code review, and it is worth naming clearly: the goal is to discover the gap, not to judge the author. Marcus is not scoring Priya. He is doing the one thing she structurally cannot do for her own work — looking at it without already knowing how it is "supposed" to be used. A good review culture treats a caught gap as a win for the team, never as a mark against the person. (If you want to see how much a team's review tone reveals about its health, that is exactly what a quality-culture audit looks at.)
Takeaway: the reviewer's advantage is fresh eyes, not superior skill — so a caught gap is a shared win, not a failing grade.
What a review actually checks
Catching a crash is the visible part. A thorough reviewer is looking across several dimensions at once. Here is what those are, the question each one asks, and why a fresh reader is well-placed to catch it.
Dimension | The question the reviewer asks | Why a fresh reader catches it |
Correctness | Does it work — including the awkward cases, like an empty note or a 100-page one? | The author tested the case they imagined; the reviewer imagines a different one. |
Readability | Will someone else understand this code in six months? | If a fresh reader is confused now, a future reader will be too. |
Design fit | Does this match how the rest of the app already does things? | The reviewer knows the surrounding code the author may not have touched. |
Security | Could this be misused, or leak something it shouldn't? | The author focused on making it work; the reviewer asks how it could go wrong. |
Tests | Is there a check so this can't silently break later? | The reviewer notices the missing safety net the author was too close to miss. |
You don't need to memorize this table. The point is simply that "review" is much wider than "find bugs." A reviewer is also asking will this be clear later, does it fit, is it safe, is it protected. Getting comfortable with those questions is a large part of what makes writing a clear, catchable bug report feel natural, too.
Takeaway: correctness is only one of five things a review weighs — readability, design fit, security, and tests all get read at the same time.
Review is knowledge sharing, not just error catching
Come back to that second win in Priya's thread — the lasting one.
When Marcus reads Priya's code, he learns how the export feature works, so he is no longer the only person who understands it. When Priya answers his question, she learns a habit she'll keep. When a third teammate reads the same thread later, they pick up both. Over months, this is how a team stops having one person who is the "only one who knows" a given part of the app — a fragile situation every team wants to avoid.
Reviews also quietly keep the codebase consistent. When every change is read by someone who knows how the app already does things, the app stays coherent instead of turning into a patchwork where each feature was built a different way. That patchwork, left to grow, is a big source of what teams call technical debt — the slow drag of a codebase nobody quite agrees on. Reviews are one of the cheapest ways to keep that drag low.
Takeaway: every review spreads knowledge and keeps the codebase consistent — benefits you get even on a change that had zero bugs.
What a review is not
A few things beginners worry about that reviews are not:
Not a test replacement. A reviewer reads; they don't run every path a machine would. Reviews and automated tests do different jobs, which is why teams keep both. (If you're new to the automated side, start with unit testing basics.)
Not a personal judgment. A comment is about the code on the screen, not about you. "What if the note is empty?" is a question about the note, not about Priya.
Not a rubber stamp. "Approve" should mean "I actually read this," not "I clicked the button." A review that always says yes without questions is not really a review.
Takeaway: a review sits alongside tests and works only when the approval means someone genuinely read the change.
How to make your first reviews go well
Whether you are the one writing the change or the one reading it, a few plain habits help.
When your change is being reviewed:
Keep the change small. A short PR gets a careful read; a giant one gets a tired skim.
Write a one-line note on what the change does and how you tested it. It saves the reviewer guessing.
Treat every comment as a question, not an attack. "Why this way?" usually means the reviewer is curious, not critical.
When you are the reviewer:
Ask the plain question. "What if it's empty?" is worth more than staying quiet to look agreeable.
Say what is good, not only what to fix. It tells the author what to keep doing.
Aim to understand, not to approve fast. If you can't explain what the change does, you're not done reading.
Takeaway: small changes, plain questions, and kind wording turn reviews from a chore into the fastest way a team learns together.
Sources
This guide uses one carried, labeled example — Priya's export-to-PDF feature and her exchange with Marcus — as a composite scenario built to illustrate how a review works. It is not a record of a specific real team or person. The workflow it describes (the pull-request loop of propose → review → discuss → revise → approve → merge) reflects the standard practice used across common code-hosting platforms.
Related reading
Keep learning. This article is part of the Start Here path in the ShiftQuality Learning Center.


