How to disagree with a senior engineer.

•

•

Bringing Evidence to an Argument You Might Lose

I spent most of my twenties thinking that knowing how to disagree with a senior engineer meant mastering some complex, corporate-approved “communication framework” or learning how to wrap my critiques in enough polite, professional layers to make them palatable. I used to sit in design reviews, watching a veteran architect propose a solution that I knew would cause a massive bottleneck under load, and I’d stay silent because I didn’t want to seem disrespectful. That was a mistake. Most of the time, when you’re staring at a flawed architectural decision, it isn’t about ego or hierarchy; it’s about the fact that the system is eventually going to break, and you’re the one who will be getting the page at 2 AM to fix it.

I’m not going to give you a lecture on “soft skills” or how to manage up. Instead, I want to talk about how to move the conversation away from who is right and toward what the system actually needs. I’ll share what I’ve learned from years of being wrong in production and how to use concrete data to challenge seniority without turning a code review into a battlefield. This isn’t about winning an argument; it’s about making sure we don’t build something that we’ll regret six months from now.

Table of Contents

Moving Past Ego Toward Data Driven Decision Making

Moving Past Ego Toward Data Driven Decision Making

The problem with most technical disagreements isn’t the logic; it’s that we treat our architectural preferences like our personality. When a senior dev pushes a pattern you know is a bottleneck, your brain treats it as a personal attack. I learned this the hard way at that logistics startup—I spent three days arguing about microservices when I should have been looking at the latency numbers. To get anywhere, you have to shift the focus from “who is right” to “what the telemetry says.” This is where data-driven decision making becomes your best friend. It’s much harder for someone to dismiss a graph showing a memory leak than it is for them to dismiss your “gut feeling.”

If you want to practice effective managing upward in software engineering, you have to stop treating the debate like a courtroom drama. Instead of saying, “I think this approach is wrong,” try saying, “I’m worried about how this will scale when we hit 10k concurrent users; can we look at the load test results together?” You aren’t challenging their authority; you’re inviting them to help you solve a puzzle. It changes the entire dynamic from a confrontation to a shared investigation. It’s less about winning the argument and more about protecting the system from a mistake that will eventually wake us both up at 3 AM.

Using Technical Debate Etiquette to Avoid Production Disasters

Using Technical Debate Etiquette to Avoid Production Disasters

When things get heated in a design review, it’s easy to let the conversation turn into a contest of who has more years on their CV. I’ve seen it happen: a senior dev suggests a pattern they’ve used for a decade, and the room goes quiet because nobody wants to be the one to say it won’t scale for our current throughput. That’s where proper technical debate etiquette comes in. It isn’t about being polite for the sake of it; it’s about keeping the focus on the architecture rather than the person. If you’re going to push back, don’t make it a character judgment. Instead of saying “Your approach is outdated,” try “I’m worried about how this specific implementation handles our retry logic during a network partition.”

This shift in language is a huge part of maintaining psychological safety in engineering teams. If people are afraid to point out a flaw because they don’t want to bruise a senior’s ego, the flaw will eventually find its way into the production logs at 3 AM. My rule of thumb is to treat every disagreement as a shared investigation. You aren’t fighting the senior engineer; you are both fighting the potential for a system outage. When you frame your dissent as a way to protect the service, you stop being a contrarian and start being a teammate.

Five ways to disagree without getting yourself sidelined

  • Stop making it about “right” vs “wrong” and start making it about the trade-offs. If you tell a senior dev their architecture is bad, you’ve already lost. If you say, “I’m worried this approach increases our latency by 50ms during peak load, even if it’s easier to write,” you’re just talking about the system.
  • Bring the logs, not your feelings. I’ve learned the hard way that an opinion is just noise until it’s backed by a metric. If you think a certain pattern is causing a bottleneck, don’t guess—show them the Grafana dashboard or the trace that proves it. It’s much harder to argue with a spike in 5xx errors than it is to argue with a junior’s intuition.
  • Ask “How would we handle X?” instead of saying “X will break.” This is a subtle shift, but it works. Instead of accusing them of missing a race condition, ask how the proposed implementation handles concurrent writes to the same shard. You aren’t attacking their intelligence; you’re inviting them to solve a problem with you.
  • Know when to pick your battles. I have a few half-finished side projects sitting on my hard drive because I spent too much time arguing about linting rules instead of shipping. If the disagreement is about something that won’t cause a 2 AM page or a data integrity issue, sometimes you just have to document your concern, let it go, and move on.
  • Propose a way to fail small. If the debate is at a stalemate, suggest a spike or a small POC (Proof of Concept). “Let’s try your way in a staging environment with a load test first” is a much more productive path than a three-hour meeting where everyone just gets frustrated. It turns a theoretical argument into an empirical test.

