PR Reviews: Why Reading Someone Else’s Code Made Me a Better Engineer
Originally published on Medium. Read here free — no account needed.
The fastest engineering lessons in my week usually start in someone else’s code

Most Mondays, I open GitHub and find a line of pull requests waiting before I’ve written any code. I used to see that queue as work standing between me and my real work. Then reviewing became a weekly habit.
One implementation arrived as seven separate PRs. Another week, I approved or closed eight PRs across several related codebases. After a few weeks of that rhythm, I was learning more from reading someone else’s code than from writing more of my own.
Writing code exercises the decisions you already know how to make. Reviewing exposes you to decisions you might never make on your own. That changed how I think about becoming a better engineer. 💡
Writing More Code Eventually Repeats the Same Lessons
Developers improve by building things. But when you own the implementation, you also choose the architecture, abstractions, libraries, and compromises. Even difficult work gets filtered through your existing instincts.
A pull request takes away that control. Someone else framed the problem and chose the boundaries. Your job is to reconstruct their reasoning from the change and decide whether it holds up.
Writing tests whether your solution works. Reviewing tests whether you understand why a different solution works, where it might fail, and what it could cost later. That loop strengthened five skills faster than another round of solo coding.
1. I Learned to See Architecture Across Changes
The seven-PR feature was the clearest example. Each PR covered one slice of a larger implementation. Any slice could look clean on its own, but I had to understand how all seven combined. Where did data enter? Which layer owned each responsibility? Did an early shortcut create coupling three PRs later?
When you build the feature, that architecture already lives in your head. A reviewer has to rebuild the mental model from the evidence in front of them. Clean files can still combine into a system that’s hard to change. The real test is whether locally sensible decisions form a coherent whole.
I now review the larger flow as deliberately as each diff. 🛠️
2. I Built a Bigger Pattern Library
Reviewing across several codebases exposed me to more variety than staying inside one repository. Every unfamiliar PR added examples of dependency boundaries, error handling, API design, tests, and failure modes.
Strong changes gave me patterns worth reusing. Awkward changes showed me which decisions create friction. Even dependency updates taught me to separate harmless maintenance from changes that needed deeper regression testing. Repetition turns “something feels wrong” into actionable feedback. You can name the smell, explain the consequence, and suggest a smaller alternative without redesigning the feature.
That pattern library follows you back into your own work. I keep short notes on approaches worth stealing and mistakes worth avoiding.
3. I Learned to Ask Better Questions
Most of the seven sliced PRs were good. A couple needed clarification before I could approve them. Sometimes the implementation is wrong. Sometimes the reviewer is missing context. A good question reveals which one you’re dealing with.
“I don’t like this approach” gives the author almost nothing to work with. “What guarantees that this state is still valid when the next slice runs?” identifies the assumption you need to verify.
The questions that produce the best reviews usually focus on consequences:
- What assumption does this code depend on?
- What happens when the dependency fails or returns partial data?
- Is this behavior covered at the right boundary?
- Does this abstraction simplify the next change or only this one?
- Is the complexity inherent to the problem, or did the implementation introduce it?
Specific questions make the review collaborative and expose gaps in your understanding before a preference becomes a blocking comment. They’ve also improved how I communicate outside GitHub. I spend less time proposing immediate solutions and more time identifying the risk that needs discussion.
4. I Learned the Product Behind the Code
The more PRs I reviewed, the more involved I became in the product. Reviews led to conversations about how the codebases fit together, where the product was going, and which decisions mattered beyond the current ticket.
Implementation details reveal constraints that task descriptions hide. You see where services depend on each other, which workflows are fragile, and where a small change creates operational work somewhere else. My review questions started changing.
“Is this code clean?” still mattered, but it became one part of a larger evaluation:
- Does this behavior match what the user or partner needs?
- Is the operational cost worth the implementation convenience?
- Are we preserving an old constraint that no longer applies?
- Can the team support this after launch?
Engineering growth means connecting code-level decisions to product, operations, and team consequences. Before I get deep into a diff, I state the outcome the PR should create. If I can’t, I don’t understand it well enough to review it.
5. I Developed Judgment Without Owning Every Decision
Reviewing lets you watch different engineers decompose problems, accept complexity, and choose which tradeoffs feel safe. Then you have to decide what deserves a comment, what deserves a blocking request, and what is simply different from how you would have written it.
Weak reviews turn preferences into requirements. Strong reviews protect the codebase without forcing every contributor to think the same way. You can’t give every concern equal weight. A production failure matters more than a naming preference. A missing authorization check matters more than a helper function you would have extracted differently.
Approving is also a decision. Repeated reviews gave me practice making those calls with incomplete information, and you don’t need to own every implementation to develop that judgment.
The PR Review System I Use
Volume alone won’t make you a better reviewer. Skimming 20 diffs teaches less than carefully reconstructing two important changes. I use five steps.
- Triage the queue. High-impact changes come before routine updates. Quick approvals shouldn’t hide the architectural change that needs uninterrupted attention.
- Read for intent. Identify the problem, expected outcome, and scope before getting lost in individual lines. Ask when the PR description leaves context out.
- Review in passes. Start with architecture and scope, then check correctness and failure modes, and finish with tests, maintainability, and naming.
- Leave actionable comments. Name the concern, explain the consequence, and ask a question or suggest the smallest viable alternative. Mark optional feedback as optional.
- Close the loop. Revisit responses. When the same comment keeps appearing, move that guidance into documentation, tooling, or a team standard.
The best review comment is sometimes the last time anyone needs to write that comment manually. ✨
You Can Practice This Without a Review Queue
You can practice this as a solo developer or before your first engineering role.
- Review open PRs in an open-source project you already use.
- Compare your observations with the maintainer feedback after the PR moves forward.
- Review a friend’s side project and ask them to explain decisions you don’t understand.
- Open a merged PR in a mature repository, inspect the diff first, and predict the concerns before reading the real conversation.
Start with two or three PRs per week. Don’t manufacture comments to prove you participated. A clean approval with a clear reason is more valuable than five low-signal suggestions.
Read More Code Than You Write This Week
The Monday queue still represents real work, but I no longer see it as time taken away from growth. Reviewing taught me to see architecture, build a wider pattern library, ask better questions, understand the product, and make clearer decisions about risk.
Before you start your next project, review three pull requests. Write down one architectural decision, one unfamiliar pattern, and one question each review forced you to answer.
The fastest way to become a better engineer might be opening the queue on Monday and learning how someone else thinks.
What could you learn by reviewing three pull requests this week?