Record decisions, not meeting transcripts

A useful decision record explains a choice that constrains future work. It is not a complete history of a project and it does not need to preserve every comment from a meeting. Create one when a choice changes an interface, operating model, dependency, security posture, data contract, or difficult-to-reverse implementation direction.

Write the record close to the decision, while rejected options and constraints are still clear. A short record written today is more valuable than a polished retrospective assembled months later. Store it where engineers already work, give it a stable identifier, and link it from the code, issue, or runbook that the choice affects.

Use a small, demanding template

Start with a title phrased as the choice, a status, the decision date, and an owner. Then capture context, constraints, options, the chosen approach, consequences, and a review trigger. Each field should force useful thinking. If a field repeatedly produces filler, remove it.

Context explains why a decision is needed now. Constraints separate fixed conditions from preferences. Options show that alternatives received real consideration. Consequences should include costs and follow-up work, not merely benefits. The review trigger defines what new evidence would justify reopening the choice.

  • Status: proposed, accepted, superseded, or retired.
  • Decision: one direct paragraph stating the chosen path.
  • Consequences: operational work, limitations, risks, and new opportunities.
  • Review trigger: a date, event, scale threshold, or changed assumption.

Make the options comparable

Evaluate every option against the same criteria. Typical criteria include delivery risk, reversibility, operational complexity, accessibility, security, performance, maintainability, and team familiarity. Choose only criteria that matter to this decision. A long generic scorecard can create the appearance of rigor while hiding the important trade-off.

Separate facts from forecasts. A documented browser support table is a fact at a point in time; the expected cost of maintaining a fallback is a forecast. Label uncertainty and name the test that could reduce it. When evidence is incomplete, the record should make that visible instead of turning an assumption into institutional memory.

Decide clearly and preserve dissent

Name the decision maker or decision mechanism before discussion begins. Consensus can be a useful input, but waiting for universal agreement can leave a team with an accidental decision. The accountable person should explain how the evidence and constraints led to the final choice.

Preserve material dissent in a concise form. A concern does not need to block a decision to deserve a record, especially when it describes a condition that could later appear. This makes review less political: the team can ask whether the previously identified risk has arrived rather than relitigating who supported which side.

Maintain the chain, not the past

Do not silently rewrite an accepted record when circumstances change. Create a new record, link it to the earlier one, and mark the old decision as superseded or retired. The chain shows how the system and its constraints evolved. It also prevents old links from becoming misleading fragments.

Review records when their stated trigger occurs and during work that crosses the same boundary. Archive records only when their subject no longer exists. The collection stays useful when it answers two questions quickly: why does the system work this way, and what evidence would permit a different choice?

← Back to articlesDiscuss an engineering challenge ↗