Effective Code Reviews | 30-60 Min Quality Checks
Run 30-60 minute code reviews that catch bugs and spread knowledge. GitScrum links PRs to tasks, tracks review time, and balances load across team members.
6 min read
Code reviews can be a bottleneck or a force multiplier. Effective reviews improve code quality, spread knowledge, and catch bugs early. Poor reviews create friction, delay work, and damage team morale. GitScrum integrates with GitHub/GitLab to make reviews visible and efficient.
Code Review Goals
| Goal | How to Achieve |
|---|---|
| Find bugs | Focus on logic, edge cases |
| Spread knowledge | Review across specialties |
| Improve design | Discuss architecture |
| Maintain standards | Consistent style, patterns |
| Mentor | Explain reasoning |
Review Process
Submission Best Practices
PR AUTHOR CHECKLIST
βββββββββββββββββββ
BEFORE SUBMITTING:
- [ ] Self-reviewed the diff
- [ ] Tests pass locally
- [ ] Linter passes
- [ ] No debug code left
- [ ] Description explains why
GOOD PR DESCRIPTION:
βββββββββββββββββββββββββββββββββββββ
## What
Brief description of the change.
## Why
Context and motivation.
## How
Technical approach taken.
## Testing
How this was verified.
## Screenshots (if UI)
Before/after if applicable.
## Related
Links to GitScrum task, docs, etc.
βββββββββββββββββββββββββββββββββββββ
PR Size Guidelines
PR SIZE RECOMMENDATIONS
βββββββββββββββββββββββ
IDEAL: 50-200 lines changed
ACCEPTABLE: 200-400 lines changed
TOO LARGE: 400+ lines changed
WHY SMALL PRs:
βββ Easier to review thoroughly
βββ Faster turnaround
βββ Less risk per change
βββ Simpler to revert
βββ Better knowledge transfer
SPLITTING STRATEGIES:
βββ Feature flags for partial work
βββ Extract refactoring separately
βββ Separate tests from implementation
βββ Infrastructure vs logic
βββ Backend vs frontend
Reviewer Process
REVIEW WORKFLOW
βββββββββββββββ
PHASE 1: UNDERSTAND (5 min)
βββ Read PR description
βββ Check linked task context
βββ Understand the goal
βββ Review test plan
PHASE 2: HIGH-LEVEL (10 min)
βββ Is the approach right?
βββ Any architectural concerns?
βββ Missing components?
βββ Correct scope?
PHASE 3: DETAILED (15-30 min)
βββ Logic correctness
βββ Edge cases handled
βββ Error handling
βββ Performance implications
βββ Security considerations
βββ Test coverage
PHASE 4: RESPOND (5 min)
βββ Organize feedback
βββ Prioritize comments
βββ Approve, request changes, or comment
βββ Be responsive to questions
Feedback Framework
Comment Types
COMMENT CLASSIFICATION
ββββββββββββββββββββββ
BLOCKING (must fix):
βββ Bugs and logic errors
βββ Security vulnerabilities
βββ Missing critical tests
βββ Breaking changes
βββ Violates core patterns
NON-BLOCKING (should consider):
βββ Performance suggestions
βββ Alternative approaches
βββ Minor improvements
βββ Style preferences (beyond linter)
βββ Nice-to-haves
PRAISE (important!):
βββ Clever solutions
βββ Good test coverage
βββ Clean refactoring
βββ Good documentation
βββ Learning moments
FORMAT:
βββββββββββββββββββββββββββββββββββββ
[blocking] This will fail if user is null
[nit] Consider renaming to `isValidUser`
[praise] Great handling of the edge case!
βββββββββββββββββββββββββββββββββββββ
Constructive Feedback
FEEDBACK EXAMPLES
βββββββββββββββββ
INSTEAD OF: TRY:
βββββββββββββββββββββββββββββββββββββββββββββββββββ
"This is wrong" "This might cause X
because Y. Consider Z."
"Why didn't you...?" "Would it help to...?"
"This is confusing" "I'm having trouble
following this. Could
you add a comment or
rename to clarify?"
"This is slow" "This will run N times.
Consider memoizing."
"Don't do it this way" "The team pattern for
this is X. Here's an
example: [link]"
βββββββββββββββββββββββββββββββββββββββββββββββββββ
What to Focus On
REVIEW PRIORITY
βββββββββββββββ
HIGH PRIORITY:
βββ Correctness (does it work?)
βββ Security (is it safe?)
βββ Tests (is it verified?)
βββ Edge cases (is it complete?)
βββ Breaking changes (is it compatible?)
MEDIUM PRIORITY:
βββ Performance (is it efficient?)
βββ Readability (is it clear?)
βββ Error handling (is it robust?)
βββ Documentation (is it explained?)
βββ Architecture (does it fit?)
LOW PRIORITY (often linter's job):
βββ Formatting
βββ Naming conventions
βββ Import order
βββ Line length
βββ Trivial style choices
Review Culture
Team Norms
CODE REVIEW NORMS
βββββββββββββββββ
TIMING:
βββ Reviews happen within 4 hours
βββ Interrupt work for reviews
βββ Reviews before new work
βββ No PRs over the weekend
PARTICIPATION:
βββ Everyone reviews (not just seniors)
βββ Rotate reviewers
βββ Cross-team reviews for context
βββ At least 2 reviewers for critical paths
ATTITUDE:
βββ Assume good intent
βββ Be humble (you might be wrong)
βββ Separate ego from code
βββ Thank reviewers
βββ Learn from feedback
Reducing Friction
REDUCING REVIEW FRICTION
ββββββββββββββββββββββββ
AUTHOR CAN:
βββ Keep PRs small
βββ Write good descriptions
βββ Self-review first
βββ Respond quickly to feedback
βββ Don't take it personally
REVIEWER CAN:
βββ Review promptly
βββ Be specific and actionable
βββ Distinguish blocking vs nit
βββ Offer solutions, not just problems
βββ Approve when "good enough"
TEAM CAN:
βββ Automate style checks
βββ Document patterns
βββ Review guidelines
βββ Celebrate good reviews
βββ Track review metrics
GitScrum Integration
Visibility
REVIEW VISIBILITY IN GITSCRUM
βββββββββββββββββββββββββββββ
TASK CARD SHOWS:
βββ Linked PR(s)
βββ Review status
βββ CI status
βββ Reviewers assigned
βββ Time in review
BOARD COLUMN:
βββ "In Review" column
βββ Cards auto-move when PR opens
βββ Auto-move on merge
βββ Visible review queue
DASHBOARD:
βββ Open PRs needing review
βββ Average review time
βββ Review load per person
βββ Stale PRs flagged
Best Practices
For Effective Reviews
Anti-Patterns
CODE REVIEW ANTI-PATTERNS:
β "LGTM" with no actual review
β Multi-day review latency
β Focusing on style over substance
β Demanding rewrites for preferences
β Only senior devs reviewing
β No positive feedback ever
β Blocking for trivial reasons