- Initial thoughts
- 1. Reviewing accelerates learning and skill development
- 2. Junior developers provide unique value and grow fastest
- 3. Reviewing enhances your own code quality and habits
- 4. It fosters system-wide understanding and reduces silos
- 5. Universal review enforces standards, consistency, and security
- 6. More reviewers distribute workload, reducing bottlenecks and accelerating delivery
- 7. It builds psychological safety, team cohesion, and positive culture
- 8. Code reviews make for better estimates
- 9. Google's Review Culture: A Proven Model for Excellence
- 10. "But we don't have time for everyone to review" — Common objections answered
- How to Review Effectively at Any Level
- Making Universal Review Work: Practical Implementation
- Wrapping up
- Further reading
Code review shouldn't be reserved for a handful of senior developers. Every team member — regardless of experience level — must participate in reviewing code. Junior developers bring fresh perspectives that catch issues seniors miss, while simultaneously accelerating their own learning. Universal review distributes knowledge, prevents bottlenecks, and transforms code quality from a gate into a shared team responsibility.
Initial thoughts
Picture this: A team of 10 developers where only 2–3 senior engineers handle all code reviews. Those seniors become overwhelmed gatekeepers, review queues grow longer, and junior developers submit code without ever learning to critically evaluate others' work. Sound familiar?
Mandatory code review consistently separates high-performing engineering teams from the rest. This approach mirrors the rigorous review culture that propelled Google to become one of the world's leading software providers in its early days.
Codacy.com 2024 article Code review process: how to improve developer productivity shows dominance of code review on code quality:
But code review is too often perceived as a quality gate run by seniors to catch mistakes. This is fundamentally wrong. In reality, the primary beneficiary of reviewing someone else's code is the reviewer themselves — and the entire team benefits from the shared knowledge and improved practices.
The core message: Every developer should review code. Not just approve it with a quick scan, but genuinely engage with it, ask questions, and provide feedback. Here's why.
1. Reviewing accelerates learning and skill development
Reading production code written by others exposes patterns, architectural decisions, edge-case handling, and new techniques at a rate no amount of solo coding can match.
A developer who only writes code sees one mental model. A developer who reviews 5–10 merge requests per week sees dozens of approaches, trade-offs, and real-world solutions every sprint. This bidirectional mentoring — juniors learning from seniors, and vice versa — grows skills across the team.
2. Junior developers provide unique value and grow fastest
The objection "I'm too junior to review" is consistently proven wrong in practice.
Engineers new to a codebase are uniquely positioned to detect:
- Ambiguous naming (they still have to think about what something means)
- Missing documentation or comments (context that seniors assume is obvious)
- Overly clever constructs that violate the principle of least astonishment
- Inconsistent style that seniors have become blind to
Fresh eyes often catch security vulnerabilities, performance issues, or logic errors overlooked due to familiarity. Meanwhile, reviewing senior code is one of the most powerful learning tools for juniors — they see production-quality patterns in context, not just in documentation.
3. Reviewing enhances your own code quality and habits
Developers who regularly review begin anticipating reviewer questions before submitting changes:
- Commit messages become descriptive
- Changes are split into logical, reviewable chunks
- Tests are written upfront
- Public APIs receive extra care
The "Hawthorne effect" kicks in: knowing your code will be reviewed encourages better initial quality. Over time, this feedback loop is one of the most reliable skill accelerators observed.
4. It fosters system-wide understanding and reduces silos
When every engineer reviews code across the codebase, knowledge silos disappear.
Team members gain:
- Insight into why certain retry policies or architectural choices exist
- Understanding of how authentication, authorization, and critical paths actually work
- Familiarity with the full system, reducing the "bus factor"
This shared context is essential for resilience, refactoring, fast incident response, better estimates, and true team flexibility. When knowledge is distributed, team members can take time off without the project grinding to a halt — no single developer becomes the critical path.
5. Universal review enforces standards, consistency, and security
Reviews ensure adherence to coding standards, patterns, and best practices, unifying the codebase and preventing style drift.
They catch:
- Security vulnerabilities (e.g., input validation failures or duplicated code risks)
- Readability and maintainability issues
- Opportunities for design improvements
This early-cycle quality control promotes secure development and a maintainable codebase.
6. More reviewers distribute workload, reducing bottlenecks and accelerating delivery
The higher the number of reviewers involved, the faster code reviews tend to complete. Distributing review requests across the team minimizes bottlenecks — someone available can pick up the review promptly.
This leads to quicker merges, faster time to market, and improved overall team velocity while preventing single-person dependencies.
7. It builds psychological safety, team cohesion, and positive culture
When everyone both gives and receives feedback regularly, code review stops feeling personal.
Teams that practice universal review report:
- Fewer surprises in production
- Faster decision making
- Higher engineering satisfaction and motivation
- Stronger bonds through constructive, positive feedback
8. Code reviews make for better estimates
For teams performing estimation, this is a team exercise, and the team makes better estimates as product knowledge is spread across the team.
As new features are added to the existing code, the original developer can provide good feedback and estimation. In addition, any code reviewer is also exposed to the complexity, known issues, and concerns of that area of the code base.
The code reviewer, then, shares in the knowledge of the original developer of that part of the code base. This practice creates multiple, informed inputs which, when used for a final estimate, always make that estimate stronger and more reliable.
9. Google's Review Culture: A Proven Model for Excellence
Google's early dominance as a software provider was deeply rooted in its mandatory pre-commit code review process. Every change required a "Looks Good To Me" (LGTM) approval from a qualified engineer before landing.
This culture:
- Caught bugs early, preventing production incidents
- Maintained exceptionally high code quality standards
- Avoided the "broken windows" effect
- Promoted openness, teamwork, and security awareness
- Enabled organic knowledge transfer and rapid onboarding
- Ensured consistency across a rapidly growing codebase
These factors produced scalable, reliable products (Search, Maps, Gmail) and laid the foundation for Google's engineering reputation that still endures today.
10. "But we don't have time for everyone to review" — Common objections answered
Let's address the elephant in the room:
Objection: "Junior reviews slow us down"
Reality: A 10–15 minute review prevents hours or days of incident response, debugging, and rework. When only 2–3 seniors on a 10-person team handle all reviews, those seniors experience overload and burnout, review queues grow, and defect leakage increases due to rushed or fatigued reviews.
Objection: "Juniors don't catch the important stuff"
Reality: Juniors catch different things — ambiguous naming, missing docs, inconsistent patterns. These "surface" issues are exactly what cause maintenance headaches down the road. Plus, they're learning while reviewing, making them better reviewers over time.
Objection: "We can't afford the time investment"
Reality: Investing just 5% of development time in review typically reduces bug-related work by 30–70% (Google, Microsoft, Atlassian benchmarks). Distributing the load prevents bottlenecks and saves far more time overall.
According to Codacy's 2024 study on code review productivity, teams practicing code review see:
- 10% reduction in time fixing bugs (from 35% to 25% of dev time)
- 10% improvement in time building new features (from 45% to 55%)
- 17% reduction in perceived lack of maintenance time (from 76% to 59%)
The math is simple: you can't afford NOT to have everyone reviewing.
How to Review Effectively at Any Level
For everyone:
- Start with what you understand confidently — naming, tests, documentation, security basics
- Ask questions rather than dictate solutions — "Why did you choose X?" beats "Change this to Y"
- Keep comments focused — one clear point beats a wall of text
- Target high-impact areas — correctness, design, complexity, standards
- Remember the goal — improve the codebase, help the author, and learn
Use Conventional Comments for clarity:
Conventional Comments prefix feedback with labels that clarify intent, making reviews more constructive and less ambiguous:
- praise: Highlight excellent work ("praise: Great error handling here!")
-
nitpick: Minor style suggestions ("nitpick: Consider renaming
tmptotempResult") - suggestion: Propose improvements ("suggestion: We could extract this into a helper function")
- issue: Flag problems that must be addressed ("issue: This will fail when input is null")
- question: Ask for clarification ("question: Why are we using a timeout here?")
- thought: Share considerations without requiring action ("thought: This might impact performance at scale")
This approach helps juniors understand which comments require action vs. are optional, reduces defensive reactions, and creates consistent review language across the team.
For junior reviewers specifically:
- Focus on readability: "I don't understand what this function does"
- Check test coverage: "Is there a test for the error case?"
- Verify documentation: "Could you add a comment explaining why we need this?"
- Question assumptions: "What happens if this API call fails?"
- Don't apologize for asking questions — they're valuable contributions
For seniors reviewing juniors' reviews:
- Praise good catches publicly
- Provide context when juniors miss architectural issues
- Model constructive feedback tone
- Never dismiss or override junior comments without explanation
Making Universal Review Work: Practical Implementation
1. Make it official policy
Explicitly state that everyone reviews code. Add it to onboarding documentation and team agreements.
2. Rotate reviewers
Avoid always pairing the same people.
3. Set clear expectations
- Reviews should happen within 4–24 hours (depending on your workflow)
- At least one approval required to merge, ideally from someone who didn't write the code
- Block merging without review (enforce via branch protection rules)
4. Create review rituals
- Daily "review hour" where the team focuses on pending reviews
- Celebrate good reviews in standups or retrospectives
- Track and visualize review participation
5. Provide training
- Run workshops on effective code review
- Share examples of good review comments
- Create a review guidelines document specific to your codebase
6. Lead by example
Seniors must model the behavior: review promptly, give constructive feedback, accept feedback graciously, and encourage junior participation.
Wrapping up
Universal code review is not a gate. It is one of the highest-ROI engineering practices available.
Every developer — regardless of tenure — must participate. The team's velocity, quality, security, and individual growth depend on it.
The question isn't "Can we afford to have everyone review?" It's "Can we afford not to?"
Illustrations generated locally by Draw Things using Flux.1 [Schnell] model
Further reading
🔀 Efficient Git Workflow for Web Apps: Advancing Progressively from Scratch to Thriving
Benoit COUETIL 💫 for Zenika ・ Oct 10 '24
🔀🦊 GitLab: Forget GitKraken, Here are the Only Git Commands You Need
Benoit COUETIL 💫 for Zenika ・ Aug 31 '24
🦊 GitLab: A Python Script Displaying Latest Pipelines in a Group's Projects
Benoit COUETIL 💫 for Zenika ・ Jun 29 '24
🦊 GitLab: A Python Script Calculating DORA Metrics
Benoit COUETIL 💫 for Zenika ・ Apr 5 '24
🦊 GitLab CI: The Majestic Single Server Runner
Benoit COUETIL 💫 for Zenika ・ Jan 27 '24
🦊 GitLab CI YAML Modifications: Tackling the Feedback Loop Problem
Benoit COUETIL 💫 for Zenika ・ Dec 18 '23
🦊 GitLab CI Optimization: 15+ Tips for Faster Pipelines
Benoit COUETIL 💫 for Zenika ・ Nov 6 '23
🦊 GitLab CI: 10+ Best Practices to Avoid Widespread Anti-Patterns
Benoit COUETIL 💫 for Zenika ・ Sep 25 '23
🦊 GitLab Pages per Branch: The No-Compromise Hack to Serve Preview Pages
Benoit COUETIL 💫 for Zenika ・ Aug 1 '23
🦊 GitLab Runners Topologies: Pros and Cons
Benoit COUETIL 💫 for Zenika ・ Feb 7 '23
This article was enhanced with the assistance of an AI language model to ensure clarity and accuracy in the content, as English is not my native language.




Top comments (0)