Problem
Design reasoning lives in chat threads and people's heads. New engineers cannot tell why the system looks the way it does, and teams re-litigate settled choices or undo them unknowingly.
Also known as: design-doc, architecture-design-record
Capture a significant design as a durable, reviewable document that records context, options, decision, and consequences.
Design reasoning lives in chat threads and people's heads. New engineers cannot tell why the system looks the way it does, and teams re-litigate settled choices or undo them unknowingly.
A design record is a small document that answers one question: why did we build it this way? It names the problem, the forces in play, the options weighed, the choice made, and what the team accepts as a result. Unlike a wiki page, it is immutable once accepted, so it reads as a trustworthy timeline of the system's reasoning.
Each record lives in the repository, numbered and reviewed in a pull request. A lightweight template keeps them short.
docs/design/0007-use-postgres-for-ledger.md
Status: accepted (supersedes 0003)
Context: ledger needs ACID, 2k writes/s peak
Options: Postgres | DynamoDB | event store
Decision: Postgres with logical replication
Consequences: single-region write path; revisit at 10x load
When circumstances change, authors add a new record and mark the old one superseded. The index of statuses becomes a map of current decisions.
Low: a folder in the repository
Low: review and status upkeep
Low: simple template
Records written after the fact become justification, not reasoning
Superseded decisions remain marked accepted
Template bloat makes authors skip it