Files
apf_portal/docs/decisions/0001-use-adrs-to-record-architectural-decisions.md
Julien Gautier 0e58e32d29 chore: relocate ADRs from decisions/ to docs/decisions/ to consolidate documentation
Move the ADR folder under docs/ alongside the rest of the project
documentation. Convention (flat folder, globally-sequential 4-digit
numbering, tags-based categorization, MADR 4.0.0 format) is unchanged
- only the path moved.

- git mv decisions docs/decisions preserves history for all 18 ADRs +
  README + template (19 files renamed in this commit).
- ADR-0001 amended in-place with a dated note documenting the
  relocation. Status remains 'accepted' - the location detail
  changed, the decision did not.
- All cross-references updated:
  - CLAUDE.md (~17 ADR links + 3 mentions of decisions/ in the Project
    rules section)
  - docs/README.md (now references decisions/ as a sibling under docs/)
  - docs/setup/03-angular-nx-monorepo.md (paths shortened from
    ../../decisions/ to ../decisions/, since setup/ and decisions/ are
    now both inside docs/)
  - docs/decisions/0003 ../CLAUDE.md adjusted to ../../CLAUDE.md
    (one extra level of nesting)
  - docs/decisions/template.md mention of the README path
  - notes/asvs-level-decision-briefing-rssi.md mention of the index

Sanity verified: every ADR link in CLAUDE.md, docs/setup/03, and
docs/decisions/0001 resolves to an existing file. pnpm nx run-many
-t lint passes on 8 projects.
2026-04-30 18:57:59 +02:00

3.8 KiB

status, date, decision-makers, tags
status date decision-makers tags
accepted 2026-04-29 R&D Lead
process

Use ADRs to record architectural decisions

Context and Problem Statement

Architecturally-significant decisions will be taken throughout the lifecycle of apf-portal. Without a written, durable trace of why a decision was made — context, drivers, alternatives, trade-offs — that knowledge fades within months. New contributors re-litigate settled debates, the rationale of constraints (security, performance, accessibility) gets lost, and reversing a choice later becomes risky because nobody remembers what it was protecting against.

How do we record decisions in a way that is light enough to be sustained, durable enough to outlive contributor turnover, and integrated into the development workflow?

Decision Drivers

  • Preserve the why of each decision so future contributors can understand or revisit it without re-deriving it.
  • Make architecture reviewable — both at the time of a decision and during retrospective audits.
  • Keep the format light enough that writing an ADR isn't a bureaucratic deterrent.
  • Live alongside the code in version control, so decisions evolve with what they govern.
  • Match the project's stated values: high technical bar, no bricolage, security/performance/accessibility as first-class concerns whose rationale must be traceable.

Considered Options

  • No formal records — rely on commit messages and tribal knowledge.
  • External wiki / Confluence — decisions live outside the codebase.
  • ADRs in markdown using the MADR 4.0.0 format, in-repo.
  • ADRs in another format (Nygard, Y-Statement, Cockburn).

Decision Outcome

Chosen option: ADRs in markdown using MADR 4.0.0, stored under docs/decisions/ so they sit with the rest of the project documentation.

Amended on 2026-04-30 — ADRs were originally located at decisions/ at the repository root (this ADR was written that way). On 2026-04-30 the folder was relocated to docs/decisions/ to consolidate documentation under docs/. The relocation preserves git history (git mv) and the flat-folder + globally-sequential-numbering + tags conventions are unchanged; only the path moved.

Conventions are defined in README.md:

  • flat folder layout (no nested category folders);
  • globally sequential 4-digit numeric prefix (NNNN-kebab-title.md);
  • categorization via the tags: field in the MADR frontmatter, drawn from a canonical vocabulary;
  • status lifecycle: proposedaccepted → optionally deprecated / superseded by ADR-NNNN;
  • index maintained in README.md alongside any ADR change.

Consequences

  • Good, because the why of every architecturally-significant decision is captured at the moment it is made and travels with the code.
  • Good, because ADRs are reviewed via the normal pull-request flow — architecture becomes an explicit team conversation.
  • Good, because MADR provides enough structure (drivers, options, trade-offs) without being heavy.
  • Good, because flat-folder + tags scales better than nested category folders as the count grows.
  • Bad, because writing an ADR adds friction; this must be balanced against the cost of not writing one.
  • Bad, because the index is maintained manually until tooling or a CI check is added.

Confirmation

  • Every change introducing or transitioning the status of an ADR updates the index table in README.md in the same commit.
  • PR review explicitly checks for ADR proposal whenever a non-trivial decision is being introduced.
  • (Future) A CI lint job validates filename pattern, frontmatter shape, and tag vocabulary.

More Information