Every team has decisions that live only in a Slack thread and three people's memories — until those people leave and the next engineer re-litigates the whole thing or, worse, silently reverses it.
Tier: Foundation · Workflow area: Documentation
Architecture Decision Records fix this, and AI removes the reason they do not get written: turning a messy discussion into a structured document is exactly the extraction-and-drafting work models do well. The craft is in the honesty constraints — an ADR that strawmans the rejected options is propaganda, and it will not survive the first skeptical reader.
Skip ADRs for trivially reversible choices — an ADR for a lint rule is process cosplay. The bar: would reversing this cost more than a day, or surprise another team?
Extract before drafting. First pass is structured extraction, not prose:
Below is the thread where we chose between RabbitMQ, Kafka, and SQS for
order events. Extract, with no editorializing:
1. The decision as stated, and who stated it.
2. Every option discussed, with each argument FOR and AGAINST it as actually
made in the thread (attribute: "Priya argued...").
3. Constraints and assumptions cited (team size, ops budget, existing infra).
4. Open questions raised but not resolved.
5. Anything decided provisionally or "for now".
Mark anything you inferred rather than found with [INFERRED].
Read the extraction against your memory of the discussion. This is where you catch the model merging two people's positions or inventing a rationale.
Draft with honesty constraints. Then:
Draft an ADR from the verified extraction using our template. Rules:
- Alternatives Considered: present each rejected option's strongest form —
the argument its advocate would sign off on. No strawmen.
- The decision rationale may only use constraints and arguments from the
extraction. If the winning argument was "ops familiarity", say that; do
not upgrade it to a grand architectural principle.
- Consequences must include negative ones we accepted (e.g., "SQS ties this
flow to AWS; multi-cloud portability is explicitly sacrificed").
- Status: Accepted, dated 2026-07-24. Keep it under one page.
Run the advocate check. Send the Alternatives section to whoever argued for the losing option: "Does this represent your position fairly?" One-line ask, enormous trust payoff — and the single best defense against re-litigation, because the dissenter is now on record that their case was heard at full strength.
Capture the residue. Open questions from the extraction become tickets or a "Revisit when" clause in the ADR ("Revisit if order volume exceeds 10k/s or we adopt a second cloud"). Explicit reversal triggers are what distinguish an ADR from a monument.
File it where code review lives. Commit to docs/adr/NNNN-order-event-queue.md via PR — the PR review is the ratification. Link the ADR from the code it governs (module README or top-of-file comment) so future readers find the why next to the what.
For excavating old decisions, run step 1 over the historical thread, then interview the remaining context-holder with the extraction's open questions — 15 minutes of their time converts folklore into a document before it walks out the door.
docs/adr/ in one pass.Decision threads are dense with client names, commercial terms, and internal politics. Redact before pasting into any non-sanctioned tool: client → CLIENT_A, replace commercial figures, drop the HR-adjacent asides entirely. On client engagements, prefer the approved tenant. Fully local: extraction-then-draft works well on an Ollama-hosted model because the task is reorganization, not invention — one of the safest workflows to run entirely offline. The advocate check and ratification PR involve no model at all.