ADR (Architecture Decision Record) : documenter des décisions utiles
Posté le 23 février 2026 • 7 min de lecture • 1 466 motsUn ADR n’est pas un document d’architecture de plus : c’est une note courte qui capture le contexte, la décision et ses conséquences. Bien utilisé, il évite les débats répétitifs, accélère l’alignement et rend les choix durables.

Les équipes techniques passent beaucoup de temps à discuter, arbitrer, choisir… puis à oublier pourquoi elles ont choisi certaines décisions.
Le résultat est connu :
Un ADR (Architecture Decision Record) sert à éviter cela. Ce n’est pas une “grosse doc d’architecture”, ni un cahier des charges : c’est une note courte qui capture une décision importante, avec le minimum de contexte pour qu’elle reste compréhensible et réutilisable.
Les ADR (Architecture Decision Records) sont devenus populaires grâce au billet de Michael Nygard, Documenting Architecture Decisions (15 novembre 2011), où il propose une approche volontairement légère : consigner une décision “architecturalement significative” avec juste assez de contexte pour qu’elle reste compréhensible dans le temps.
Le template souvent appelé “Nygard ADR” (Title / Status / Context / Decision / Consequences) vient directement de cette proposition et a été repris par la communauté comme format de référence.
En pratique, on peut dire que Nygard a surtout popularisé et standardisé une méthode simple pour garder la mémoire des décisions, ce qui explique pourquoi on le cite encore aujourd’hui quand on parle d’ADR.
Un ADR est un document (souvent 1 page max) qui répond à trois questions :
Le but n’est pas de produire un document “beau”. Le but est de rendre une décision :
Exemples typiques :
L’ADR n’est pas un système de contrôle. C’est un outil de mémoire pour les décisions qui comptent.
L’approche popularisée par Michael Nygard vise un format court.
Le contexte explique pourquoi ce sujet existe maintenant.
Il doit contenir juste assez d’informations pour qu’un lecteur futur comprenne les contraintes de l’époque.
Exemple :
“On déploie un service Go sur Kubernetes. Les builds CI prennent ~18 minutes. On veut réduire le temps de feedback sans perdre la reproductibilité ni augmenter fortement la complexité locale.”
La décision doit se lire en diagonale : courte, claire, sans ambiguïté.
Exemple :
“Nous adoptons un remote cache + une exécution ‘affected’ des tâches CI (option B) pour réduire le temps moyen de pipeline.”
Une décision a une vie. Le statut évite les ADR “fantômes”.
Exemple :
“Statut : Proposed (validation après PoC sur un service).”
C’est la partie “honnête”. On écrit ce qu’on gagne et ce qu’on accepte de perdre.
Exemple :
Le but n’est pas de prouver qu’on a “raison”.
Le but est de rendre visibles les options, et de documenter pourquoi elles ne passent pas les critères.
Exemple :
“Nous n’avons pas retenu Docker layer caching car il ajoute une dépendance forte à Docker en local et complexifie l’expérience développeur.”
Beaucoup d’équipes s’arrêtent à Contexte/Décision/Conséquences.
Ajouter 4–6 lignes transforme l’ADR en décision opérationnelle (sinon elle “dort”).
Les next steps doivent être : courts, assignés, vérifiables.
Exemple :
Un ADR échoue rarement parce que le format est mauvais. Il échoue parce que :
Voici des pratiques qui marchent.
Ne mélange pas “choix de DB” + “conventions de repo” + “format d’events” dans un seul doc.
Si tu dois faire ça, c’est souvent que tu as plusieurs décisions.
Le plus courant : un dossier docs/adr/ dans le repo.
Exemple de nommage :
docs/adr/0001-use-postgresql.mddocs/adr/0002-ci-remote-cache.mdLe numéro rend les références stables.
Une bonne routine :
Tu peux même demander : “si tu contestes, propose une alternative et une conséquence”.
Quand une décision change :
Superseded by ADR-00XX,Cette discipline évite les “docs contradictoires”.
# ADR-0002 — CI: Remote cache + affected tasks
Status: Accepted
Date: 2026-02-23
Owner: Hélène
## Context
Our Go services run on Kubernetes. CI pipelines average 18 minutes.
We want faster feedback without forcing Docker locally and without losing reproducibility.
## Decision
Adopt remote caching plus "affected-only" task execution for CI.
Scope: one service first, then extend to the monorepo if results are stable.
## Consequences
+ Faster feedback; fewer stalled PRs
+ Better scalability as the repo grows
- Initial setup complexity (cache backend, auth)
- Risk of incorrect cache hits → need safeguards and invalidation rules
## Alternatives considered
A) Standard CI cache: limited gains, inconsistent
C) Docker layer caching: adds local Docker dependency and friction
## Execution plan
- [ ] PoC on one service (Hélène, Friday)
- [ ] Measure before/after (avg, variance, failure rate)
- [ ] Write setup + invalidation rules (README)
- [ ] Rollout if gain > 30% and stable; rollback otherwise“On écrit des ADR pour tout”
“On écrit l’ADR après coup”
“L’ADR remplace la discussion”
“On ne sait pas si c’est encore vrai”
Status + Superseded et garde un index.Il faut mettre les ADR au service d’une équipe et non pas l’inverse.
Un bon signe que tes ADR fonctionnent :