Topic: adr lightweight template

ADR Lightweight Template — LADR, Y-Statements, and the Minimum Viable Format

Teams that adopt ADRs often stall on the "Context" section. Not because context doesn't matter — it's the most valuable field in a mature practice — but because it's genuinely hard to write for a decision you're making right now under time pressure. The lightweight ADR formats (the LADR three-field variant, the Y-Statement single-sentence form) solve the cold-start problem by deferring the field that requires the most retrospective clarity. The part most format comparisons miss: lightweight ADRs are not lower-quality ADRs. They're prospective-optimized ADRs. Retrospective ADRs — written months after the decision is implemented — are actually easier to write in Nygard's full five-section format, because by then you have all the context you need.

TL;DR

Four ADR formats, one decision table: use the Y-Statement (one sentence) for inline PR descriptions and meeting notes. Use LADR (three fields: Title + Decision + Consequences) for prospective ADRs written under time pressure. Use Nygard (five fields) for retrospective ADRs and for mature practices once the team writes ADRs habitually. Use MADR when you want machine-readable YAML frontmatter for CI and GitHub integration. Copy-paste templates for each are below.

The four formats at a glance

Format Fields Best for Not ideal for
Y-Statement 1 sentence Inline in PR descriptions, meeting notes, Slack threads — decisions too small for a file but worth capturing Decisions with 3+ rejected alternatives, contested trade-offs, or decisions that new hires will need to understand
LADR (3-field) Title + Decision + Consequences Prospective ADRs written during or just after the decision; teams in early adoption; high-velocity engineering orgs Enterprise audit trails; decisions with complex Context that determines which alternatives were considered
Nygard (5-field) Title + Status + Context + Decision + Consequences Retrospective ADRs; foundational decisions; mature practices with 10+ ADRs already written Teams starting ADR adoption where Context friction kills the habit before it forms
MADR YAML frontmatter + prose sections Teams that want CI/GitHub integration; machine-readable metadata; MADR tooling ecosystem Teams without frontmatter tooling; orgs where ADRs live in Confluence or Notion (not a flat Markdown directory)

The Y-Statement — one sentence, complete decision

The Y-Statement format originates from Klaus Meffert and Olaf Zimmermann's research on capturing architecture decisions in a consistent single-sentence structure. The template:

In the context of [use case or constraint],
facing [concern or competing concern],
we decided [option chosen],
to achieve [quality or outcome],
accepting [downside or trade-off].

Worked example — database selection:

In the context of the user authentication service handling 10K concurrent sessions,
facing high latency spikes from the external OAuth provider under peak load,
we decided to cache validated OAuth tokens server-side with a 5-minute TTL,
to achieve p95 response times under 100ms during peak traffic,
accepting that forced token invalidation on password change requires an additional cache-flush step.

The Y-Statement forces you to name exactly one concern (the problem you were solving), one trade-off (what you gave up), and one outcome (what you were trying to achieve). These three pieces are the minimum that makes a decision record useful. A decision statement without the trade-off ("we decided to cache OAuth tokens") is not a decision record — it's a description of the current state.

Where Y-Statements belong:

The LADR three-field template — copy-paste ready

The three-field LADR format:

# ADR-NNNN: [Decision statement title — verb phrase, present tense]

## Decision

[What was decided, in two to four sentences. Include the one-sentence reason: the
primary constraint or concern that made this option preferable to the alternatives.
Name at least one alternative that was seriously considered and the one-sentence
reason it was rejected.]

## Consequences

- [Upside: what this decision enables or improves]
- [Downside: what this decision costs or constrains]
- [Optional: what downstream decisions this forces or forecloses]

Worked example — message queue selection:

# ADR-0042: Use RabbitMQ over Apache Kafka for the notification queue

## Decision

