Artifacts Intermediate 5 min read

Decision Logs and ADRs: The Memory of a Project

How to write Architecture Decision Records (ADRs) and lighter decision logs that future team members and your future self will actually find useful.

Table of contents
  1. When does decision documentation pay back?
  2. What is the cost of skipping decision documentation?
  3. What is the minimal ADR template?
  4. What does the lighter decision log look like?
  5. How does decision documentation scale to multi-team?
  6. What failure modes does this introduce?
  7. When is full ADR overkill?
  8. Where should you go from here?

The decision a project makes today gets forgotten by the people who made it within 6 months. The team that joins in a year has no idea why the design looks the way it does. ADRs and decision logs are the artifacts that stop this memory loss. This chapter shows the template for both and the discipline that keeps them useful.

When does decision documentation pay back?

Three signals.

Project longer than 6 months. Below that, memory carries the context. Above it, the team has rotated, sponsors have changed, and "why did we do this" loses its origin.

Architecture choices with reversible-but-costly options. Database, API style, auth approach. The kind of choices the System Design series covers. Each is an ADR.

Multiple teams will inherit the system. Onboarding a new team is much faster with a folder of ADRs than with "ask Bob, he was there".

If the project is small, short, and you'll own it forever, documentation is overhead. Most production projects are not.

What is the cost of skipping decision documentation?

Three failure modes.

Endless relitigation. Every new engineer questions the architecture. The team spends hours re-explaining; some choices get reversed and re-reversed.

Cargo-cult engineering. New work copies old patterns without understanding why. The original choice was for reason X; the copy applies it where reason X doesn't hold.

Lost context at handover. Team A built the system; Team B inherits it; the decisions that made sense at the time look arbitrary now. Team B rewrites because they cannot tell what was deliberate vs accidental.

What is the minimal ADR template?

# ADR-001: Use Postgres for primary data store

Date: 2026-06-19
Status: Accepted
Deciders: Tech Lead, EM, Sponsor

## Context

We need a primary data store for the new billing service. The
service writes 100-500 transactions/sec and reads 5-10x that.
Data is relational (orders, line items, payments). Team is
familiar with Postgres; alternatives considered include MongoDB,
DynamoDB.

## Decision

We will use PostgreSQL 16 hosted on Azure Database for
PostgreSQL Flexible Server, with one read replica.

## Consequences

### Positive
- Team familiarity reduces onboarding time
- Strong consistency by default; transactions are simple
- EF Core support is mature
- Read replica handles dashboard queries

### Negative
- Single-region by default; multi-region needs work later
- Vertical scaling ceiling at ~5K writes/sec; will need
  partitioning if volume grows 10x

## Alternatives considered

- **DynamoDB**: rejected - team unfamiliar, eventual consistency
  complicates billing logic
- **MongoDB**: rejected - flexible schema not needed; relational
  model fits domain

## Revisit conditions

If write QPS approaches 3K/sec, evaluate sharding via Citus or
moving to a different store. Track via
[observability metrics](/system-design/observability-otel-dotnet).

Three details. The status (Accepted, Superseded, Deprecated) lets you see if the decision still holds. The "revisit conditions" is a built-in trigger to revisit; without it, ADRs go stale silently. Numbered sequentially in a folder (docs/adr/).

What does the lighter decision log look like?

For non-architecture decisions, a single markdown file per project:

# Decision Log — {{ Project Name }}

## 2026-06-19: Use Mailgun for transactional email
Decided by: PM + TL. Context: needed reliable email delivery
for refund notifications. Considered SendGrid, Postmark.
Picked Mailgun for existing account and lower volume tier.
Rationale: cheaper at our volume; team already has dashboard
access.

## 2026-06-15: Defer subscription billing to Q4
Decided by: Sponsor. Context: scope creep on initial release.
Scope-tradeoff framework applied; subscription moved from Must
to Won't this quarter.

## 2026-06-10: Outsource customer-support runbook to vendor
Decided by: PM. Context: in-house writer at capacity. Vendor
chosen: AcmeWriting based on prior project. Cost: $5K. Owner:
PM signs off final.

The lighter format catches process and procurement decisions that ADRs don't cover. Both formats coexist - ADRs in the repo for engineers, decision log in the project wiki for everyone.

How does decision documentation scale to multi-team?

flowchart TB
    OrgADRs[Org-level ADRs<br/>cross-team standards] --> TeamADRs[Team ADRs<br/>local choices]
    TeamADRs --> Project[Project decision log<br/>operational choices]
    OrgADRs -.referenced by.-> Project
    Project --> Onboarding[New hire reads on day 2]

Org-level ADRs cover the choices everyone follows ('we use PostgreSQL by default'); team-level ADRs cover the choices the team makes within those defaults; project decision logs cover the operational calls. New engineers read all three on the onboarding plan from chapter 16 day 2. The scope chapter and stakeholder chapter feed content into both formats.

What failure modes does this introduce?

When is full ADR overkill?

Two cases.

Solo engineer, small scope. You're the only one who will ever read it. A short README explaining "I picked X because Y" is enough.

Quick experiment / spike. Two-week throwaway code doesn't need ADRs. Document the result of the spike; the scaffolding disappears.

The discipline earns its overhead at team size 3+ and project duration 3+ months.

Where should you go from here?

You have completed the artifact group. The next four chapters are case studies that put every artifact you've learned into real project shapes. Start with rescue a failing project - the playbook for the hardest situation a tech lead can inherit.

Frequently asked questions

ADR or decision log - what's the difference?
ADRs (Architecture Decision Records, popularised by Michael Nygard) are formal markdown files in the repo, one per decision, focused on architecture. A decision log is a running list per project, one entry per decision, including non-architecture choices (process, vendor, scope). Use ADRs for the 10-15 architecture decisions that shape the system; use a decision log for the 50+ smaller calls a project makes.
How is this different from comments in the code?
Comments answer 'what does this do'; ADRs answer 'why did we choose this over the alternatives'. Comments live with the code; ADRs live in their own folder so they're discoverable by anyone reading the project history. Both have value; ADRs catch decisions that don't have an obvious code home.
When should I write an ADR vs just decide?
Write an ADR when the decision is non-obvious, contested, or expensive to reverse. 'We use Postgres' for a CRUD app doesn't need an ADR. 'We use Cassandra because of expected scale' does, because the next engineer will wonder why and may want to revisit. The decision tree from Design Patterns when-to-use-which shows the same discipline at code level.
Who reads ADRs?
Future team members, including your future self in a year. The audience is not the team that made the decision (they remember). It's the engineer who joins in 12 months and asks 'why is this so weird' - the ADR is your time-travelling answer. Without ADRs, every architectural choice gets relitigated by every new hire.