The art of technical debate: how I’d argue about code without wrecking the team

Owen MacAllister

Owen MacAllister

September 21, 2026

The art of technical debate: how I’d argue about code without wrecking the team

I used to think the goal of a technical debate was to be right. I prepared citations, drew bigger diagrams, and left meetings with a hollow win: my idea on the whiteboard, and a quieter team that would not bring me the next risk early.

That is not art. That is dominance with a laptop sticker.

The art of technical debate is arguing hard about the system without turning colleagues into opponents. It is how you keep standards without creating a culture where people sandbag disagreement until production does it for them. Here is the debate style I use now — the one that actually ships.

Start with the decision, not the identity

Most wrecked debates begin with identity: “I’m a distributed systems person,” “I’m a product engineer,” “I’m the one who has been here longest.” Identity makes every disagreement feel like exile.

I open with the decision frame instead:

  • What are we deciding?
  • By when must we decide?
  • What is expensive to reverse?
  • What does success look like in ninety days?

If we cannot answer those, we are not ready to argue about Kafka versus a queue table. We are ready to argue about calendars.

Reversible choices get lighter debate. Irreversible choices get sharper debate and a written recommendation. Mixing those categories is how teams spend three hours on folder structure and ten minutes on tenancy.

Bring options, constraints, and a recommendation

My prep for a serious debate is boring on purpose:

  1. Options — at least two real ones, including “do nothing yet.”
  2. Constraints — latency, compliance, team skill, deadline, operational load.
  3. Recommendation — the option I would take if I owned the pager.
  4. What would change my mind — the evidence that would flip me.

That last line disarms ego. It tells the room I am negotiating with reality, not defending a brand. It also invites better counter-evidence than “I just don’t like it.”

Engineers debating calmly over notebooks in a meeting room

Argue about failure modes, not fashion

Fashion arguments sound like: “everyone is moving to X,” “Y is legacy,” “Z is modern.” Failure-mode arguments sound like: “if this queue backs up, who notices,” “if the schema changes, which clients break,” “if two teams own this, who is woken at 2 a.m.”

I try to force the conversation onto:

  • Operational ownership
  • Blast radius
  • Skill fit for the people who will maintain it
  • Migration cost if we are wrong

Fashion can be a weak signal. Failure modes are the product the customer experiences when we are wrong.

Separate taste from risk

Some disagreements are taste: naming, folder layout, whether a function is “clean.” Taste deserves short time boxes. Pick a convention, write it down, move on.

Risk deserves longer time: data loss, security boundaries, multi-tenant leakage, irreversible customer-visible behavior. If someone frames a taste issue as existential risk, I name the category shift out loud. If someone frames a real risk as “just style,” I escalate the category the other way.

Mislabeling is how quiet people get steamrolled and loud people waste the room.

Use steelmanning without performing it

I used to “steelman” as theater — restate the other side in a way that still made my side look smarter. That fools no one.

Useful steelmanning is shorter: “You’re optimizing for X because of Y — did I get that right?” Then wait. If I got it wrong, I was about to argue with a ghost.

Only after alignment on their actual claim do I contrast trade-offs. Contrast is not contempt.

Whiteboard with competing options sketched for a technical decision

Decide how we will decide

Endless debate is often a governance gap. Before the third lap, I ask: who is the deciding owner, and what input rights does everyone else have?

Models that work:

  • Owner decides after consult — default for most engineering choices
  • Pair owners — when two systems share a dangerous seam
  • Time-boxed experiment — when evidence is cheap and rhetoric is expensive

Consensus is a nice emergent property. It is a terrible required gate for every decision. Teams that require consensus for reversible choices train people to withhold dissent or to filibuster.

Write the outcome while the room still remembers

The debate is not done when people stop talking. It is done when a short record exists: decision, owners, open risks, revisit date. I send it the same day.

Without that, you get the worst outcome — people leave assuming different winners. That is how “we agreed” becomes a later fight with higher stakes.

What I do when I lose

Losing well is part of the art. If the owner picks another path, I help make it safe: tests, flags, rollback, monitoring. Sabotage-by-neglect is how technical debates become political wars.

If I believe the choice is dangerous, I escalate with evidence, not with sulking. Escalation is a tool. Sulking is a culture tax.

If I keep losing the same class of debate, I check whether I am arguing taste as risk, or whether the team’s values truly differ. Sometimes the adult move is to change teams rather than to win by attrition.

What I do when I win

Winning badly is also common. Victory speeches, public dunking, and “I told you so” metrics poison the next debate. Credit the constraints that shaped the choice. Invite the dissenters into the implementation review. Make it safe to be wrong next time — including you.

Practice in low-stakes rooms

You cannot only learn this during architecture councils. Practice in PR comments: ask a question before a verdict, propose an alternative with a cost, accept “good enough” when the risk is low. The muscle you build on small diffs shows up when the room is tense.

A compact script I keep

When I feel myself getting sharp, I run this internally:

  1. Are we debating a decision or a person?
  2. Is this reversible?
  3. What failure mode am I actually afraid of?
  4. What would change my mind?
  5. Who decides, and what is the written outcome?

If I cannot answer those, I ask for a pause. Ten minutes of clarity beats an hour of heat.

Technical debate should make the system safer and the team braver. If your debates only produce winners and quieter rooms, you are optimizing for being right in the moment — and wrong about how software actually gets built with other humans. Argue hard. Leave dignity intact. Write the decision. Then go ship the thing you can still change.

More articles for you