Templates
The seven durable-document shapes. ADR, RFC, Runbook, Postmortem, Sprint Retro, Project Spec, Meeting Notes.
The seven durable-document shapes we use. Copy → paste → fill. Templates encode owner / review / status fields automatically.
The seven templates
Section titled “The seven templates”| Template | When to use it | Lifespan |
|---|---|---|
| Decision Record (ADR) | A choice that constrains the future (tech, vendor, architecture) | Forever — never deleted, only marked deprecated |
| RFC / Design Doc | A non-trivial change being proposed before implementation | Until implemented, then archived |
| Runbook | Step-by-step procedure for an operational task | Forever, reviewed monthly |
| Incident Postmortem | After a customer-facing or production incident | Forever, indexed in Incidents |
| Sprint Retrospective | Agile ceremony | 1 year, then archived |
| Project Spec | Scoping a multi-week initiative | Until project ships, then archived |
| Meeting Notes | Only for meetings that produce decisions | 6 months, then archived |
Template — Decision Record (ADR)
Section titled “Template — Decision Record (ADR)”# [ADR-NNNN] [Short imperative title — e.g. "Adopt Drizzle ORM for all DB access"]
| Field | Value || --- | --- || Status | Proposed / Accepted / Deprecated / Superseded by [ADR-XXXX] || Date | YYYY-MM-DD || Decider(s) | @Name || Stakeholders consulted | @Name1, @Name2 || Related ADRs | ADR-XXXX |
## ContextWhat's the situation that forces this decision? What constraints exist? Why now, not later?
## DecisionThe choice, stated as an imperative sentence.
## WhyReasoning. The trade-offs and constraints that made this the right call.
## Alternatives rejectedAlternative A — why not.Alternative B — why not.
## ConsequencesWhat becomes easier? What becomes harder? Any migration / cleanup needed?Template — RFC / Design Doc
Section titled “Template — RFC / Design Doc”# [RFC-NNNN] [Title — what you're proposing]
| Field | Value || --- | --- || Status | Draft / Approved / Implemented / Withdrawn || Author | @Name || Reviewers (required) | @Name1, @Name2 || Created | YYYY-MM-DD || Target ship date | YYYY-MM-DD || Jira epic / PR | LINK |
## TL;DR (one paragraph)What we're proposing, why now, and the single most important consequence.
## ProblemWhat problem does this solve? Who has it? How big is it?
## Proposed solutionThe design.
## Alternatives consideredWhat else did you consider? Why is the proposed solution better?
## Risks & open questionsWhat could go wrong? What's unresolved?Template — Runbook
Section titled “Template — Runbook”# Runbook — [Procedure Name]
| Field | Value || --- | --- || Severity it applies to | P0 / P1 / P2 || Owner | @Name || Last verified working | YYYY-MM-DD || Estimated time | XX minutes || Required access | Railway / Neon / GitHub / etc. |
## When to use this runbookA 1–2 sentence trigger.
## Steps1. ...2. ...
## Rollback / safetyHow to undo if step N fails.
## After-action- Verify customer-facing X- Update incident in [Incidents](/engineering/incidents/)Template — Incident Postmortem
Section titled “Template — Incident Postmortem”# Postmortem — [Incident name, dated YYYY-MM-DD]
| Field | Value || --- | --- || Severity | SEV-1 / SEV-2 / SEV-3 || Date | YYYY-MM-DD || Duration | HH:MM || Incident commander | @Name || FM ID | FM-NNN |
> Blameless rule. This document is about systems, not people.
## TL;DROne paragraph.
## Customer impactWho, how, severity, duration, detection.
## Timeline (UTC)| Time | Event |
## Root cause5 whys.
## DetectionTTD, what earlier signal we missed.
## What is being doneAction items table.
## Lessons learnedTemplate — Project Spec, Meeting Notes, Sprint Retrospective
Section titled “Template — Project Spec, Meeting Notes, Sprint Retrospective”(See Confluence template pages or copy from existing ADRs / RFCs in this repo.)
How to use a template
Section titled “How to use a template”- Copy the relevant block above into a new MDX file
- Move the file to the right folder (
engineering/adrs/,engineering/incidents/, etc.) - Fill in every
[bracketed placeholder] - Set frontmatter (title, description, audience, status, owner, last-reviewed)
- Apply labels / link from the parent MOC
Why we have templates at all
Section titled “Why we have templates at all”OpenAI, Anthropic, and Stripe all use templates aggressively. Three reasons:
- Shape consistency = search works (filter by
type-adr, find all ADRs) - Required fields = no orphan pages with no owner
- Lower friction = people actually write durable docs instead of just talking
A template is a contract: if you use the ADR template, future-you (and your replacement) know exactly where to find “what did we decide” and “what alternatives did we consider.”
Worked examples
Section titled “Worked examples”For real examples of each template in use:
- ADRs: See Decision Log — 5 published (Drizzle, Repository Pattern, CI Runners, Page Layout, Apex Models)
- Runbooks: See Runbooks — 3 published (Incident Response, DB Migration, CI Pipeline)
- Postmortems: See FM-032 exemplar
- App Catalog reference pages: See App Catalog — 14 app reference docs