Tutorial 3: Give Feedback That Lands
- Contributor
- 4 days ago
- 3 min read
Reviews are communication, not corrections. Tone determines whether feedback gets applied or resented.
Step 1: Comment on the Code, Not the Author (10 min)
✓ "This function does too many things; consider splitting."
✗ "You're making this too complicated."
✓ "I'd expect this to handle null inputs."
✗ "You forgot to handle null."
The author chose. The choice can be discussed. The author's competence isn't on trial.
Step 2: Ask, Don't Tell (10 min)
✓ "Why use a map here instead of a list?"
✗ "Use a list here."
Questions invite explanation. Sometimes the author has a reason you missed. Sometimes asking the question is enough to make them reconsider.
Especially powerful when you're not 100% sure your suggestion is better.
Step 3: Be Specific (5 min)
✓ "This recursive call can stack-overflow at ~10K items; consider iterative."
✗ "This won't scale."
✓ "If `user.is_admin` is false, the next line throws."
✗ "There's a bug here."
Specific = actionable. Vague = handwaving.
Step 4: Suggest a Fix (When You Can) (10 min)
✓ "Consider:
```python
return next((u for u in users if u.active), None)
" ✗ "This loop is ugly."
GitHub suggestions (`suggestion` blocks) let the author apply your code with one click.
Suggestions move the conversation forward. Critiques only stall it.
## Step 5: Soften with Caveats (5 min)
"Maybe consider..." "I might be wrong, but..." "What do you think about..." "Just a thought..."
Some style guides hate these as "weasel words." For reviews: they reduce defensiveness. The technical point lands; the ego doesn't bristle.
Use sparingly. Too soft = ignored.
## Step 6: Praise Specifically (5 min)
✓ "Nice — the early return makes the happy path obvious." ✗ "Looks good."
Specific praise teaches. Vague praise feels patronizing.
For new team members: extra praise on good patterns. They learn what's valued.
## Step 7: Don't Pile On (10 min)
If another reviewer already raised an issue, don't repeat it.
"Agree with @alice — this needs handling for empty input."
Or just thumbs-up Alice's comment.
Multiple voices saying the same thing feels like an avalanche.
## Step 8: Acknowledge Trade-offs (10 min)
✓ "This pulls in a heavy dep. If we can't avoid it, fine; otherwise consider inlining." ✗ "Don't use this dep."
Real engineering involves trade-offs. Acknowledge.
If you're missing context (e.g., why they chose this approach), ask before declaring.
## Step 9: Pick Your Battles (5 min)
A PR with 20 small issues:
- Comment on the 3-5 most important
- Let the rest go
Or:
- Approve with suggestions
- Trust the author for follow-up
Drowning the author in nits creates resistance to **any** feedback.
## Step 10: Read Your Comments Before Sending (5 min)
Before submitting your review, re-read your comments:
- Tone OK? Not condescending?
- Wording clear?
- Did you say something you'd regret in writing?
Take 30 seconds. Edit.
For tough feedback: walk away; read again later.
## What You Just Did
Feedback that lands: code not author, ask don't tell, specific, suggest fixes, soften, specific praise, no pile-on, trade-offs, pick battles, re-read. Reviews that build relationships.
## Common Failure Modes
**Comment on the person.** Defensiveness; team friction.
**Vague feedback.** Author doesn't know what to fix.
**Pile-on with other reviewers.** Author feels attacked.
**No suggestions; only critiques.** Slows iteration.
**Hot review under stress.** Regret later.

