Use Markdown Architectural Decision Records

ADR

1

author

matmair

status

proposed

created

2025-04-21

decided

2025-04-21

date

2025-04-21

type

governance

Context and Problem Statement

We want to record architectural decisions made in this project independent whether decisions concern the architecture (“architectural decision record”), the code, the design, the governance of the project, the ecosystem or other fields. Which format and structure should these records follow?

Considered Options

  • MADR 4.0.0 – The Markdown Architectural Decision Records

  • IEEE 42010 – Recommended Practice for Architectural Description of Software-Intensive Systems

  • Y-Statements

Decision Outcome

Chosen option: “MADR 4.0.0”, because

  • Implicit assumptions should be made explicit. Design documentation is important to enable people understanding the decisions later on. See also “A rational design process: How and why to fake it”.

  • The MADR format is lean and fits our general docs style.

  • MADR seems to have wide(ish) adoption

The fontmatter header is adjusted similar to DEPs.

Structure

Decision records should be stored in the docs/adr directory. The file name should be the decision number and a short description of the decision. The file name should be in lowercase and use hyphens to separate words. The file name should not contain spaces or special characters.

In the header of the file should be frontmatter with the following fields.

Name

Options

Description

ADR

number of the ADR, e.g., 0001

The number of the ADR. This should be a unique number for each ADR.

author

GitHub user name

The author of the ADR. This should be a reference to the author, e.g., the name and GitHub user name.

status

proposed, rejected, accepted, deprecated, superseded by ADR-***

The status of the ADR. See the details below

created

YYYY-MM-DD

The date when the ADR was proposed. This should be in ISO 8601 format

decided

YYYY-MM-DD

The date when the ADR was decided on. This should be in ISO 8601 format.

date

YYYY-MM-DD

The date when the ADR was last updated. This should be in ISO 8601 format.

type

architecture, design, code, governance, ecosystem

The type of the ADR. This should be a short description of the type of the ADR.

Status Lifecycle

Status

Description

proposed

The ADR is proposed and not yet accepted.

accepted

The ADR is accepted and implemented.

rejected

The ADR is rejected and not implemented.

deprecated

The ADR is deprecated and not implemented.

superseded by ADR-***

The ADR is superseded by another ADR. This should be a reference to the other ADR.

Types

Type

Description

architecture

The ADR is an architectural decision. This might be related to deployment, general components or intended usage

design

The ADR is a design decision. This relates to the appearance and UX of InvenTree components

code

The ADR is a code decision. This regards specific programming patterns or style decisions

governance

The ADR is a governance decision. This regards how project internal processes work

ecosystem

The ADR is an ecosystem decision.