Disagreeing With a Technical Decision Without Burning Bridges

by Eric Hanson, Backend Developer at Clean Systems Consulting

The Disagreement That Became a War

Your team decided to use MongoDB for the new service. You think PostgreSQL is the right choice. You say so in the design review. The decision holds. You bring it up again in the next sprint planning. The decision holds. You mention it in a PR review. Someone says "we already decided this." You feel unheard. The relationship with the decision-maker becomes strained. The MongoDB service ships. It works fine for a year, then has data integrity issues that a relational model would have prevented.

In this scenario, you may have been right about the technical decision. You almost certainly handled the disagreement poorly. Both things can be true.

Disagreement Is Not an Outcome, It's a Process

The goal of expressing a technical disagreement is not to win. It is to ensure that the decision-making process is informed by the best available information. If the decision is made and you have provided your reasoning completely, you have done your job — regardless of the outcome.

This reframe changes the approach. The question is not "how do I get the decision changed?" but "how do I ensure my concern is understood and seriously considered?"

The Structure of a Useful Technical Objection

An objection that can be seriously considered has specific properties:

It is about the decision, not the decision-maker: "I have concerns about this approach" is separable from the people involved. "I don't think this is a good decision" targets the work. "I think this is the wrong call" can sound like a judgment of the person who made it.

It states the concern specifically: "I'm worried about this" is a feeling. "I'm concerned that MongoDB's lack of multi-document transactions means we can't guarantee consistency between the order and the inventory records in the same write, which will lead to data inconsistency under concurrent load" is a concern that can be addressed, refuted, or mitigated.

It proposes an alternative or asks a question: "Have we thought about how we'll handle cross-document consistency?" is more productive than "I think this is wrong." It invites the decision-maker into a problem-solving conversation rather than a position defense.

It acknowledges uncertainty: If you're not certain you're right — and you often shouldn't be — acknowledging it is more credible and less adversarial. "I might be missing something, but I can't see how we'd handle..." is a different posture than "this definitely won't work."

The Escalation Hierarchy

There is an appropriate sequence for technical disagreement:

  1. State the concern once, with reasoning: In the design review, the PR, the discussion thread. Complete, specific, with your reasoning. If you're heard and the decision holds, move to step 2.

  2. Request a second opinion: Ask whether a third party — another engineer, the technical lead — would be willing to weigh in. This is not going over someone's head. It's requesting additional input on a genuinely uncertain technical question.

  3. Accept and document: If the decision stands after full consideration, accept it. Document your concern — in an ADR comment, in the PR thread — so there's a record of the concern and the reasoning that overrode it. If the concern materializes as a production problem, the documentation is useful for the post-mortem. If it doesn't, you have evidence that your concern was considered and discarded for valid reasons.

  4. Disagree and commit: Amazon's "disagree and commit" principle. You made your case. The decision was made. You commit to making the chosen approach work as well as possible.

What you don't do: relitigate the decision in subsequent meetings, express passive skepticism in PRs about the chosen approach, say "I told you so" when problems arise.

When the Disagreement Is About Values, Not Facts

Some technical disagreements are not about facts but about values — priorities that different engineers weight differently. "We should prioritize performance" vs. "We should prioritize simplicity." These are not resolvable through technical argument because they're not technical arguments.

When a disagreement is about values, name it. "I think we're weighting performance over simplicity differently here — I'm prioritizing simplicity because the team is small and the performance requirements aren't established. Can we talk about what the actual requirements are?" This reframes the disagreement as a requirements question, which is answerable.

The Practical Takeaway

Before your next technical disagreement, write out your concern as one specific sentence that describes a concrete risk or problem with the proposed approach. Present that sentence. If the response addresses your concern with information you didn't have, update your position. If it doesn't, ask one more question. After two exchanges, if the decision stands, accept it and document your concern. Move on. The relationship you preserve is worth more than the argument you win.

Scale Your Backend - Need an Experienced Backend Developer?

We provide backend engineers who join your team as contractors to help build, improve, and scale your backend systems.

We focus on clean backend design, clear documentation, and systems that remain reliable as products grow. Our goal is to strengthen your team and deliver backend systems that are easy to operate and maintain.

We work from our own development environments and support teams across US, EU, and APAC timezones. Our workflow emphasizes documentation and asynchronous collaboration to keep development efficient and focused.

  • Production Backend Experience. Experience building and maintaining backend systems, APIs, and databases used in production.
  • Scalable Architecture. Design backend systems that stay reliable as your product and traffic grow.
  • Contractor Friendly. Flexible engagement for short projects, long-term support, or extra help during releases.
  • Focus on Backend Reliability. Improve API performance, database stability, and overall backend reliability.
  • Documentation-Driven Development. Development guided by clear documentation so teams stay aligned and work efficiently.
  • Domain-Driven Design. Design backend systems around real business processes and product needs.

Tell us about your project

Our offices

  • Copenhagen
    1 Carlsberg Gate
    1260, København, Denmark
  • Magelang
    12 Jalan Bligo
    56485, Magelang, Indonesia

More articles

When Laptops Are Domain-Locked and Developers Can’t Install Tools

Nothing kills momentum faster than a laptop you can’t fully control. As contractors, working on a domain-locked machine is often a recipe for frustration.

Read more

When Staging Access Requires Manager Approval

Ever waited hours just to test a feature on staging? When every access request has to go through a manager, productivity takes a hit.

Read more

Stop Skipping Tests in Your Pipeline to Save Time

Skipping tests in CI is the most self-defeating optimization in software engineering. The short-term time savings are real; the long-term cost in missed defects and eroded trust is far larger.

Read more

Why an Ideal Engineering Team Needs More Than Just Full-Stack Developers

Hiring a few “full-stack developers” sounds like the efficient choice. But relying on them alone often creates hidden gaps that slow everything down.

Read more