We chose RabbitMQ for the cross-service notification queue. Our notification
volume (peak 500 messages/second) is well within RabbitMQ's throughput ceiling
and doesn't require Kafka's distributed log model. Kafka was evaluated and
rejected: Kafka's operational complexity (ZooKeeper or KRaft cluster, topic
partition management, consumer group offset tracking) is not justified at our
scale and would require dedicated ops capacity we don't have. If notification
volume exceeds 50K messages/second or we need persistent event replay for
event-sourcing scenarios, the queue selection should be re-evaluated.

## Consequences

- (+) Simpler deployment: RabbitMQ runs as a single container in development
  and a 3-node cluster in production; no ZooKeeper/KRaft dependency.
- (-) No built-in event replay: RabbitMQ messages are consumed and deleted;
  replay of past notifications requires a separate event store if needed later.
- (-) Throughput ceiling: peak 50K messages/second per vhost; architectural
  rework required if notification volume grows 100x.

Note what the LADR template omits versus Nygard: there is no "Status" field (Status is tracked in the ADR directory index or filename convention, not inside the file) and no "Context" section (the constraint that triggered the decision is embedded in the first Decision sentence rather than having its own section). The trade-off is that readers who encounter this ADR without the surrounding system context may not understand why the constraint existed — which is exactly what a full Context section provides. That's the gap that should be filled retrospectively, six to twelve months after the decision is implemented.

Why "Context" blocks prospective ADR adoption

The Nygard Context section is the most valuable field in a retrospective ADR and the most blocking field for a prospective one. The mismatch is architectural, not motivational.

When you are making a decision in real time, you know the decision and you know the trade-offs. What you don't know yet:

The lightweight ADR formats acknowledge this reality: they don't ask you to write Context when you don't have it yet. They ask you to write the three things you do know — what you decided, why (in brief), and what it costs — and defer the retrospective narrative to when you have it.

The Context-retrospective workflow

A practical workflow for teams using LADR prospectively:

  1. Write LADR at decision time. Three fields, five minutes. File it. Merge the ADR alongside the implementation PR.
  2. Set a calendar reminder for six months out. One line in the ADR PR description: "Context audit due: YYYY-MM-DD." (Or use a CI job that opens a GitHub issue on the ADR file six months after merge.)
  3. Add Context retrospectively. When the reminder fires, open the ADR and add a Context section above Decision. It will take twenty minutes because you now know what the context actually was. The resulting Context section will be more accurate and more useful than anything you could have written at decision time.

Teams that follow this workflow often find that the retrospective Context write-up surfaces a subtle detail the team forgot: an alternative that was ruled out for a reason that's no longer true, or a constraint that has since changed and might warrant an ADR update. The retrospective Context is not just documentation — it's an audit of whether the decision still holds.

Adding fields over time: the progression from LADR to Nygard-complete

The progression that works for most teams transitioning from LADR to a mature practice:

Phase 1 (months 1–3): three-field LADR

Title + Decision + Consequences. The ADR GitHub Action's auto-numbering and template scaffolding work identically with this format — the LADR template can be set as the default scaffold, and the lint jobs that check for alternatives and consequences content can be enabled even at this phase.

Phase 2 (months 3–6): add Status

The ADR Status field (Proposed → Accepted → Superseded / Deprecated) adds almost no authoring friction (one line of YAML or a single-word heading) but pays significant dividends when the directory grows past 20 ADRs: Status lets a reader scan the directory and immediately see which decisions are still operative versus which have been overridden. Add Status as the second field (after Title, before Decision) so the Status lifecycle is visible at the top of the file.

Phase 3 (month 6+): add Context retrospectively

Six months after an ADR is filed, return to it and add the Context section above Decision. At this stage you know which alternatives you didn't consider, which constraints turned out to be real, and what the organizational forces were. The Context section added retroactively is typically twice as useful as one written prospectively because it reflects what actually happened, not what you thought would happen.

When to skip to Nygard-complete from the start

For retrospective ADRs — the initial batch of 5–10 ADRs documenting decisions already made — write Nygard-complete from the start. You have all the context. The WhyChose extractor can help recover the decision reasoning from the ChatGPT or Claude conversation where the decision was originally worked through, making retrospective Context sections more accurate than memory reconstruction alone.

