Field notes

Your technical debate is probably just an ego contest

I’ve wasted years of my career winning technical arguments that didn’t matter. That heated discussion about tabs versus spaces? The passionate argument about whether to use Array.map().filter() or Array.reduce()? The philosophical war over microservices versus monoliths for your 10-user internal tool? They’re ego contests disguised as engineering discussions.

After 15 years of watching (and participating in) these debates, I’ve learned that the real skill isn’t winning arguments — it’s knowing which arguments are worth having. Before you engage in any technical debate, ask yourself: “What value does winning this argument create?”

Arguments worth having:

  • Architecture that affects real users - Will this decision impact the next 1000 users or the theoretical millions you’ll never have?
  • Security that protects actual data - User passwords, payment info, personal data.
  • UX changes users will notice - The checkout flow, the onboarding, the core interaction loop.
  • Performance where it hurts - The 3-second API call blocking checkout. Not the 50ms you’ll save by switching frameworks.

Arguments to walk away from:

  • Formatting preferences - You have a linter. Use it. Move on with your life.
  • Technology tourism - “We should use Rust!” When your Node.js app serves 100 requests per day perfectly fine.
  • Premature optimization or scaling theater - “What if we need to scale to Netflix levels?” You have 12 users, calm down.
  • Ego-driven last stands - You’re not defending good engineering. You’re defending your feelings.

Stick to a limited timebox

Nothing productive happens in technical debates after 20 minutes. If you haven’t convinced each other by then, you’re not debating — you’re performing.

Just think of it. Twenty minutes gives you enough time to:

  • Make your case
  • Actually listen to theirs
  • Figure out if you’re arguing about the same thing
  • Recognize if this debate even matters

After that, if you haven’t reached consensus, you have few options:

Option 1: Call in a referee Grab someone who hasn’t been marinating in this argument. Another engineer, tech lead, whoever has context but not emotional investment. They’ll see what you can’t anymore because you’re too deep in the trenches.

Option 2: DShip it and measure Document your concerns, implement their approach, set a date to revisit with real data. Put there:

  • What we argued about
  • What we chose and why
  • What I think might break
  • Date to check back

Real production data beats theoretical arguments every time.

Option 3: Let them have this one

Sometimes you just ship their weird abstraction. If it’s not actively on fire, it can wait. You’ll refactor it eventually, or it’ll become someone else’s problem when you change jobs. When things break exactly how you predicted (assuming that rare case when you were right), you have to swallow that “I told you so.” It feels amazing for three seconds. Then you’ve burned a bridge with someone you need to work with tomorrow. Instead:

  • Jump straight to fixing it
  • Frame it as “we learned that X causes Y”
  • Add it to your ammunition for next time

You’re not here to win. You’re here to ship better software tomorrow than you did today.

Check your emotional state

Your mood hijacks your judgment more than you realize. That “terrible architecture” might just be your blood sugar talking. That “obvious anti-pattern” might be obvious because you’re still pissed about the failed deployment this morning.

Before you die on this hill, ask yourself:

  • Would I care about this if anyone else proposed it?
  • Am I arguing the code or arguing the person?
  • Did something else already piss me off today?

If you answer “yes” to any of these, close the PR. Step away from Slack. Get a snack. Take a walk. The code will still be there tomorrow, and you’ll either see it wasn’t that bad, or you’ll make a better argument without the emotional baggage.

Actually listen (yes, this means shutting up)

In most technical discussions, nobody’s actually listening. We’re all just reloading our arguments, waiting for our turn to explain why microservices will definitely solve this problem.

Try this in your next discussion:

  • Let them finish - Even when they’re suggesting MongoDB for financial transactions. Bite your tongue.
  • Repeat it back - “So you think NoSQL because we need flexibility?” Watch them correct you. You probably missed their actual point.
  • Find one good thing - Every terrible idea has a kernel of truth. Maybe MongoDB is wrong, but they’re right that the schema needs work.
  • Now you can talk - But you might not need to, because you finally understood the real problem.

This feels painfully slow. But it’s the difference between a 2-hour circular argument and a 20-minute conversation that actually ships something.

Bring in your past experience

Your experience is valuable, but nobody wants to hear “Well, at my last company…” for the fifth time today. Instead:

  • Be specific about context: “In a similar situation with comparable scale…”
  • Focus on outcomes: “That approach led to X specific problem”
  • Acknowledge differences: “The context was different because Y, but the risk is similar”

Bring in the data

It’s hard to argue with numbers. When making your case, prioritize:

  • Hard data from your system - Metrics, error rates, performance numbers
  • Industry case studies - With similar context and scale
  • Your direct experience - With context clearly explained
  • Theoretical arguments - Only if nothing else applies

The bottom line

Being right doesn’t matter if you can’t bring people along. You could have the objectively correct technical solution, but if you can’t communicate it effectively, navigate the human dynamics, or pick your battles — your brilliant solution dies. The best engineers aren’t just technically excellent. They understand that software development is a team sport played by humans with egos, emotions, and different perspectives. Your job isn’t to win arguments. It’s to ship software with a team of humans. Every minute spent on ego-driven debates is a minute not spent creating value. Every relationship damaged by unnecessary conflict is a collaboration opportunity lost. Be kind. Listen actively. Choose your battles. Set a timer for 20 minutes. And remember: the code you’re passionately defending today will be legacy garbage someone refactors in two years anyway.