Use when choosing or revisiting an architectural technology, integration boundary, deployment strategy, or cross-cutting pattern and you need to record the rationale, trade-offs, impacted LikeC4 elements, and consequences in an ADR.
Capture why an architectural choice was made, what alternatives were rejected, which modeled elements it affects, and what follow-up work it creates. An ADR should stay useful months later when the original discussion is gone.
Use the standard ADR backbone:
Store ADRs as ADR/NNNN-short-title.md.
Do not use for repository tooling, CI/CD setup, lint rules, or LikeC4 modeling workflow mechanics.
| Field | Guidance |
|---|---|
| Filename | ADR/NNNN-short-title.md with manually incremented leading zeros |
| Core sections | Status / Context / Decision / Consequences |
| Recommended extras | Impacted Elements, Alternatives Considered, Follow-up |
| Starter template | Use a local ADR starter if the workspace provides one, but adapt the content to the current decision |
| Decision quality check | Include both gains and costs, not just the preferred outcome |
PostgreSQL vs MongoDB, Kong vs HAProxy)# ADR-0007: Choose PostgreSQL for the primary transactional store
## Status
Accepted
## Context
`{YourSystem}` needs strong transactional guarantees, relational querying, and predictable backup tooling.
The team considered MongoDB and PostgreSQL for the primary business data store.
## Decision
Use PostgreSQL for `{YourSystem}.primaryDatabase`.
## Impacted Elements
- `{YourSystem}.api`
- `{YourSystem}.primaryDatabase`
- Any view or deployment slice that documents persistence, backup, or failover
## Consequences
### Positive
- Strong ACID guarantees for transactional workflows
- Mature replication, backup, and observability ecosystem
- Clear fit for relational reporting and joins
### Negative
- Requires schema migration discipline
- Less flexible for rapidly changing document-shaped payloads
- Operational tuning may be needed as write volume grows
### Neutral
- Some JSON-heavy payloads may still remain in application-layer adapters
## Follow-up
- Update the database container technology to `PostgreSQL`
- Review replication and backup assumptions
- Validate affected views and deployment documentation
test-modelUseful follow-ups:
create-element, create-relationshipmodel-deployment-infrastructuretest-model❌ Documenting how the diagram was edited — ADRs capture design rationale, not modeling mechanics
❌ Missing costs or risks — a decision without trade-offs reads like advocacy, not architecture
❌ No impacted elements — if readers cannot tell what parts of the model are affected, the ADR is too abstract
❌ Confusing the ADR with an implementation checklist — the ADR states the choice and its consequences; detailed execution can be follow-up work
❌ Treating a local ADR starter as an oracle — reuse the structure, not the example wording or domain content