Architecture Decision Records (ADRs)
Also Known As
ADR
decision log
architectural decision
TL;DR
Short documents capturing the context, decision, and rationale for significant architectural choices — creating an institutional memory of why the system is built the way it is.
Explanation
An ADR records: the architectural decision made, the context that made it necessary, the options considered, the rationale for the choice, and the consequences. Stored as version-controlled Markdown files alongside code (docs/adr/), they are accessible, searchable, and historically accurate. ADRs prevent the constant re-arguing of settled decisions and help onboard new developers who wonder 'why did they do it this way?'.
Diagram
flowchart TD
PROBLEM[Architectural decision needed] --> ADR[Create ADR document]
ADR --> SECTIONS[Sections:<br/>Title + date + status<br/>Context - why decide now<br/>Decision - what we chose<br/>Consequences - trade-offs]
SECTIONS --> STATUS{Status}
STATUS -->|Proposed| REVIEW[Team reviews]
REVIEW -->|Accepted| ACCEPTED[ADR accepted<br/>committed to repo]
REVIEW -->|Rejected| REJECT[ADR rejected<br/>record why]
ACCEPTED -->|Better info| SUPERSEDED[Superseded by ADR-N+1]
subgraph Benefits
HIST2[Why decisions were made<br/>visible to future devs]
ONBOARD[Onboarding reference<br/>no tribal knowledge]
end
style ACCEPTED fill:#238636,color:#fff
style REJECT fill:#f85149,color:#fff
style SUPERSEDED fill:#d29922,color:#fff
Common Misconception
✗ ADRs are only for large organisations — they are valuable for any team of 2+ developers; even solo developers benefit from the future-self context they provide.
Why It Matters
Without ADRs, architectural decisions are re-litigated at every new hire and refactoring discussion — the context that justified the original choice is lost within months.
Common Mistakes
- Writing ADRs after the fact without the original context — the rationale is reconstructed and loses authenticity.
- Not recording rejected alternatives — often the most valuable part is understanding what was considered and why it was rejected.
- ADRs that are too long — keep them to one page maximum; detail belongs in linked documentation.
- Not treating ADRs as immutable — an ADR records a decision at a point in time; supersede it with a new ADR rather than editing.
Code Examples
✗ Vulnerable
# No ADR — new developer asks why the system uses Redis for sessions:
# 'I don't know, it was here when I joined'
# 'Let's switch to database sessions, it's simpler'
# Team spends 2 hours re-arguing a decision made 3 years ago
# No one remembers the PHP-FPM sticky session issue that drove the original choice
✓ Fixed
# docs/adr/0003-redis-for-session-storage.md
# Status: Accepted | Date: 2023-01-15
# Context: PHP-FPM pool has 20 workers across 3 servers; sticky sessions cause uneven load.
# Decision: Use Redis for centralized session storage.
# Alternatives considered: DB sessions (slower), filesystem (not multi-server).
# Consequences: Adds Redis dependency; sessions survive server restarts.
References
Tags
🤝 Adopt this term
£79/year · your link shown here
Added
15 Mar 2026
Edited
22 Mar 2026
Views
27
🤖 AI Guestbook educational data only
|
|
Last 30 days
Agents 0
No pings yet today
No pings yesterday
Perplexity 7
Amazonbot 7
Unknown AI 3
Google 2
SEMrush 2
Ahrefs 1
Also referenced
How they use it
crawler 20
crawler_json 1
pre-tracking 1
Related categories
⚡
DEV INTEL
Tools & Severity
🟡 Medium
⚙ Fix effort: Low
⚡ Quick Fix
Create docs/adr/0001-use-postgresql.md for every significant architectural decision — include context, options considered, decision made, and consequences
📦 Applies To
any
web
cli
🔗 Prerequisites
🔍 Detection Hints
No ADR directory; architectural decisions made verbally with no record; new team members asking why certain choices were made
Auto-detectable:
✗ No
adr-tools
mkdocs
docusaurus
⚠ Related Problems
🤖 AI Agent
Confidence: Low
False Positives: High
✗ Manual fix
Fix: Low
Context: File