LADR in practice: the format used by the NYPL Digital team

The most-cited real-world example of LADR in production is the New York Public Library's digital team, which published their ADR directory with the three-field format. Their ADRs follow a slightly different three-field structure: Title + Status + Decision (combining Nygard's Context + Decision into a single narrative paragraph). The NYPL variant demonstrates that "lightweight" doesn't mean a fixed schema — it means removing the structural barriers that stop engineers from filing ADRs in the first place.

The shared insight across all LADR variants: the decision and the primary trade-off are always required. The format argument is only about the supporting metadata (Status, Context, explicit alternatives list) — whether those fields are required at write time or optional/deferred. Teams that require all fields at write time get structurally complete ADRs that are sometimes written long after the decision (because the engineer waited until they had time to do it right) or never written at all. Teams that require only the minimum and allow deferral get ADRs filed closer to the decision, which means the Decision content is more accurate even if the supporting metadata is thin.

How WhyChose fits in

The largest source of LADR prospective ADRs in most engineering teams is AI-assisted decision-making: the ChatGPT or Claude conversation where trade-offs were weighed and a conclusion was reached. That conversation contains the three LADR fields — the decision (the conclusion the thread reached), the primary reason (the constraint or concern the conversation centered on), and the consequences (the trade-offs explicitly named) — but buried in a chat thread rather than structured as an ADR.

The WhyChose extractor identifies decision-shaped conversations in your ChatGPT or Claude export and surfaces them as structured output. For LADR purposes, the extractor output maps directly to the three LADR fields: the decision statement becomes the Title, the rationale thread becomes the Decision paragraph, and the named trade-offs become the Consequences bullets. For retrospective ADRs, the extractor's output provides the raw material for the Context section that LADR defers — the full thread shows which alternatives were considered and what the surrounding context was at decision time.

Get early access

Related questions

What is a lightweight ADR (LADR)?

A lightweight ADR (LADR) is a reduced-field variant of the Nygard five-section format that omits the 'Context' section. The most common form has three fields: a decision statement title, a Decision section (two to four sentences on what was decided and the primary reason, including one named alternative and why it was rejected), and a Consequences section (at least one upside and one downside). The Y-Statement is an even more compressed variant — a single sentence that captures the decision, the concern, the trade-off, and the outcome in a consistent structure. LADR formats are designed for prospective ADRs written under time pressure; Nygard-complete is better for retrospective ADRs where the full context is already visible.

Should I use LADR or Nygard format for my ADRs?

Use LADR for prospective ADRs (written at decision time) and Nygard for retrospective ADRs (written months after the decision). The reason: Context is only fully visible in retrospect. Teams that require Nygard-complete for prospective ADRs often get a Context section that says nothing useful because the writer doesn't yet know what the real context was. A LADR prospective ADR with Context added six months later consistently produces better Context sections than forcing Context into the original write-up under time pressure. For foundational decisions the team has been living with for a year, go straight to Nygard-complete.

What is a Y-Statement ADR format?

The Y-Statement compresses a decision record to a single sentence: "In the context of X, facing Y, we decided Z, to achieve Q, accepting R." It was formalized by Klaus Meffert and Olaf Zimmermann as a way to capture decisions consistently in PR descriptions, meeting notes, and design documents where a full ADR file is impractical. A Y-Statement is not a replacement for a full ADR when the decision has multiple alternatives or contested trade-offs — it's a capture mechanism for decisions that are significant enough to record but not significant enough to warrant their own file. It also serves as a structured placeholder before a full ADR is written.

Can I mix lightweight and full ADR formats in the same repo?

Yes, and this is common. Many teams use a tiered approach: Y-Statements inline in PR descriptions, LADR three-field for prospective decisions, and Nygard-complete for foundational retrospective ADRs. The constraint: every ADR file should use the same format within the file, and the directory should have a README that explains which format is in use and when. Directories that mix formats randomly are harder to navigate than directories with a single format and a clear policy (e.g., "all ADRs use LADR at filing time; Context is added retrospectively at 6-month intervals").

Further reading