Engineering teams make consequential architectural decisions every week — in design reviews, technical deep-dives, incident retrospectives that surface design flaws, deliberate sessions that pick between competing approaches. The decisions are real. The trade-offs get debated. The team arrives at a choice and moves on to implementation. What doesn’t happen, at most companies, is the corresponding documentation. The decision gets made in conversation; the conversation ends; implementation begins; the reasoning that drove the choice exists only in the heads of the people who were in the meeting, and only for a few weeks. By the time someone needs to understand why the system was built this way — usually six months later, usually because something has gone wrong or a debate has restarted — the reasoning is gone. A new engineer asks why a service is deployed unusually. Three teammates give three different answers, none confident. A design debate restarts a year after it was settled with the same trade-offs, the same opinions, the same conclusion — because no one wrote down why the original conclusion was reached. An incident reveals a brittle dependency; the team asks why it exists; the honest answer is “I think someone added it because of X — let me find out.” Hours of archaeology to recover a decision that was made deliberately and well. The code preserves what was built. The documentation that should preserve why either doesn’t exist or has decayed past usefulness. This guide is a specific instance of the workflows pattern, applied to architectural and technical documentation. It pairs with the meeting-to-tickets workflow (which captures what the team committed to build) and the SOPs and playbooks workflow (which captures how the team operates the system). This workflow is for the design artifacts that explain how the system was conceived, what alternatives were considered, and why the chosen path was chosen.Documentation Index
Fetch the complete documentation index at: https://docs.tryearmark.com/llms.txt
Use this file to discover all available pages before exploring further.
Foundation
Pick your documentation taxonomy
Architecture documentation comes in distinct types with distinct audiences and lifespans:| Type | Scope | Audience | Lifespan |
|---|---|---|---|
| ADR (Architecture Decision Record) | One decision | The team and future engineers | Permanent — even superseded ADRs stay as history |
| SDD (System Design Document) | A system, service, or major component | Engineers building or operating the system | Living — updated as the system evolves |
| RFC (Request for Comments) | A proposal under consideration | Engineers reviewing the proposal | Decision point — converted to ADR or rejected |
| Sequence / data flow doc | How something flows through the system | Engineers debugging or modifying | Living |
| Integration / API design | Interface between systems | Engineers on both sides | Living, versioned |
| Postmortem (architectural) | What an incident revealed about design | The team and future engineers | Permanent |
Conventions worth being explicit about
ADR numbering and naming.ADR-0001 through ADR-NNNN, with consistent file naming. The number is permanent; the title can be human-readable.
Status field. ADRs typically use: Proposed, Accepted, Deprecated, Superseded by ADR-XXXX. Communicates lifecycle without requiring readers to dig.
Diagram conventions. Mermaid for in-doc; specific tooling for richer diagrams (Excalidraw, draw.io, Structurizr). Pick one primary tool; resist tool sprawl.
Code references. When a doc references code, use stable identifiers (paths, function names) and a commit hash or version if the reference might decay.
Length expectations. ADRs: 1–3 pages. SDDs: 3–10 pages. RFCs: 3–6 pages. Anything longer is a sign the doc is doing too much.
Source meetings
Architecture documentation typically comes from one of five meeting types:| Source meeting | Likely artifact |
|---|---|
| Design review (early-stage) | RFC or SDD draft |
| Design review (late-stage) | SDD, ADR finalization |
| Architecture debate / trade-off discussion | ADR |
| Technical deep-dive / explanation | SDD or sequence diagram |
| Postmortem with architectural implications | Postmortem ADR or SDD update |
Destination
Architecture docs live in specific places:| Destination | Best for |
|---|---|
In-repo docs/architecture/ directory (MADR pattern) | Engineering-led teams; docs versioned with code; reviewed via PRs |
| Dedicated ADR repository | Teams that want ADRs prominently versioned and reviewable |
| Confluence with strict tagging | Enterprise teams; integrates with Jira |
| Notion with database structure | Mid-size teams; flexible, navigable |
| Backstage or similar developer portals | Scaled engineering orgs; integrates with service catalogs |
| Internal wiki (MkDocs, Docusaurus, GitBook) | Engineering-led documentation, published as a navigable site |
docs/architecture/decisions/ pattern (MADR — Markdown ADRs) has the strongest track record. Code and decisions live together; both are versioned; both get reviewed via PR.
Ownership and review
Each architecture document has an author (the person who writes it, usually whoever ran the discussion), reviewers (specific people whose technical review is required before the doc is accepted), and status owners (the people who maintain the doc as the system evolves — often the team that owns the related service). For ADRs: the review process should result in a clear Accepted or Rejected status. ADRs that stay in Proposed forever are functionally rejected — they don’t govern anyone’s work. Force closure.The four templates
Template A — System Design Document
For substantial designs: a new service, a major refactor, a system that warrants its own design doc.Template B — Architecture Decision Record
For a single decision. Smaller scope than an SDD; same rigor about reasoning.Template C — Sequence or data flow document
For documenting how requests, data, or control flow through the system. The artifact that answers “how does X actually work?” with specificity.Template D — Integration / API design
For documenting interfaces between systems. The audience includes the team(s) on the other side of the interface.Save them as workspace templates
Start with the format you need most
Most engineering teams start with Template B (ADR) since architectural decisions happen more often than full SDDs. Save ADR first; add SDD when you have a substantial system design coming up.
Tune to your team's conventions
ADR numbering, status field options, diagram tool choice — adjust to what your team uses. The template’s structure should match your existing patterns rather than introducing new ones.
Save with Workspace visibility
Architecture documentation is a team standard. Workspace visibility means every tech lead produces docs in the same shape. See Custom templates.
Running the workflow on a single meeting
Pre-seed the source meeting
Match the template to the meeting type. Substantial design review → SDD. Focused architectural debate → ADR. Technical deep-dive on how something works → sequence/data flow doc. Inter-system contract discussion → integration doc. For meetings that produce multiple artifacts, run multiple templates against the same source after the fact. See Before a meeting.
State the right things during the meeting
A few habits make the documentation noticeably sharper:
- Articulate alternatives explicitly. “We could do X, or Y, or Z.” Even if the team has converged, naming the alternatives out loud preserves them for the doc. Future readers learn from the alternatives more than from the chosen path.
- State trade-offs in terms of consequences. “If we go with X, we’re accepting a specific cost in exchange for a specific benefit.”
- Name decisions explicitly. “OK, we’ve decided to go with X.” Decisions that get made implicitly are harder for the model to identify cleanly.
- Use specific component / service names. “The auth service” and “the gateway” rather than “this thing” and “that part.”
- Walk through flows concretely. For sequence diagrams, narrate the actual flow at least once. The narration is what the diagram captures.
The 30-to-60-minute curation pass
For architecture docs, the curation is technical-rigor work, not voice work. The audience is engineers; accuracy, completeness, and technical clarity matter.
- Read the draft as an engineer who wasn’t in the meeting. Is the design clear? Could they implement against it?
- Verify technical accuracy. The model can misunderstand technical claims, especially around specific frameworks, libraries, or systems. Read carefully.
- Confirm alternatives and rejection reasoning. The model often captures alternatives but loses the reasoning for rejection. Strengthen this section — it’s where the doc earns long-term value.
- Add diagrams. Embed Mermaid where the model produced it; reference separately-created diagrams for richer cases (see the next section).
- Confirm code references are stable. File paths, function names, version references. Code moves; the doc should reference things that will resolve in six months.
- Add validation criteria. For ADRs especially, “how will we know if this was right?” often needs to be added — the meeting may not have surfaced it explicitly.
- Write the summary last. The model produces a summary; rewrite it after the rest of the doc is finalized so it reflects the final document.
Review and force a decision
Architecture docs go through technical review. The pattern: author publishes Proposed; reviewers comment; revisions; explicit decision — Accepted, Rejected, or Needs Major Revision; status updated.For in-repo ADRs, this often happens via PR. Force a decision; don’t let docs sit in “Proposed” indefinitely.
Cross-link and publish
Link from related code (often via
// See ADR-NNNN comments in code that materializes the decision); link from related ADRs/SDDs (forward and backward references); index in your team’s architecture directory; announce in the relevant engineering channel.This is what makes the doc findable when it’s needed.Multi-meeting synthesis and the ADR chain
Some architectural decisions emerge over multiple meetings — a design review surfaces options; a follow-up debate narrows them; a third session finalizes the choice. Earmark refines artifacts within a single meeting today; cross-meeting synthesis uses the standard manual workaround: tag the source meetings with a consistent identifier; paste the relevant artifacts from each into a Customize-context document; run the template against the assembled corpus. The output draws from all of them with attribution per section. The ADR chain. Architecture decisions build on each other. An ADR that says “we’ll use approach X” gets superseded a year later by an ADR that says “X didn’t work as expected; we’re moving to Y.” The chain matters. The convention:- Superseding ADRs reference the ADRs they replace explicitly
- Superseded ADRs get their status updated to “Superseded by ADR-NNNN”
- The original ADR is preserved (not deleted) — its reasoning is part of the team’s history
- The chain reads as a navigable record of the team’s evolving understanding
Diagrams: the special case
Architecture docs need diagrams. Diagrams are the part the model can partially produce and the part that often needs human authorship. What the model produces well. Mermaid is the default for in-doc diagrams. The model generates Mermaid syntax directly from the meeting transcript for sequence diagrams, class / entity diagrams (Mermaid or PlantUML), state diagrams, simple flowcharts, and ASCII-art component diagrams for simple architectures. The diagram renders in most documentation tools that support Mermaid (Notion, Confluence, GitHub markdown, GitLab, MkDocs). What requires human authorship. More complex diagrams typically need a separate tool: C4 architecture diagrams (Structurizr, Lucidchart, draw.io); multi-service architecture diagrams with significant visual styling (Excalidraw, Figma, Miro); deployment diagrams (infrastructure, regions, network); detailed data-flow diagrams with annotations; diagrams for executive or external audiences where polish matters. The workflow’s role is to extract the content of the diagram from the meeting (what components, what relationships, what flows); the human’s role is to render it visually. Keep diagrams current. Diagrams decay faster than text. A six-month-old diagram of a system that’s been refactored is worse than no diagram — it teaches a wrong model. Date every diagram. Re-verify during quarterly SDD audits. When a diagrammed flow changes materially, update the diagram in the same PR as the code change.Routing into systems of record
In-repodocs/architecture/. The MADR convention. ADRs as markdown files in docs/architecture/decisions/. Naming: 0001-decision-title.md. SDDs in a parallel docs/architecture/designs/ directory. Versioned with code; reviewable via PRs; engineers find docs where they already work. For most modern engineering teams, this is the right primary destination.
Architecture wiki / documentation site. For docs that span repositories or that need to be discoverable beyond engineering. The principle: docs that govern multiple repos live separately and link into the relevant repos. Don’t duplicate; cross-link.
Code-adjacent references. For decisions that materialize in specific code locations, add a comment:
Closing the loop
Architecture review cadence. For teams with active architectural change: bi-weekly or monthly review. New ADRs and SDDs reviewed in batch. Outstanding “Proposed” docs forced to decision. SDDs flagged for currency review. The cadence is what prevents docs from sitting in Proposed forever and prevents SDDs from quietly going stale. Post-implementation validation. For every ADR, the Validation section specified what to watch to know if the decision was right. Six months after implementation, the ADR owner revisits: Did the predicted positive consequences materialize? Did the predicted negative consequences materialize? Did unanticipated consequences emerge? Should the decision be revised? The result: either the ADR stands as validated, or a new ADR supersedes it. This habit is the single most underrated part of architecture documentation. Most teams write ADRs and never revisit them. The teams that do revisit get measurably better at making future decisions because they’re calibrating against real outcomes. Incident-driven updates. When an incident reveals an architectural gap or surfaces a misunderstood part of the system, the postmortem captures what was learned (use the structured meeting notes workflow); the relevant ADRs and SDDs get updated to reflect the new understanding; if the incident revealed a wrong architectural assumption, a new ADR captures the lesson. Without incident-driven updates, the docs and the real system gradually diverge.Common pitfalls
- ADRs without alternatives considered. The most common omission and the one that most degrades long-term value.
- ADRs without validation criteria. Without them, the ADR is a one-way document. Add them; revisit them.
- Stale SDDs. The system evolves; the SDD doesn’t. Within a year it describes a system that no longer exists. Quarterly currency reviews.
- Stale diagrams. Worse than no diagrams. Teach a wrong mental model. Date them; verify them; update them.
- Docs in “Proposed” forever. Force decisions. An ADR that never gets accepted is one that doesn’t govern anyone’s work but clutters the library.
- Inventing technical claims. The model can produce plausible-sounding technical content that’s wrong in subtle ways. The curation pass must verify technical accuracy.
- Skipping the consequences section. Decisions without articulated consequences are decisions whose costs are unclaimed.
- No code-level references. Architecture decisions implemented in code without code-level pointers to the ADR are decisions future engineers won’t discover. Add
See ADR-NNNNcomments. - One ADR for multiple decisions. ADRs are atomic — one decision per ADR. Bundling makes the artifact harder to supersede later and harder to reference precisely.
- Vague decision language. “We should consider using X” is not a decision. “We will use X for all new services starting Q3” is.
- Decisions made by committee, with no clear author. Architecture docs need a single author. Group authorship dilutes accountability.
- Heavyweight RFC processes that produce few RFCs. If your process takes weeks per doc, you’re documenting only the largest decisions. Lower the cost; document more decisions. ADRs are deliberately lighter weight for this reason.
- No connection to the rest of the engineering workflow. Architecture docs that aren’t linked from code, service catalogs, or related docs become orphaned. Cross-link aggressively.
- Forgetting the meeting source. Architecture docs without source-meeting links lose the deeper context. Always link.
- No post-implementation review. The team writes ADRs but never revisits them. Future decisions don’t benefit from past learning.
Where to go next
- Workflows — the general shape this is an instance of
- Meeting-to-tickets workflow — for the engineering work that flows from architectural decisions
- SOPs and playbooks workflow — for the operational procedures and runbooks that complement architecture docs
- Meeting-to-PRD workflow — for product specs that motivate architectural work
- Structured meeting notes workflow — for capturing postmortems and process-design meetings
- Cursor integration — for coded implementation of architectural decisions
- v0 integration — for UI components informed by architectural choices
- Codex integration — for engineering tasks shaped by architecture docs
- Custom templates — visibility, sharing, and edit permissions
- Composer — for tuning the prompt before saving as a workspace template
The three highest-leverage parts of this workflow are the Alternatives considered section that distinguishes ADRs that teach from ADRs that only describe; the Validation criteria that turn each ADR into a testable claim about how the future will unfold; and the post-implementation review cadence that converts the ADR library from one-way documentation into a feedback loop the team learns from. The first preserves design judgment, not only design conclusions. The second forces explicit success criteria. The third is what makes the team’s architecture-decision quality compound rather than plateau. Done well, this workflow makes the codebase’s design intent legible. Future engineers don’t have to reconstruct why decisions were made; they can read them. Architecture debates that previously took 90 minutes resolve in 30 seconds with a link. New hires ramp on the system meaningfully faster because the design history is navigable rather than oral. The team’s most expensive class of decisions — the architectural ones — accumulates into a durable asset rather than evaporating after each meeting. The deeper effect is that engineering culture shifts. A team operating with documented architectural reasoning argues from evidence rather than from authority. Junior engineers can engage with senior engineers’ decisions because the reasoning is visible. Disagreements get worked out on the merits because the merits are written down. The system’s architecture stays coherent over years not because anyone is enforcing coherence top-down, but because each new decision is made in the context of a navigable history of prior ones.

