Skip to content

Architecture Decision Record

A short structured document that captures a significant architectural decision, its context, and its consequences.

An ADR is a lightweight record of a decision that was hard to make and will be hard to change. Its value is not in the decision itself but in the reasoning: future engineers who encounter the system and wonder “why is it built this way?” have an answer that does not depend on institutional memory. An ADR is a gift to your future self and to everyone who inherits the codebase.

The canonical ADR structure is three sections: Context (what forces were at play), Decision (what was chosen and why), and Consequences (what the decision costs and what it enables). Context is not history - it is the live forces at the time of the decision that made this the right call. Consequences are not just the good ones - a good ADR honestly names the tradeoffs.

# [ADR-NNNN] [Decision Title]
## Status
[Proposed | Accepted | Deprecated | Superseded by ADR-NNNN]
## Context
[What forces were at play. The problem, the constraints, the alternatives considered.]
## Decision
[What was decided. Be specific. Name the choice, not just the category.]
## Consequences
### Positive
- [benefit]
### Negative
- [tradeoff or cost]
### Neutral
- [consequence that is neither good nor bad]

Recording architectural decisions, capturing technology choices, documenting tradeoffs for future maintainers, team alignment on significant choices.

Operational documentation, explaining how a system works, consumer-facing content.

pragmatic-architect, operator, candid, matter-of-fact, problem-solution, comparison-contrast

prd: A PRD defines what should be built and why. An ADR records a decision already made about how to build it.

Write as an Architecture Decision Record (ADR). Use the canonical three-section structure:
Context, Decision, Consequences. In Context: name the live forces at the time of decision - not
history, but the constraints, options, and pressures that made this choice necessary. In
Decision: name the specific choice, not just the category. In Consequences: be honest about the
tradeoffs - name the negative consequences alongside the positive. The Consequences section is
where ADRs earn their value. Do not omit the hard truths. Keep the document focused and short -
an ADR that requires a 20-minute read is too long.

See the Architecture Decision Record template.

Pragmatic Architect, Operator, Candid, Matter of Fact, Problem-Solution, Comparison-Contrast

Pastoral, Devotional Reflection, Reverent, Warm

Product Requirements Document

ADR-0014: Adopt Async-First Standup Format

Section titled “ADR-0014: Adopt Async-First Standup Format”

Accepted

The engineering team has grown from 6 to 11 engineers over 18 months. The team now spans four timezones: US Pacific (3 engineers), US Eastern (3 engineers), UK (2 engineers), India (3 engineers). The current synchronous standup is scheduled at 9am Pacific, which is 9:30pm India Standard Time.

Three forces pushed this decision:

Timezone asymmetry. The India-based engineers are disproportionately burdened by the meeting schedule. Attendance data from Q1 shows the three India engineers averaged 3.2 standup appearances per week out of 5, compared to 4.6 for US-based engineers. The shortfall is not disengagement - it is 9:30pm.

Information loss. Status shared verbally in the meeting does not persist. We have documented three incidents in the past quarter where an engineer spent more than an hour on a problem that had already been solved and discussed in a previous standup. There is no searchable record.

Meeting-to-value ratio. The standup averages 14 minutes. Analysis of the past month shows an average of 4.2 minutes of content that changed someone’s behavior - a blocker raised, a dependency flagged, a context shared. The remaining 10 minutes is status that required no response from anyone.

Alternatives considered: rotating the meeting time (solves equity but adds overhead and still does not create persistence), eliminating standup entirely (loses coordination value), and adopting an async tool like Geekbot (rejected on cost and added tooling complexity - Slack templates serve the same function).

Replace the synchronous daily standup with an async standup update in #team-standup. Engineers post by 10am their local time using a pinned template:

  • Shipped: what completed in the last 24 hours
  • In progress: current focus
  • Blocked / at risk: anything that needs attention, with @mention of the person who can resolve it

The on-call engineer reads the channel by 9am Pacific and responds to blocked items within 30 minutes during business hours. The synchronous standup slot is replaced with a 60-minute Thursday working session - not a status meeting, reserved for discussion requiring real-time exchange.

  • All engineers participate on a schedule that fits their timezone
  • Status information is persistent and searchable
  • Blocked items route directly to the person who can resolve them via @mention
  • Engineers recover 70 minutes per week previously spent in synchronous status reporting
  • Social cohesion that comes from shared daily presence is reduced; the Thursday session is a partial substitute but not equivalent
  • The format depends on consistent participation - if engineers stop posting, the channel’s value drops for everyone
  • Blockers that require nuance are harder to surface in a structured three-field template than in a live conversation
  • On-call rotation adds a daily channel-reading responsibility, but this replaces the meeting facilitation responsibility previously on the same rotation
  • The Thursday working session is new overhead for some engineers who previously skipped standup