DraftlizeVOL. 1 · 2026 EDITION
Start free →
Guide · Architecture Decision Records

Architecture decision records
that don't rot in the repo.

An architecture decision record answers the most expensive question a codebase ever asks: "why is it built this way?" The practice is sound — a small, dated record of the context, the call, and the consequences. The trouble is the substrate. An ADR is a markdown file checked into the repo, written the day the decision is made and never opened again. The code evolves, the decision quietly stops matching reality, and the ADR becomes archaeology. Draftlize keeps the record itself — but makes it something an AI coding agent reads before it touches the code, and one that flips to drift_detected the moment the decision it documents no longer holds.

TL;DR

A markdown file vs a living ADR.

An ADR in docs/adr/0007-use-event-sourcing.md is correct on the day you commit it and slowly diverges from the running system after that. The fix isn't a stricter review checklist — it's a substrate that knows which records still match the code and tells you when one doesn't.

DraftlizeMarkdown ADR in the repo
The record itselfTyped card: context, decision, consequences, dependenciesA markdown template, filled by hand
Status fieldLive — flips to drift_detected on its ownHand-edited; usually still says "Accepted"
Decision changes — does the code know?Dependent records flag drift automaticallyNo link; the file lies until someone notices
Can a coding agent use it?Native read + write via MCPReads flat text if you point it there
Read before the code changesThe agent pulls the relevant ADRs firstNobody opens docs/adr/
Who keeps it honestThe substrate tracks itA review checklist nobody enforces

Why ADRs atrophy.

I

Written once, read never

Michael Nygard proposed the architecture decision record in 2011 to capture why — the context and the trade-offs behind a structural call. The format is right. But an ADR is filed in docs/adr/ and the audience is a future engineer who never opens the folder. A record nobody reads back can't do the one job it has.

II

The code drifts, the record doesn't move with it

ADR-0007 says "we use event sourcing for the ledger." Eighteen months later half the ledger is CRUD again, decided in three pull requests and a Slack thread. The status still reads Accepted. The record now actively misleads the next person who trusts it — which is worse than no record at all.

III

Keeping it current loses to shipping

Updating an ADR is a manual chore that competes with merging the PR, and the PR always wins. So the records freeze at the moment of writing while the system keeps moving, and the gap between docs/adr/ and main widens every sprint.

An ADR template, made self-maintaining.

A standard ADR has five fields. Draftlize keeps all five — and turns the one that always lies, Status, into something the substrate maintains instead of something you forget to edit.

TITLE

What was decided

A short, addressable name. In Draftlize it's a card with a stable ID, citable as "per ADR-0007" from a spec, a thread, or an agent — a real link, not a filename you have to grep for.

STATUS

The field that lies

In markdown, Status is hand-edited and stays Accepted forever. In Draftlize it's live: when an upstream decision moves, the implementation flips itself to drift_detected, so the record tells the truth without anyone updating it.

CONTEXT

Why it came up

The forces in play when the call was made. Linked to the decisions it depends on, so when one of those changes, this record knows its premises shifted.

DECISION

The call, and the rejected paths

What you chose and what you ruled out. The alternatives are part of the card — so six months later nobody re-litigates an option you already closed.

CONSEQUENCES

What it commits you to

What follows from the decision, good and bad. The dependent cards that inherit those consequences are linked — and they flag drift when this record changes underneath them.

When the reader is a coding agent.

I

It reads the ADRs before it writes code

Claude Code or Cursor, connected over MCP, pulls the relevant records before touching a module — so the decision behind "we use event sourcing here" is in context at the exact moment it matters, not buried in a folder nobody opens. The reader who never came back is now the reader who never skips a card.

II

It writes them back too

When the agent makes a structural call mid-task, it can record a new ADR as a card — title, context, decision, consequences — without leaving the work to open a markdown file. The record gets written because writing it is one tool call, not a context switch.

III

Drift surfaces instead of hiding

Each record carries explicit dependencies. Change an upstream decision and every record built on it flips to drift_detected — the same way a build system invalidates everything downstream of a changed file. The gap between the decision and the code stops being something you discover in a post-mortem.

The ADR practice was never the problem. The problem is a record that can't tell when it's already wrong.
Keep the five fields. Move them onto a substrate that maintains the one that lies.
FAQ

Common questions.

What is an architecture decision record (ADR)?

An ADR is a short, dated record of one significant architectural decision — the context, the call, and the consequences. The practice was proposed by Michael Nygard in 2011 to capture why a system is built the way it is, so future engineers do not have to reverse-engineer the reasoning from the code.

What is in a standard ADR template?

Five fields: title, status, context, decision, and consequences. Title names the call, status tracks whether it is proposed, accepted, or superseded, context records the forces in play, decision states what was chosen and rejected, and consequences captures what it commits you to.

Why do ADRs go out of date?

Because they are static markdown checked into the repo, written once and rarely reopened. As the code evolves the decision quietly stops matching reality, but the status field still reads "Accepted" — so the record actively misleads the next person who trusts it, which is worse than no record at all.

How does Draftlize keep ADRs from drifting?

Draftlize keeps the same five fields but makes the record a card an AI coding agent reads before it touches the code and writes back when it makes a call. When an upstream decision moves, the implementation status flips itself to drift_detected — so the one field that always lies, status, stays honest without anyone editing it.

Start your ADRs free with $5.

New accounts get $5 freePay only for what you useBalance never expires

Spin up a project, port your existing ADRs in as cards, and connect your coding agent over MCP — so the records get read before the code changes, and flag drift the moment a decision moves.

Start free with $5
Use this template

Open this template as live cards.

One click creates a project with these exact sections as typed, linked cards. Answer them with the agent — and when a decision changes later, every dependent section flags stale instead of silently drifting. $5 free credit on signup, no card required.

Decision tracking