Architecture decision records
Write ADRs as a durable record of why one architecturally significant choice was made. Prefer a small factual record over a broad design guide.
Workflow
- Read repository instructions, existing ADRs, documentation tooling, and the implementation affected by the decision.
- Decide whether the record is prospective or retrospective. Never present a reconstructed decision as if it had been written when the choice was made.
- Identify one significant decision. Split independent, phased, or separately reversible choices into separate records.
- Use the repository's established template. Without one, use Nygard's minimal anatomy: status, context, decision, and consequences. Add alternatives when they explain the choice; use MADR when option comparison needs more detail.
- For a retrospective ADR, inspect Git history first. Record relevant commit hashes and dates, then verify every claim against current code, tests, configuration, and authoritative platform documentation.
- Write context as forces and constraints, not a disguised solution. State the decision assertively. Include material benefits, costs, risks, and limits.
- Use
Proposed,Accepted,Rejected,Deprecated, orSuperseded by ADR-NNN. Preserve accepted and rejected records; supersede them with a new ADR instead of rewriting history. - Update the decision-log index and reciprocal supersession links. Render or lint the documentation using the repository's native toolchain.
- Run the bundled validator and report unresolved evidence gaps honestly.
Quality rules
- Use monotonic identifiers and never reuse a removed number.
- Keep one decision per record and make the title describe that decision.
- Separate observed facts, the selected decision, and expected consequences.
- Include credible alternatives; do not create straw-man options.
- Do not assign net scores or weights unless the ADR defines a scoring model and cites the measurements behind it.
- Distinguish verified history from inference and current policy from past fact.
- Keep secrets, personal data, and internal credentials out of evidence.
- Keep the record concise, standalone, linkable, and reviewable in a code diff.
Validation
python3 skills/architecture-decision-records/scripts/validate_adrs.py docs/adr \
--git-repo . --require-history
Omit --require-history for prospective records. Add the repository's own
renderer, link checker, or Markdown/ReST linter after this structural check.
Resources
- Read references/best-practices.md for the standards landscape, lifecycle, evidence method, and review rubric.
- Copy assets/adr-template.md for Markdown projects.
- Copy assets/AdrTemplate.rst for TYPO3 or other ReST documentation projects.