Here's what happens in most startups:
The founder argues with the CTO about a technical decision.
They debate for 30 minutes. Nobody writes anything down.
Two months later, a new developer asks: "Why did we choose this database?"
Nobody remembers the original reasoning. They argue again. They debate again.
Wasted time. Confused team. Inconsistent decisions.
Smart startups? They use Architecture Decision Records (ADRs).
This guide shows you what ADRs are, why they matter for startups in 2025, and how to write them in 5 minutes.
What Are Architecture Decision Records (ADRs)?
Let's start with a clear definition.
Definition
Architecture Decision Record (ADR) is a document that describes a significant architectural decision, the context, alternatives considered, and the consequences.
Key Point: ADRs are about recording decisions, not about making them.
What ADRs Document
- Context: What problem are we solving?
- Decision: What did we choose?
- Alternatives: What other options did we consider?
- Consequences: What are the pros and cons of this decision?
- Status: Is this proposal, accepted, superseded, or deprecated?
What ADRs Don't Document
- Minor decisions (variable naming, code style)
- Temporary decisions (will change in a week)
- Personal preferences (no business or technical impact)
- Implementation details (how-to guides)
- Meeting minutes
Why ADRs Matter for Startups in 2025
Founders think documentation is for big companies. Here's why it's wrong—especially in 2025.
1. Save Time on Recurring Debates
Without ADRs:
- "Why did we choose PostgreSQL?" → debate again → waste 30 minutes
- "Should we use REST or GraphQL?" → debate again → waste 45 minutes
- New developers ask same questions every week
- AI coding assistants can't learn from undocumented decisions
With ADRs:
- "Why PostgreSQL?" → Read ADR-001 → 2 minutes
- "REST vs GraphQL?" → Read ADR-003 → 3 minutes
- New developers get up to speed in hours, not weeks
- AI tools can reference ADRs for context
Time saved: 5-10 hours per month for a team of 5.
2. Learn from Past Decisions
Without ADRs:
- Repeat mistakes
- Don't know why things were done certain way
- Can't improve decision-making process
With ADRs:
- See pattern of good vs bad decisions
- Learn what worked and what didn't
- Improve framework for future decisions
- Build organizational memory
3. Onboard New Team Members Faster
Without ADRs:
- New developer asks 50 questions in first week
- Team explains same things repeatedly
- Knowledge is in people's heads, not documentation
- Onboarding takes 4-6 weeks
With ADRs:
- New developer reads ADRs → understands system
- Questions are deeper and more valuable
- Team focuses on building, not explaining
- Onboarding takes 1-2 weeks
4. Make Better Decisions
Without ADRs:
- Decisions made in meetings without framework
- Bias and politics influence choices
- No way to review if decision was right
- Reactive decision-making
With ADRs:
- Framework forces consideration of alternatives
- Written reasoning reduces bias
- Easy to review and learn from past decisions
- Intentional, thoughtful choices
5. Enable AI-Assisted Development
In 2025, AI coding assistants are standard. ADRs help them:
- Understand architectural constraints
- Suggest solutions that fit existing patterns
- Avoid recommendations that contradict past decisions
- Learn your team's preferences
ADR Formats: Choose Your Style
1. Traditional ADR (Nygard Format)
The original format by Michael Nygard. Simple and widely used.
2. MADR (Markdown ADR)
More structured format with explicit sections. Better for complex decisions.
3. Y-Statements (Lightweight)
Single-sentence format for quick decisions.
In the context of [use case], facing [concern], we decided for [option] to achieve [quality], accepting [downside].
Example:
In the context of user authentication, facing scalability concerns, we decided for JWT tokens to achieve stateless authentication, accepting the complexity of token management.
Our Recommendation: Use MADR for significant decisions, Y-statements for minor ones.
ADR Template: Use This 5-Minute Format
Don't overcomplicate. Use this MADR template.
# ADR-XXX: [Decision Title]## Status[Proposed | Accepted | Superseded by ADR-YYY | Deprecated]## Context[What problem are we solving? What constraints do we have?][What triggered this decision?][What are the forces at play?]## Decision[What did we choose? Be specific and clear.][How does this solution work?]## Alternatives Considered### Option 1: [Alternative Name]**Pros:**- [Pro 1]- [Pro 2]**Cons:**- [Con 1]- [Con 2]### Option 2: [Alternative Name]**Pros:**- [Pro 1]- [Pro 2]**Cons:**- [Con 1]- [Con 2]### Option 3: [Alternative Name]**Pros:**- [Pro 1]- [Pro 2]**Cons:**- [Con 1]- [Con 2]## Consequences of This Decision### Positive Consequences- [Good outcome 1]- [Good outcome 2]### Negative Consequences- [Bad outcome 1]- [Bad outcome 2]### Risks and Mitigations- [Risk 1] → [Mitigation strategy]- [Risk 2] → [Mitigation strategy]## Decision Date[YYYY-MM-DD]## Decision Makers[Name 1, Name 2]## Related ADRs- [ADR-XXX: Related decision]- [ADR-YYY: Related decision]## References- [Link to relevant documentation]- [Link to research or benchmarks]
Real ADR Examples: Learn From These
Example 1: Database Selection
# ADR-001: Use PostgreSQL as Primary Database## StatusAccepted## ContextWe're building MVP for B2B SaaS product. We need a relational database with:- Strong consistency for financial transactions- Good JSON support for flexible data- Easy to find developers- Mature ecosystem and tooling- AI/ML integration capabilities for future featuresOptions considered: PostgreSQL, MySQL, MongoDB## DecisionUse PostgreSQL as primary database.## Alternatives Considered### Option 1: PostgreSQL**Pros:**- Excellent JSON support with JSONB type- Strong community and documentation- Great developer availability for hiring- Mature, battle-tested- Excellent AI/ML ecosystem support- Open source with commercial support available**Cons:**- Slower for simple read-heavy workloads- More complex than MySQL for basic use cases### Option 2: MySQL**Pros:**- Faster for read-heavy workloads- Widely used- Simpler to get started**Cons:**- JSON support not as good as PostgreSQL- Less developer enthusiasm for new hires- Oracle licensing concerns for enterprise### Option 3: MongoDB**Pros:**- Flexible schema for rapid iteration- Great for document-heavy applications- Easy horizontal scaling**Cons:**- Weak consistency not suitable for transactions- Harder to find experienced developers- Schema flexibility can become technical debt- Higher hosting costs at scale## Consequences of This Decision### Positive Consequences- Easy to hire PostgreSQL developers- Strong consistency for financial data- JSONB flexibility for evolving schema- Mature ecosystem and tools (Prisma, pgAdmin, etc.)- Can use TimescaleDB extension for time-series data- Excellent geospatial support if needed### Negative Consequences- Potential performance bottlenecks at very high scale- May need to add Redis for caching read-heavy queries- More complex setup than simpler alternatives### Risks and Mitigations- **Risk:** Performance at scale → **Mitigation:** Add Redis caching for read-heavy queries, use read replicas if needed- **Risk:** Schema changes become difficult → **Mitigation:** Use Prisma for migrations, design schema carefully- **Risk:** Need for NoSQL features later → **Mitigation:** JSONB provides flexibility, can add MongoDB later for specific use cases## Decision Date2025-01-15## Decision MakersAlex (CTO), Sarah (Lead Developer)## Related ADRs- ADR-002: Use Prisma as ORM- ADR-015: Database Migration Strategy
Example 2: Frontend Framework
# ADR-003: Use Next.js for Frontend## StatusAccepted## ContextWe're building web application that needs:- Good SEO for marketing pages- Fast development speed- Easy to hire developers- Performance at scale- AI/ML integration capabilities- Real-time features supportOptions considered: Next.js, Create React App (Vite), Remix, SvelteKit## DecisionUse Next.js (App Router) for frontend.## Alternatives Considered### Option 1: Next.js (App Router)**Pros:**- Built-in SEO with server-side rendering- File-based routing is intuitive- Strong community and documentation- Easy to deploy to Vercel- Server components reduce client bundle size- Excellent AI SDK integration- Built-in API routes for simple backends**Cons:**- Learning curve for server components- Some third-party libraries not optimized for Next.js- Can be overkill for simple SPAs### Option 2: Create React App with Vite**Pros:**- Simple, no framework overhead- Fastest development experience- Maximum flexibility- Easier to understand for juniors**Cons:**- SEO requires additional setup- Need to add routing and state management manually- No built-in optimization- More setup for production deployment### Option 3: Remix**Pros:**- Great performance- Nested routes- Built-in form handling- Data loading patterns**Cons:**- Smaller community than Next.js- Harder to find developers- Steeper learning curve for team- Less ecosystem maturity### Option 4: SvelteKit**Pros:**- Excellent performance- Less boilerplate code- Built-in animations- Smaller bundle sizes**Cons:**- Smaller talent pool- Svelte less known in job market- Smaller ecosystem- Risk for long-term maintenance## Consequences of This Decision### Positive Consequences- SEO optimized from day one- Fast development with built-in routing and optimizations- Easy to hire Next.js developers- Great performance with server components- Can use Vercel AI SDK for AI features- Can host on Vercel for easy deployment### Negative Consequences- Team needs to learn server components- Some libraries need additional setup- More complex mental model than pure React### Risks and Mitigations- **Risk:** Server components learning curve → **Mitigation:** Budget 1-2 weeks for team learning, pair programming sessions- **Risk:** Third-party library compatibility → **Mitigation:** Choose libraries with Next.js support, use dynamic imports when needed- **Risk:** Framework lock-in → **Mitigation:** Keep business logic separate from framework code## Decision Date2025-01-10## Decision MakersAlex (CTO), Mike (Frontend Lead)## Related ADRs- ADR-004: Use Supabase for Auth and Database Hosting- ADR-012: Deployment Strategy
When to Write ADRs (Not Everything)
Don't document everything. That's as bad as documenting nothing.
Write ADRs For:
Significant Decisions (Do Document):
- Tech stack choices (frameworks, databases, languages)
- Architecture patterns (monolith vs microservices, serverless)
- Third-party service selection (auth provider, payment processor, CDN)
- Major refactoring or rewrites
- API design decisions (REST vs GraphQL, versioning strategy)
- Security approaches (authentication method, data encryption)
- Deployment strategies (cloud provider, CI/CD approach)
Don't Write ADRs For:
Minor Decisions (Don't Document):
- Variable naming conventions
- Code style preferences
- Minor library choices (e.g., date formatting library)
- Temporary fixes or workarounds
- Personal aesthetic preferences
- Bug fixes
- Configuration changes
Quick Decision Framework:
Ask yourself:
- Will a new developer in 3 months need to know why we made this decision?
- Will this decision impact system architecture for next 12+ months?
- Would we spend >30 minutes re-debating this if someone asks?
- Does this affect how multiple parts of the system interact?
- Would changing this decision require significant rework?
If yes to any: Write ADR.
If no to all: Don't write ADR.
ADR Status Lifecycle: Track Evolution
Decisions change. ADRs should reflect that.
Status Types
1. Proposed
- Decision is being discussed
- Not yet finalized
- ADR can be updated or rejected
- Seeking feedback from team
2. Accepted
- Decision is finalized
- Implementation has started or completed
- ADR won't change unless new information emerges
- Team is committed to this path
3. Superseded by ADR-YYY
- Better decision was made
- Old ADR is still valid for historical context
- Link to new ADR that replaces it
- Mark clearly at top of document
4. Deprecated
- Decision is no longer relevant
- System or requirement changed
- ADR kept for historical reference
- Mark with deprecation date
Example of Superseded ADR:
# ADR-005: Use Express for Backend API## StatusSuperseded by ADR-012## Context[Original context...]## Superseded ByThis ADR was superseded by ADR-012 (Use tRPC for Backend API) on 2025-06-15.Reason: We found tRPC provides better type safety and developer experience for our use case.See ADR-012 for current approach.
Where to Store ADRs: Keep Them Accessible
ADRs only work if team can find and read them.
Recommended Storage
Best: Version Control (Git)
- Store in
/docs/adr/or/adr/directory - Use numbered files (ADR-001-..., ADR-002-...)
- Commit and review like code
- Version history preserved automatically
- Searchable with standard tools
Alternative:
- Notion / Confluence (good for non-technical stakeholders)
- GitHub Wiki (integrated with code)
- Google Docs (simple, but lacks version control)
- Dedicated ADR tool (overkill for most startups)
Directory Structure
/docs
/adr
/template.md
/README.md (index of all ADRs)
/001-use-postgresql-as-primary-database.md
/002-use-prisma-as-orm.md
/003-use-nextjs-for-frontend.md
/004-use-supabase-for-auth.md
ADR README (Index)
Create README.md in /docs/adr/ directory:
# Architecture Decision RecordsThis directory contains all ADRs for this project.| ADR | Title | Status | Date || --- | --- | --- | --- || 001 | Use PostgreSQL as Primary Database | Accepted | 2025-01-15 || 002 | Use Prisma as ORM | Accepted | 2025-01-10 || 003 | Use Next.js for Frontend | Accepted | 2025-01-10 |## How to Create a New ADR1. Copy `template.md` to `XXX-short-description.md`2. Fill in all sections3. Set status to "Proposed"4. Submit PR for review5. After approval, change status to "Accepted"6. Merge to main## ADR Naming ConventionFormat: `XXX-short-descriptive-name.md`Examples:- `001-use-postgresql.md`- `015-migrate-to-microservices.md`- `042-api-versioning-strategy.md`
ADR Review Process: When to Revisit
Don't treat ADRs as permanent. Revisit when needed.
When to Review ADRs
Schedule Review (Every 6-12 Months):
- Are decisions still valid?
- Have constraints changed?
- Are there better alternatives now?
- Has the team learned from this decision?
Trigger Review (When Needed):
- New team member questions validity
- Performance or scalability issues emerge
- Better technology or approach becomes available
- Business requirements change significantly
- Major incident related to this decision
Review Process
- Read original ADR - understand context and reasoning
- Assess current situation - has anything changed?
- Consider new alternatives - are there better options now?
- Decision: Keep as is, supersede with new ADR, or deprecate
Common ADR Mistakes
1. Writing ADRs After the Fact
Mistake: "We made decision last week, let's write ADR now."
Reality: You'll forget important context and alternatives.
Fix: Write ADRs before or during decision process, not after. Use "Proposed" status for discussion.
2. Making ADRs Too Long
Mistake: "Let's write 10-page document for every decision."
Reality: Nobody will read it. ADRs should be 5-10 minutes to read.
Fix: Keep ADRs concise. 1-2 pages maximum. Link to external docs for details if needed.
3. Not Including Negative Consequences
Mistake: "We only need to document the good parts."
Reality: Understanding what won't work is as important as what will.
Fix: Always include negative consequences and risks. Hindsight bias kills learning.
4. Never Updating ADRs
Mistake: "We wrote ADR, done forever."
Reality: Technology and needs change. ADRs should reflect that.
Fix: Review ADRs every 6-12 months. Update or supersede when needed.
5. Writing ADRs Alone
Mistake: "CTO writes all ADRs."
Reality: ADRs should reflect team consensus, not one person's view.
Fix: Involve relevant team members in decision and documentation. Use PR reviews.
6. ADRs in Inaccessible Places
Mistake: ADRs buried in obscure wiki pages.
Reality: If team can't find them, they don't exist.
Fix: Keep ADRs in /docs/adr/ with clear README. Link from main README.
ADR Best Practices for Startups
1. Start Simple
Don't: Create complex ADR process, templates, and review boards.
Do: Use simple markdown template in Git. Start documenting today.
2. Be Consistent
Don't: Write ADRs sometimes, skip other times.
Do: Document every significant decision. Make it habit.
3. Make Them Visible
Don't: Hide ADRs in obscure directory nobody checks.
Do: Link ADRs from main README. Mention them in onboarding.
4. Keep Them Alive
Don't: Write once, never review.
Do: Review and update ADRs regularly. Keep them relevant.
5. Learn From Them
Don't: Write ADRs, ignore them.
Do: Review past ADRs before making new decisions. Learn patterns.
6. Use PR Reviews
Don't: Commit ADRs directly to main.
Do: Use pull requests for ADR review. Get team input.
Quick Takeaways
- ADRs save 5-10 hours per month by eliminating recurring debates
- Use MADR format for significant decisions, Y-statements for minor ones
- Always include alternatives considered—shows you did your homework
- Document negative consequences—hindsight bias kills learning
- Review ADRs every 6-12 months—technology and needs change
- Keep ADRs in Git with team—not hidden in wikis
- Use "Proposed" status for discussion before finalizing
- Link from main README—ADRs only work if people can find them
- Involve team in ADR creation—not just CTO decisions
- ADRs enable AI-assisted development—give coding assistants context
Frequently Asked Questions
When should I start writing ADRs?
Start immediately, even as a solo founder. The moment you make your first significant technical decision (database, framework, hosting), write an ADR. It's easier to start now than to document later.
How many ADRs is too many?
Quality over quantity. Aim for 1 ADR per major decision, not 1 per day. A startup typically has 10-30 ADRs after 2 years. If you have 100+ ADRs, you're probably documenting too much.
Should I write ADRs for failed decisions?
Yes! Some of the most valuable ADRs document decisions that were later changed. These prevent future teams from repeating mistakes. Mark them as "Superseded" with explanation.
Can ADRs be changed after accepted?
Don't edit accepted ADRs directly. If the decision changes, write a new ADR that supersedes the old one. Keep the old one for historical context. This preserves the decision timeline.
How do I get my team to write ADRs?
- Lead by example—write the first few yourself
- Make it part of your PR review process
- Start with "Proposed" status—low pressure
- Keep template simple and accessible
- Celebrate good ADRs in team meetings
- Reference ADRs when answering questions
What's the difference between ADRs and RFCs?
ADRs document decisions that have been made. RFCs (Request for Comments) propose decisions before they're made.
Use RFCs for major, controversial decisions needing wide input. Use ADRs to record the outcome.
Should I use a dedicated ADR tool?
For most startups, no. Markdown in Git is sufficient and has better version control. Dedicated tools add complexity. Only consider tools if you have 50+ engineers and complex approval workflows.
How detailed should alternatives be?
Include 2-4 realistic alternatives. For each:
- 2-3 key pros
- 2-3 key cons
- Brief explanation of why rejected
Don't include obviously wrong options just to fill space.
Do ADRs replace architecture diagrams?
No. ADRs complement diagrams. Use diagrams for visual overview, ADRs for decision rationale. Link between them: diagrams should reference relevant ADRs.
How do ADRs help with AI coding assistants?
AI assistants can reference ADRs to:
- Understand architectural constraints
- Follow established patterns
- Avoid contradicting past decisions
- Suggest contextually appropriate solutions
Include ADRs in your AI assistant's context window for better results.
References
- Michael Nygard: Documenting Architecture Decisions - Original ADR concept
- MADR Project - Markdown ADR format
- Joel Parker Henderson: ADR Examples - Template collection
- ThoughtWorks Technology Radar: ADRs - Industry adoption
- GitHub: ADR Tools - Command-line tools for ADRs
- AWS Architecture Blog: Documenting Decisions - Enterprise patterns
- Martin Fowler: Architecture Decision Records - Context on documentation
- SignalFire: Engineering Career Trends - Decision-making patterns
- Pragmatic Engineer: Tech Decisions - Industry insights
- Atlassian: Documenting Project Decisions - DACI framework
Related Reading
If you found this helpful, you might also enjoy:
- Why Founders Make Bad Technical Decisions - Common mistakes
- Why Startups Build Wrong Architecture - Architecture pitfalls
- Technical Leadership for Early Stage - Leading technical decisions
- How to Evaluate Codebase You Didn't Build - Understanding existing decisions
Need Help with Technical Decisions?
At Startupbricks, we've helped startups make hundreds of architectural decisions. We know what to consider, what to avoid, and how to document decisions properly.
Whether you need:
- Technical leadership and decision-making framework
- ADR setup and team training
- Architecture review and recommendations
- Help with specific technical decisions
Let's talk about making better technical decisions.
Ready to document decisions? Download our free ADR Template and start today.
