Florete

0001: Record ADRs

Status

Accepted

Context

Architectural decisions in fast-moving projects are often made implicitly, discussed in chats or PRs, and forgotten. This creates friction for new contributors, inconsistent implementation across modules, and loss of institutional knowledge when team members change.

We need a lightweight, searchable, and versioned way to capture why key architectural choices were made — not just what was built.

Decision

All significant architectural decisions in the Florete project will be documented as Architecture Decision Records (ADRs) using the project template.

The document title should begin with a verb in the infinitive form: it should answer the question "what to do?", i.e., what decision was made. To reference Architecture decisions, use the form ADR-XXXX: Title with a link if necessary. For example:

[ADR-0001: Record ADRs](https://florete.tech/docs/contributing/adr/0001-record-adrs/)

ADR Statuses

  • Proposed - Under discussion
  • Accepted - Decision made and implemented
  • Rejected - Decision was considered and rejected (next paragraph in this ADR must refer to the reason for rejection)
  • Obsoleted by [ADR-XXXX: Title](link) - Updated or replaced by newer ADR

How Statuses Are Assigned

For straightforward decisions with clear consensus, ADRs may be submitted directly with Accepted status. If a decision requires extended community discussion or experimentation, start with Proposed and update to Accepted once resolved. When a newer ADR supersedes an existing one, update the older record's status to Obsoleted by [ADR-XXXX: Title](link) to maintain a clear decision lineage.

Rationale

Why ADRs? The ADR practice, introduced by Michael Nygard1, provides a minimal, git-friendly format for documenting architectural rationale. It balances rigor with maintainability — critical for open-source projects where context must travel with code.

Why this template? We started with Nygard's original template2 but found that real-world use cases required two additions:

  • An explicit Rationale section to compare alternatives
  • An explictit section for external references: we add it via Markdown footnotes3, which auto-generate a clean "Footnotes" section on render

We evaluated other templates45, but most were either too verbose or lacked fields we needed. This custom template reflects our team's experience and can evolve via future ADRs if requirements change.

Consequences

Benefits:

  • Reduces ambiguity and rework by making decision rationale explicit
  • Helps contributors understand why the system is structured in a certain way
  • Creates a reusable knowledge base for future architectural discussions
  • Enables consistent style across independently owned components

Trade-offs:

  • Slightly higher overhead to propose changes (requires documentation + review)
  • Requires discipline to keep ADRs updated as the system evolves

We believe the long-term maintainability and onboarding benefits significantly outweigh the initial friction.

Footnotes

  1. Michael Nygard (November 2011). "Documenting Architecture Decisions"

  2. Decision record template by Michael Nygard

  3. Markdown footnotes

  4. Decision record template by ClearCove Software

  5. Milad Afkhami (July 2023). "What Is an ADR (Architecture Decision Record) Document?"

On this page