top of page

Handle Disagreement in Reviews — Code Reviews That Help, Part 8

Shawn West
Jul 8
3 min read

Updated: 2 days ago

Code Reviews That Help · Part 8

Most review standoffs aren't about the code — they're two people defending preferences dressed up as principles, in a comment thread that's now forty replies long. Knowing how to disagree well in a review keeps the team moving without anyone having to "win." This walks through handling it: separating taste from correctness, time-boxing the debate, and disagreeing-and-committing when it's genuinely a coin flip.


Disagreement is normal. How you handle it shapes team trust over years.


Step 1: Distinguish Preferences from Principles (10 min)


  • Preference: "I'd organize this differently."

  • Principle: "This will lose data."


Preferences are negotiable. Principles aren't.


Misclassifying preferences as principles = endless arguments over taste.


Step 2: Be Specific About Why (10 min)


✗ "This is wrong."
✓ "This loses idempotency — concurrent retries will double-charge."

Vague disagreement = ego-trigger. Specific = engageable.


State the concrete impact, not the feeling.


Step 3: Ask Before Asserting (5 min)


"What's the reasoning for the recursion here? I'd be tempted to make it iterative for the stack-safety reasons."

Author may have:


  • A reason you don't see

  • An option you didn't know

  • A trade-off they considered


Ask first. Push if the answer doesn't satisfy.


Step 4: Limit Threads (10 min)


After 3-4 back-and-forth comments:


  • Hop on a call

  • Pair on it

  • Find a third opinion


Long async threads spiral. The medium amplifies friction.


Step 5: Bring Data (10 min)


"I benchmarked: the iterative version is 8x faster on 10K items."

"I read the linked issue — there's a documented race here."

"The style guide says X."

Data > opinion. If you can't bring data, your position is weaker than you think.


Step 6: Time-Box (10 min)


After ~30 minutes of debate:


  • Pick a path; move forward

  • Or: kick to a design doc

  • Or: explicit "let's defer; revisit in 2 weeks if X happens"


A perfect decision delayed is worse than a good decision shipped.


Step 7: Disagree and Commit (5 min)


When you've lost an argument:


  • "I still think X, but understand the trade-off. Let's go with your approach."

  • Move on. Don't bring it up in the next 5 PRs.


Lingering resentment ruins teams.


Step 8: Escalate Cleanly (10 min)


If two people genuinely can't agree:


  • Tag a third party (tech lead, domain expert)

  • Document positions briefly

  • Accept their call


Don't escalate every minor disagreement. Reserve for genuinely important stuff.


Step 9: Watch Power Dynamics (10 min)


Senior reviewer + junior author: power imbalance.


Senior:


  • Don't pile on

  • Soften suggestions ("consider..." vs. "do this")

  • Praise judgment, not just output

  • Explain trade-offs, not just decisions


Junior:


  • Don't take feedback personally

  • Ask questions when unclear

  • Push back when you have a reason


Healthy reviews lift juniors. Bad ones break them.


Step 10: Reflect (5 min)


After contentious reviews:


  • Was I right?

  • Was my tone OK?

  • What could I do differently?


Self-reflection > self-justification.


If your reviews routinely have conflict: something's off. Tone? Picking battles?


What You Just Did


Disagreement handling: preferences vs. principles, specificity, ask first, limit threads, data, time-box, disagree and commit, escalate cleanly, power dynamics, reflect. Conflict without team damage.


Disagreement that outgrows the review thread is covered in Handle Disagreement as a Lead.


Common Failure Modes


Endless thread. Author exhausted; reviewer entrenched.


Personal attacks dressed as technical. Erodes trust.


Senior overrules junior without explanation. Junior learns silence.


Carry grudges into next review. Pattern of friction.


Avoid all conflict. Bugs ship.



Continue the Code Reviews That Help path



Part of the Code Reviews That Help learning path.

bottom of page