# Code Review Best Practices Comprehensive guidelines for conducting effective code reviews. ## Review Philosophy ### Goals of Code Review **Primary Goals:** - Catch bugs and edge cases before production - Ensure code maintainability and readability - Share knowledge across the team - Enforce coding standards consistently - Improve design and architecture decisions **Secondary Goals:** - Mentor junior developers - Build team culture and trust - Document design decisions through discussions ### What Code Review is NOT - A gatekeeping mechanism to block progress - An opportunity to show off knowledge - A place to nitpick formatting (use linters) - A way to rewrite code to personal preference ## Review Timing ### When to Review | Trigger | Action | |---------|--------| | PR opened | Review within 24 hours, ideally same day | | Changes requested | Re-review within 4 hours | | Blocking issue found | Communicate immediately | ### Time Allocation - **Small PR (<100 lines)**: 10-15 minutes - **Medium PR (100-400 lines)**: 20-40 minutes - **Large PR (>400 lines)**: Request to split, or 60+ minutes ## Review Depth Levels ### Level 1: Skim Review (5 minutes) - Check PR description and linked issues - Verify CI/CD status - Look at file changes overview - Identify if deeper review needed ### Level 2: Standard Review (20-30 minutes) - Full code walkthrough - Logic verification - Test coverage check - Security scan ### Level 3: Deep Review (60+ minutes) - Architecture evaluation - Performance analysis - Security audit - Edge case exploration ## Communication Guidelines ### Tone and Language **Use collaborative language:** - "What do you think about..." instead of "You should..." - "Could we consider..." instead of "This is wrong" - "I'm curious about..." instead of "Why didn't you..." **Be specific and actionable:** - Include code examples when suggesting changes - Link to documentation or past discussions - Explain the "why" behind suggestions ### Handling Disagreements 1. **Seek to understand**: Ask clarifying questions 2. **Acknowledge valid points**: Show you've considered their perspective 3. **Provide data**: Use benchmarks, docs, or examples 4. **Escalate if needed**: Involve senior dev or architect 5. **Know when to let go**: Not every hill is worth dying on ## Review Prioritization ### Must Fix (Blocking) - Security vulnerabilities - Data corruption risks - Breaking changes without migration - Critical performance issues - Missing error handling for user-facing features ### Should Fix (Important) - Test coverage gaps - Moderate performance concerns - Code duplication - Unclear naming or structure - Missing documentation for complex logic ### Nice to Have (Non-blocking) - Style preferences beyond linting - Minor optimizations - Additional test cases - Documentation improvements ## Anti-Patterns to Avoid ### Reviewer Anti-Patterns - **Rubber stamping**: Approving without actually reviewing - **Bike shedding**: Debating trivial details extensively - **Scope creep**: "While you're at it, can you also..." - **Ghosting**: Requesting changes then disappearing - **Perfectionism**: Blocking for minor style preferences ### Author Anti-Patterns - **Mega PRs**: Submitting 1000+ line changes - **No context**: Missing PR description or linked issues - **Defensive responses**: Arguing every suggestion - **Silent updates**: Making changes without responding to comments ## Metrics and Improvement ### Track These Metrics - Time to first review - Review cycle time - Number of review rounds - Defect escape rate - Review coverage percentage ### Continuous Improvement - Hold retrospectives on review process - Share learnings from escaped bugs - Update checklists based on common issues - Celebrate good reviews and catches