ADR
Intents
We decided to use event sourcing over CRUD for the audit trail — record that as an ADRRecord an ADR: chose Redis over Memcached for session caching because of pub/sub supportUpdate ADR-0003 — we revisited the decision and switched from REST to gRPCDocument why we chose Kafka over RabbitMQWhat architecture decisions have we recorded?References
Read references/adr-conventions.md for placement rules and references/adr-template.md for section structure.
Scope
ADRs are for system-level decisions that affect multiple features or core architecture. Feature-scoped decisions belong in the feature spec.md under Technical Decisions.
Workflow: Create
- Gather decision context from conversation/docs/links.
- Validate scope is system-wide (not feature-scoped).
- Place at the repository's existing ADR path, or fallback:
docs/adrs/{NNNN}-{decision-title}.md. Determine{NNNN}by scanning existing ADRs and incrementing (start at0001if none exist). - Fill template from
references/adr-template.md(or local template if present). - Set status to
proposed.
Workflow: Iterate
- Read the existing ADR in full.
- Upstream check: If
docs/system-design.mdexists, check whether the revised decision conflicts with current architecture. Warn the user if so. - Identify what changed and why.
- Update in place: revise decision/rationale, update alternatives and consequences, note what shifted.
- Update
Last updateddate. - Transition status:
proposed→acceptedwhen team agrees.acceptedstaysacceptedwhen decision evolves.
Output
- Create: complete ADR file using canonical naming
- Iterate: update in place with current decision and rationale
- Decision statement is clear and implementable
- Alternatives section is always present with concrete trade-offs
- Consequences section is always present with short-term and long-term impact
- If decision changed, rationale explains what shifted