Post

Making Technical Decisions You Won't Regret

Making Technical Decisions You Won't Regret

The decisions that hurt most aren’t the wrong ones — they’re the ones made for the wrong reasons and never written down. Resume-driven architecture, cargo-culted patterns, and “because it’s modern” have sunk more backends than any single bad technology. Senior engineering is less about knowing the answer and more about having a sound way to reach one. Here’s the framework I use.

The problem

Two opposite failures. Hype-driven decisions — adopting microservices, a message queue, or a trendy datastore because it’s fashionable, not because the problem demands it. And analysis paralysis — debating forever instead of deciding and moving. Both cost you; the skill is steering between them.

How to approach it

Frame the decision, weigh the options against your current constraints, decide, and write down why.

flowchart TB
    P[What problem, what constraints?] --> O[List real options + trade-offs]
    O --> R{Reversible?}
    R -- Two-way door --> Fast[Decide fast, revisit later]
    R -- One-way door --> Care[Slow down, get it right]
    Fast --> Doc[Record the decision + why]
    Care --> Doc

What this looks like in practice

  • Decide for the stage you’re in. On SHOB.COM.BD I split a monolith into microservices — but only once uneven scaling and deploy coupling actually hurt. Splitting earlier would have bought distributed-systems pain with no payoff.
  • Choose the boring option deliberately. On the same system I skipped a message broker and kept service calls synchronous. A broker is “more correct” on paper; the simplicity was worth more than the decoupling at that stage. That was a conscious trade-off, documented — not an oversight.
  • Start simple, earn the complexity. On Study Giveaway I used Postgres full-text search first and only added Elasticsearch where it genuinely paid off — not the other way round.
  • Know one-way vs two-way doors. Reversible decisions (a library choice) deserve speed; hard-to-reverse ones (your data model, your public API contract) deserve real care.

Pitfalls to watch for

  • Resume-driven development. Picking tech to learn it, not because the problem needs it, makes the project pay your tuition.
  • Premature complexity. Every abstraction and service you add is permanent weight. Earn each one.
  • No record. Six months later nobody remembers why, so the decision gets second- guessed or silently violated. A few lines of ADR — context, options, decision, consequences — prevents that.
  • Never revisiting. A right call at 10K users can be wrong at 1M. Decisions have a shelf life.

Takeaways

Good technical judgment is a repeatable process: frame the problem and constraints, lay out real trade-offs, decide for the stage you’re actually in, respect one-way doors, and write down the why. You won’t always be right — but you’ll never be unable to explain your reasoning, and that’s what makes decisions you won’t regret.

This post is licensed under CC BY 4.0 by the author.