Skip to content
Back to Architecture Decisions

Decision Criteria

Define the dimensions you'll evaluate alternatives on, before you look at the alternatives.

Why

Without explicit criteria, decisions devolve into 'the one I like' — because every option has some advantage, and without weighted criteria the choice is driven by whichever advantage the decider finds most salient. Defining criteria upfront (cost, ops burden, performance, ecosystem, hiring) with weights forces a structured comparison: Option A wins on cost and ops, Option B wins on performance and ecosystem, and the weights decide. This also makes the decision auditable — when someone questions it later, the criteria show why, and if the criteria have changed, that's a new decision, not a re-litigation.

When

Before evaluating alternatives for any moderate+ decision. Takes 30 min. Revisit if the criteria prove wrong.

How

1. List the dimensions that matter for this decision:
   - Common: cost, ops burden, performance, ecosystem maturity, hiring, fit
   - Domain-specific: compliance, latency, data locality, vendor risk
2. Weight each dimension (1-5) by how much it matters for this specific decision
   - e.g. for a DB: performance 5, ops 4, cost 3, ecosystem 3, hiring 2
3. Score each alternative (1-5) on each dimension
4. Compute weighted score: Σ (weight × score) for each alternative
5. The highest score wins — but sanity-check: if the result is surprising, re-examine the weights
6. Record the criteria + weights + scores in the ADR so the reasoning is auditable

Example

Decision: cache layer (Redis vs Memcached vs DragonflyDB)

Criteria + weights (for this use case):
  performance: 5  (latency-critical)
  ops burden:  4  (small team)
  ecosystem:   3  (need client libs in Go + Python)
  cost:        3  (moderate scale)
  hiring:      2  (niche)

Scores (1-5):
                perf  ops  ecos  cost  hire  | weighted
  Redis:         4    5    5     4     5    | 5×4+4×5+3×5+3×4+2×5 = 74
  Memcached:     4    4    4     5     4    | 5×4+4×4+3×4+3×5+2×4 = 67
  DragonflyDB:   5    3    2     4     1    | 5×5+4×3+3×2+3×4+2×1 = 53

Decision: Redis (74). Reasoning + scores in ADR-018.

Common Problems

  • ⚠Adding criteria after seeing the alternatives — the criteria get tuned to favor the preferred option; define them blind.

Best Practices

  • ✓Keep criteria to 5-7 dimensions — more and the weighting becomes noise; fewer and you miss important trade-offs.
  • ✓Re-examine the weights if the decision feels wrong — the math is a tool to inform, not replace, judgment; if intuition and math disagree, figure out why.

Related Resources