The TL;DR for when you're too tired to read the whole post

Stop making it about who is right and start making it about what the telemetry says; if you can’t prove your point with a trace or a log, you’re just participating in a loud opinion contest.

Frame your disagreement as a risk assessment rather than a critique of their design; seniors are much more willing to listen to “this might cause a deadlock under high load” than “your approach is outdated.”

Document the decision and the specific trade-offs you both agreed on, because six months from now, when the system behaves exactly as predicted, you’ll want a paper trail that isn’t just “we argued about it.”

The Goal Isn't to Win

The Goal Isn't to Win, focus data.

At the end of the day, none of this is about being the smartest person in the room or proving a senior dev wrong just for the sake of it. It’s about the system. If you can move the conversation away from “I think” and toward “the telemetry shows,” you’ve already won half the battle. Whether you are using data to de-escalate an ego-driven argument or simply applying a bit of etiquette to keep a code review from turning into a fight, the objective remains the same: preventing the 2 AM outage. Keep your focus on the trade-offs and the technical reality, and you’ll find that most seniors are actually quite willing to listen if you aren’t just shouting opinions into the void.

I’ve spent enough years in the trenches to know that the best engineers aren’t the ones who are always right; they are the ones who are the most willing to be proven wrong. If you approach these disagreements with a sense of curiosity rather than a desire for dominance, you’ll build something much more valuable than a perfect architecture—you’ll build professional trust. Don’t worry about winning the debate. Just focus on leaving the codebase in a better state than you found it, and write it down so the next person doesn’t have to learn the hard way.

Frequently Asked Questions

What do I do if the senior engineer is objectively right about the architecture but wrong about the specific implementation details?

This is actually the best-case scenario, even if it feels frustrating. If they’ve got the architecture right, they’ve solved the high-level problem—don’t fight the foundation. Instead, pivot the conversation to the implementation. Use a “Yes, and…” approach: “I agree the event-driven model is the right way to handle this scale, but I’m worried this specific library will choke on our retry logic.” Treat it like a code review, not a power struggle.

How do I handle a situation where I have the data, but the senior engineer is relying on "intuition" or "years of experience" to shut down the conversation?

I’ve been there. It’s frustrating when “I’ve seen this before” is used to bypass a metric. My approach is to stop fighting the person and start fighting the risk. I don’t tell them they’re wrong; I ask how we’ll validate their intuition if the telemetry shows something else. Frame it as a safety net: “If your intuition is right, great. But if the dashboard shows X, what’s our rollback plan?” It shifts the focus from ego to incident prevention.

At what point does pushing back on a technical decision stop being "rigorous" and start becoming a liability to the team's velocity?

It stops being rigor the moment you stop proposing an alternative. If you’re just pointing out why a design is suboptimal without offering a path forward that respects our current sprint capacity, you’re just noise. Rigor is about finding the right solution; liability is about stalling the engine because you want the “perfect” architecture. If your pushback doesn’t include a trade-off analysis or a way to mitigate the risk you’ve identified, you’re just slowing us down.

If I challenge a decision and it eventually breaks in production, how do I navigate the fallout without looking like I'm saying "I told you so"?

If it breaks, don’t celebrate. I’ve been there, staring at a Grafana dashboard knowing exactly why the latency spiked, while feeling that petty urge to say, “I told you so.” Resist it. Instead, focus entirely on the post-mortem. If you shift the conversation from “who was right” to “how do we patch this and add a regression test,” you’re not a nuisance—you’re a senior engineer in training. Focus on the fix, not the ego.

Tomasz Wierzbicki

About Tomasz Wierzbicki

I am not interested in arguing about frameworks. I am interested in why the thing broke at two in the morning and what would have prevented it. Most of what I know came from being wrong in production and writing it down afterwards.