Document architecture decisions with clear context, alternatives, and consequences.
ADR Template
# ADR-001: [Title of Decision]
**Status:** Proposed | Accepted | Deprecated | Superseded by ADR-XXX
**Date:** 2024-01-15
**Deciders:** Alice (Tech Lead), Bob (Principal Engineer)
**Owner:** Alice
## Context
What is the issue we're facing? What factors are driving this decision?
We need to choose a database for our new analytics service. Current requirements:
- 10M+ events per day
- Complex aggregation queries
- Real-time dashboards
- Budget: $5k/month
- Team familiar with SQL
Decision
We will use PostgreSQL with TimescaleDB extension.
Alternatives Considered
Option 1: PostgreSQL + TimescaleDB (CHOSEN)
Pros:
- Team already knows PostgreSQL
- Time-series optimization for analytics
- Reliable and proven
- Good query performance
- Reasonable cost (~$3k/month)
Cons:
- Requires manual scaling effort
- Not purpose-built for analytics
Option 2: ClickHouse
Pros:
- Excellent query performance for analytics
- Built for analytics workloads
- Column-oriented storage
Cons:
- Team unfamiliar with ClickHouse
- Steeper learning curve
- Different query syntax
Option 3: BigQuery
Pros:
- Fully managed
- Excellent for analytics
- Scales automatically
Cons:
- Higher cost (~$8k/month for our volume)
- Vendor lock-in to GCP
- Less control over optimization
Tradeoffs
What we're optimizing for:
- Team velocity (familiar tech)
- Cost efficiency
- Good enough performance
What we're sacrificing:
- Peak analytical performance (vs ClickHouse)
- Fully managed experience (vs BigQuery)
Consequences
Positive
- Development can start immediately (no learning curve)
- Lower operational costs
- Can reuse existing PostgreSQL expertise
- Easy integration with current stack
Negative
- Will need to manually optimize queries
- May need to revisit if we scale 10x
- Requires more operational work than BigQuery
Risks
- Performance may degrade at 100M+ events/day
- Mitigation: Monitor query performance, plan migration at 50M events/day
Implementation Notes
- Use TimescaleDB hypertables for event storage
- Implement continuous aggregates for common queries
- Set up read replicas for dashboard queries
- Document scaling runbook at 50M events/day
Follow-up Actions
- Provision PostgreSQL + TimescaleDB cluster (Alice, by 2024-01-20)
- Create migration script from MySQL (Bob, by 2024-01-22)
- Set up monitoring dashboards (Alice, by 2024-01-25)
- Document scaling thresholds (Alice, by 2024-01-30)
References
Revision History
- 2024-01-15: Initial draft (Alice)
- 2024-01-16: Added cost analysis (Bob)
- 2024-01-17: Accepted by architecture review board
## ADR Numbering
ADR-001: Initial System Architecture ADR-002: Database Selection for Analytics ADR-003: Authentication Strategy ...
## Status Workflow
Proposed → Accepted → Implemented ↓ Rejected
Accepted → Deprecated → Superseded by ADR-XXX
## Common Decision Types
**Technology Selection:**
- Database choice
- Framework selection
- Cloud provider
- Programming language
**Architecture Patterns:**
- Microservices vs Monolith
- Event-driven vs Request-response
- Sync vs Async communication
**Infrastructure:**
- Deployment strategy
- Monitoring approach
- Scaling strategy
**Security:**
- Authentication method
- Data encryption approach
- Access control model
## Quick Start Guide
```bash
# 1. Create new ADR
cp templates/adr-template.md docs/adr/ADR-042-title.md
# 2. Fill in sections
# - Context: Why are we making this decision?
# - Decision: What did we decide?
# - Alternatives: What else did we consider?
# - Consequences: What are the impacts?
# 3. Review with team
# - Share in architecture channel
# - Get feedback from stakeholders
# - Iterate on alternatives
# 4. Update status to "Accepted"
# 5. Link from main architecture docs
Best Practices
- Write ADRs for significant decisions: Not every choice needs an ADR
- Document alternatives: Show you considered options
- Be honest about tradeoffs: Every decision has downsides
- Keep it concise: 1-2 pages maximum
- Update status: Mark deprecated/superseded ADRs
- Link related ADRs: Create decision trails
- Include follow-ups: Action items with owners
Anti-Patterns
❌ Too detailed: 10-page ADRs nobody reads ❌ No alternatives: Looks like decision was predetermined ❌ Missing consequences: Ignoring downsides ❌ No owner: Nobody accountable ❌ Outdated status: Old ADRs marked "Proposed"
Review Checklist
- Clear problem statement in Context
- Decision is stated explicitly
- 2+ alternatives considered
- Tradeoffs honestly assessed
- Consequences (positive and negative) documented
- Risks identified with mitigations
- Decision owner assigned
- Follow-up actions with deadlines
- Status is current
Output Checklist
- ADR document created
- Context explains the problem
- Decision clearly stated
- 2-3 alternatives documented
- Tradeoffs section filled
- Consequences listed (positive & negative)
- Risks identified with mitigations
- Decision date and owners
- Follow-up actions assigned
- Status is set