Architecture Decisions
Record the decisions you'd regret not being able to explain in six months. An ADR (Architecture Decision Record) captures why, not just what — so the next person, or you, doesn't relitigate it or quietly undo it.
When to use
- Record a decision only when all three hold: it's hard to reverse, it would be surprising without the rationale, and there were genuine trade-offs between real options — a datastore, a sync/async boundary, a framework, a public contract, a security model.
- Skip when any of the three is missing — a reversible, obvious, or inevitable choice (a variable name; the only option that could work) is noise as an ADR.
Step 1: Draft the ADR
Open assets/adr-template.md now. It owns the fields.
- State the question, the artifact or system scope, the forces, and one
accountable decision owner or the approvers with a conflict rule.
- Weigh at least two real options: assumptions, failure limits,
disqualifiers, reversal cost, evidence. Evaluate status quo or deferring
wherever viable; record the evidence when not.
- Give every assumption a stable ID and a way to be proved wrong.
- Record the proposed choice and each rejected alternative. Preserve
rejections; never edit them away.
- Record consequences and reversal: commitments, data and migration
consequences, how to undo, what it closes off. Only upsides → not
examined.
Step 2: Challenge and persist
- A reviewer other than the sole author challenges options, assumptions,
consequences, reversal, under the template's challenge contract. Skip only
when a current independent design review covers this exact ADR identity.
- Append the immutable
proposed ADR to
.sdlc-skills/designs/{{YYYY-MM-DD}}-{{topic}}.md or the project's
decision log, preserving what is there.
Step 3: Present and track
Present and end the turn:
ADR {{identity}}: {{question}}
Proposed: {{choice}} — {{rationale, one line}}
Rejected: {{alternatives}} Reversal cost: {{one line}}
1. Accept
2. Reject in favor of {{other option}}
3. Request changes
4. Cancel
Recommendation: {{option the recorded trade-offs support}} — {{one sentence}}.
Praise and momentum accept nothing. Record accepted, rejected, or
cancelled externally with exact-version evidence.
Normative change → a proposed successor with an exact delta. Accepted
successor → inventory and invalidate predecessor-bound consumers until
their owners reconcile. Never edit an issued identity.
Track decision and conformance separately. Acceptance puts nothing in force; conformance does. Retirement needs owner action and absence of the
governed surface. Contradiction → reopen every affected owner.
Return the recorded outcome to the skill that invoked this one.
Common mistakes
- Recording the what without the why — it reads as arbitrary and gets undone.
- No rejected alternatives — the next person re-explores the same dead ends.
- An ADR for a reversible choice — only the decisions you'd defend belong here.
- An accepted ADR never moved
in force when work landed, or an obsolete
in-force ADR was never linked as superseded or retired.
- Treating “the code now does this” as owner approval or conformance proof.
For a copyable ADR template, a filled example, and common failure patterns, see assets/adr-template.md.
1---2name: architecture-decisions3description: Use when a significant, hard-to-reverse technical choice is being weighed or has just been settled — a datastore, sync vs async, a framework, a public contract, an auth or security model. Fires on should we use X or Y, on a choice made in passing during discussion, and on a request to revisit an old one, even if nobody says ADR or decision record. Skip easily-reversible choices.4---56# Architecture Decisions78Record the decisions you'd regret not being able to explain in six months. An ADR (Architecture Decision Record) captures *why*, not just *what* — so the next person, or you, doesn't relitigate it or quietly undo it.910## When to use1112- Record a decision only when **all three** hold: it's **hard to reverse**, it would be **surprising without the rationale**, and there were **genuine trade-offs** between real options — a datastore, a sync/async boundary, a framework, a public contract, a security model.13- **Skip** when any of the three is missing — a reversible, obvious, or inevitable choice (a variable name; the only option that could work) is noise as an ADR.1415## Step 1: Draft the ADR1617Open `assets/adr-template.md` now. It owns the fields.18191. State the question, the artifact or system scope, the forces, and one20 accountable decision owner or the approvers with a conflict rule.212. Weigh at least two real options: assumptions, failure limits,22 disqualifiers, reversal cost, evidence. Evaluate status quo or deferring23 wherever viable; record the evidence when not.243. Give every assumption a stable ID and a way to be proved wrong.254. Record the proposed choice and each rejected alternative. Preserve26 rejections; never edit them away.275. Record consequences and reversal: commitments, data and migration28 consequences, how to undo, what it closes off. Only upsides → not29 examined.3031## Step 2: Challenge and persist32331. A reviewer other than the sole author challenges options, assumptions,34 consequences, reversal, under the template's challenge contract. Skip only35 when a current independent design review covers this exact ADR identity.362. Append the immutable `proposed` ADR to37 `.sdlc-skills/designs/{{YYYY-MM-DD}}-{{topic}}.md` or the project's38 decision log, preserving what is there.3940## Step 3: Present and track41421. Present and end the turn:4344 ```text45 ADR {{identity}}: {{question}}46 Proposed: {{choice}} — {{rationale, one line}}47 Rejected: {{alternatives}} Reversal cost: {{one line}}4849 1. Accept50 2. Reject in favor of {{other option}}51 3. Request changes52 4. Cancel5354 Recommendation: {{option the recorded trade-offs support}} — {{one sentence}}.55 ```56572. Praise and momentum accept nothing. Record accepted, rejected, or58 cancelled externally with exact-version evidence.593. Normative change → a proposed successor with an exact delta. Accepted60 successor → inventory and invalidate predecessor-bound consumers until61 their owners reconcile. Never edit an issued identity.624. Track decision and conformance separately. Acceptance puts nothing `in63 force`; conformance does. Retirement needs owner action and absence of the64 governed surface. Contradiction → reopen every affected owner.655. Return the recorded outcome to the skill that invoked this one.6667## Common mistakes6869- Recording the *what* without the *why* — it reads as arbitrary and gets undone.70- No rejected alternatives — the next person re-explores the same dead ends.71- An ADR for a reversible choice — only the decisions you'd defend belong here.72- An accepted ADR never moved `in force` when work landed, or an obsolete73 in-force ADR was never linked as superseded or retired.74- Treating “the code now does this” as owner approval or conformance proof.7576For a copyable ADR template, a filled example, and common failure patterns, see `assets/adr-template.md`.