Topic: madr adr template

MADR (Markdown ADR) Template Explained

MADR is the Markdown-Any-Decision-Record format — a structured, machine-readable evolution of Nygard's original ADR. Here's the 4.0 template, the YAML frontmatter, and a one-paragraph view of why MADR exists when "ADR" already does.

TL;DR

MADR adds YAML frontmatter with structured metadata (status, date, deciders, consulted, informed) on top of a Nygard-style body. The headings are slightly renamed (Decision Drivers instead of "Forces", Considered Options instead of "Alternatives") so tooling can parse them reliably. Use MADR when you want machine-readable ADRs — exporters, dashboards, audits.

The MADR 4.0 template

One file per decision, named NNNN-short-slug.md in docs/decisions/. The frontmatter is the part that distinguishes MADR from a free-form Markdown ADR; tooling depends on it being well-formed.

---
status: "accepted"
date: 2026-04-24
decision-makers: ["@your-handle", "@reviewer-1"]
consulted: ["@subject-matter-expert"]
informed: ["@team-channel"]
---

# Use Postgres over MongoDB for the v1 datastore

## Context and Problem Statement

What forces are at play? What problem are we trying to solve?
2-4 sentences of context — team size, scale assumptions, deadlines.
End with the question the decision answers.

## Decision Drivers

* <driver 1, e.g. "team has Postgres operational experience">
* <driver 2, e.g. "data is relational">
* <driver 3, e.g. "compliance requires point-in-time recovery">

## Considered Options

* Postgres
* MongoDB
* DynamoDB

## Decision Outcome

Chosen option: "Postgres", because it scores highest on the
decision drivers above and the team can operate it on day one.

### Consequences

* Good, because we get strict schemas and SQL.
* Good, because Postgres has mature replication tooling.
* Bad, because we lose the schema flexibility a document store offers.
* Neutral, because read performance is comparable for our workload.

### Confirmation

Reviewed at the next quarterly architecture sync; the migration plan
in PR #341 implements this decision.

## Pros and Cons of the Options

### Postgres
* Good, because relational with strong consistency
* Good, because team experience
* Bad, because vertical scale ceiling

### MongoDB
* Good, because flexible schemas
* Bad, because operational unfamiliarity
* Bad, because the v1 data model is genuinely relational

### DynamoDB
* Good, because zero-ops
* Bad, because vendor lock-in is a board-level concern
* Bad, because secondary-index limitations don't match our query patterns

## More Information

* Linked PR: #341
* Original chat: <ChatGPT / Claude conversation URL>
* Supersedes: —

The frontmatter fields, explained

FieldRequiredNotes
statusyesOne of: proposed, rejected, accepted, deprecated, superseded by [ADR-NNNN](nnnn-…md). Lowercase by convention; tooling matches case-sensitively.
dateyesISO 8601 (YYYY-MM-DD). The decision date, not the file-creation date.
decision-makersrecommendedYAML list of handles. The people who own the decision and would be the right reviewers if it's revisited.
consultedoptionalPeople whose opinion was sought. Useful for audit-trail clarity ("we did consult security").
informedoptionalPeople notified of the outcome. Often a channel name rather than individuals.

The consulted and informed fields come from the RACI taxonomy. They feel ceremonial in a 5-person team and become genuinely useful in a 50+ person org where "who knew about this" is an audit question.

MADR vs Nygard ADR — when to use which

ConcernNygard ADRMADR
FormatFree-form Markdown, 5 sectionsYAML frontmatter + structured Markdown body
Tooling friendlyLimited (regex-parseable headings)Yes (YAML is unambiguous)
Best forSmall teams, repo-only consumersLarger orgs, dashboards, exports, multi-team audits
Onboarding costAlmost zeroMild — readers learn the field names
250-word goalYesYes (longer in practice because of structured options)

If you're starting out, the Nygard Markdown ADR is enough. Migrate to MADR when you have a real reason — a compliance review that needs structured exports, an internal dashboard that wants to count decisions per team, an LLM context that needs predictable parsing. MADR's overhead pays for itself when something downstream actually depends on the structure.

How WhyChose helps

WhyChose can output decisions in either Nygard or MADR shape. The MADR exporter populates the frontmatter from your AI chat metadata: date from the conversation timestamp, decision-makers from the chat's participants, consulted blank for you to add, and the body sections filled from the conversation segment that produced the decision. The open-source extractor ships the JSON shape; the MADR rendering is a 60-line script in the README. Run it locally if you want extraction to stay inside your environment.

Get early access

Related questions

What does MADR stand for?

"Markdown Any Decision Record." The "any" is deliberate — the format is meant for non-architectural decisions too (product, ops, policy) where the structure still helps. In practice most usage is for architecture, hence the conflation with "ADR."

Is MADR an official standard?

It's an open spec maintained on GitHub at adr/madr, currently at version 4.0. Not a formal standards-body output, but widely adopted enough that most ADR tooling that promises "structured ADRs" means MADR. The spec is short and stable; breaking changes between major versions have been minor.

Can I mix MADR and plain Markdown ADRs in the same repo?

Technically yes; pragmatically no. Once tooling expects frontmatter, an unfrontmattered ADR breaks the parser silently. Pick one format per repo and stick with it. If you're migrating, do it in one PR with a script — partial migration is the worst of both worlds.

Further reading