Engineering Decisions

Trade-off matrices, decision records with revisit triggers, refactor versus rewrite, build versus buy, and what a framework charges for what it gives.

The Trade-off Matrix

Six axes that real design decisions move, scored side by side — useful because it forces every option to be described on the axes it is worst at, and dangerous because the digits look like evidence.

Q · Three designs, three advocates, and the argument keeps moving. How do I make the comparison concrete without pretending I measured something?
Decision Records

Context, options, decision, why, consequences, revisit trigger. Short enough to write in fifteen minutes, and worth writing because in two years the code will not say what was known when it was chosen.

Q · How do I make a design decision survivable by people who were not in the room, without producing documentation nobody reads?
Revisit Triggers

A decision that was right becomes wrong when its assumptions change, and nobody is watching the assumptions. Naming the evidence that would flip the answer is the cheapest engineering practice there is, and the least used.

Q · This design is correct today. What specific, observable thing would tell us it has stopped being correct — and who would see it?
Refactor or Rewrite

Five questions decide it: can the behaviour be characterized, can the change be incremental, is the architecture salvageable, how much undocumented domain knowledge is in there, and can old and new run side by side.

Q · This code is genuinely bad and the team wants to start again. What would have to be true for that to be the cheaper path, and what does it cost if I am wrong?
Build, Library, SaaS or Managed Service

Four options rather than two, sorted by how much of the thing you end up owning. The question that decides it is whether this capability is what your product is judged on.

Q · We need a capability that thousands of companies also need. Which parts of it should we own, and what are we agreeing to run at 3am?
Library or Framework

A library is something your code calls. A framework is something that calls your code. That inversion — not size, not scope — is what decides how much of your design it gets to make.

Q · Which of these dependencies is deciding my application's structure, and did I agree to that?
What a Framework Charges

Productivity, conventions and an ecosystem, in exchange for its lifecycle, its architecture, an upgrade obligation and the moments its abstractions leak. All four charges are payable later, which is why only the benefits are visible on day one.

Q · We are productive in this framework. What is it charging us, and when does the bill arrive?
Reversible and Irreversible Decisions

Sort decisions by what it costs to undo them, then spend evidence, meetings and caution in proportion. Most decisions are cheap to reverse and are treated as though they were not; a few are permanent and get decided in a chat thread.

Q · How much evidence does this decision deserve — and is that proportional to what it costs to be wrong?