Architecture Decision Record — Use whenever you make a significant technical choice. Examples: "PostgreSQL vs. Firebase," "Monolith vs. Microservices," "REST vs. GraphQL"
Status: Proposed | Accepted | Deprecated | Superseded
Date: [YYYY-MM-DD]
Deciders: [Names or roles involved]
Supersedes: [ADR-XXX if applicable]
[What is the problem we are trying to solve? What are the constraints? What triggered this decision?]
[We will use X.]
[One clear, unambiguous statement of the choice made.]
[Why X? What specific advantage does it give us? How does it align with our strategic goals?]
- Description: [Brief explanation]
- Pros: [What it offered]
- Cons: [Why we rejected it]
- Description: [Brief explanation]
- Pros: [What it offered]
- Cons: [Why we rejected it]
- [What we gain from this decision]
- [Another benefit]
- [What trade-offs we accept]
- [Constraints this creates]
- [Side effects that are neither good nor bad]
[Exactly how this affects the codebase—file structure, naming conventions, patterns to follow, patterns to avoid]
Affected Components:
- [Component/Module 1]
- [Component/Module 2]
Required Changes:
- [Specific change needed]
- [Another change]
- [Link to relevant documentation]
- [Link to research or benchmarks]
- [Related ADRs: ADR-XXX, ADR-YYY]
[Any additional context, open questions, or future considerations]
Template from Stream Coding by Francesco Marinoni Moretto — CC BY 4.0