📄 Documentation

docs-adr-writer

Rédaction d'Architecture Decision Records (ADR) pour documenter les choix d'architecture avec leur contexte, alternatives et conséquences.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- docs-adr-writer --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } docs-adr-writer -Launch"

🚀 Déjà installé ?

claude "/docs-adr-writer"

Ou tapez /docs-adr-writer dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

ADRarchitecture decision recorddécision d'architecturechoix techniquedocumenter une décisionpourquoi ce choix

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/docs-adr-writer ~/.claude/skills/

Payload du plugin : skills/docs-adr-writer · source éditable : docs/adr-writer

📖 Manuel

Rédacteur d'ADR (Architecture Decision Records)

Workflow en 5 étapes

1. Identifier si un ADR est nécessaire

SituationADR ?
Choix de framework, langage, runtimeOui
Choix de base de données ou brokerOui
Pattern d'architecture (CQRS, Event Sourcing, Saga)Oui
Migration d'infrastructure ou de cloudOui
Décision de sécurité (authN, authZ, chiffrement)Oui
Choix de librairie mineure ou utilitaireNon
Refactoring interne sans changement de contratNon
Convention de nommage ou style de codeNon (→ guideline)

2. Collecter le contexte

Répondre à ces questions avant d'écrire :

3. Lister les alternatives

Au minimum 2 alternatives réalistes (pas de straw man). Pour chaque option :

4. Rédiger l'ADR (voir template)

Règle d'or : une décision = un ADR. Numéroter séquentiellement (0001, 0002…).

5. Versionner et notifier

# Créer le fichier dans le bon dossier
docs/adr/NNNN-titre-kebab-case.md

# Committer avec un message explicite
git add docs/adr/NNNN-*.md
git commit -m "docs(adr): ADR-NNNN choix [sujet]"

# Mettre à jour l'index
docs/adr/README.md

Template ADR

# ADR-XXXX : [Titre de la décision]

**Date** : YYYY-MM-DD
**Statut** : Proposé | Accepté | Déprécié | Remplacé par ADR-YYYY
**Décideurs** : [Noms ou équipes]
**Tags** : [backend, infra, sécurité, data…]

## Contexte

[Quel est le problème ? Pourquoi maintenant ?
Contraintes : techniques, métier, équipe, budget, réglementation.]

## Décision

**Nous avons décidé de [choix] parce que [raison principale].**

[Détail de la décision en 2-4 phrases maximum.]

## Alternatives considérées

### Option A : [Nom]
- ✅ [Avantage 1]
- ❌ [Inconvénient 1]

### Option B : [Nom] ← **Retenue**
- ✅ [Avantage 1]
- ❌ [Inconvénient 1]

### Option C : [Nom]
- ✅ [Avantage 1]
- ❌ [Inconvénient 1]

## Conséquences

### Positives
- [Bénéfice concret attendu]

### Négatives / Trade-offs acceptés
- [Trade-off conscient]

### Risques et mitigations
- **Risque** : [description] → **Mitigation** : [action]

## Références
- [Ticket / RFC / discussion]
- [Documentation technique]
- [ADRs liés : ADR-XXXX]

Exemple concret : choix de message broker

# ADR-0012 : Utiliser RabbitMQ comme message broker

**Date** : 2026-01-15
**Statut** : Accepté
**Décideurs** : Équipe backend, Tech Lead
**Tags** : backend, messaging, microservices

## Contexte

Architecture microservices avec besoin de messaging asynchrone inter-services.
Volume actuel : ~50K messages/jour. Projection : 500K/jour dans 12 mois.
Contrainte équipe : expérience RabbitMQ existante, aucune sur Kafka.
Budget infra limité — pas d'opérateur Kafka dédié disponible.

## Décision

**Nous avons décidé d'utiliser RabbitMQ avec MassTransit parce que l'équipe
le maîtrise, le volume projeté reste dans ses capacités, et MassTransit
fournit les patterns saga/outbox sans développement custom.**

## Alternatives considérées

### Apache Kafka
- ✅ Hauts volumes (>1M msg/s), rétention durable, replay natif
- ❌ Courbe d'apprentissage élevée (KRaft, consumer groups, offset management)
- ❌ Surdimensionné et coûteux en ops pour notre volume

### RabbitMQ + MassTransit ← **Retenu**
- ✅ Équipe expérimentée, mise en prod rapide
- ✅ Patterns saga, outbox, retry out-of-the-box
- ❌ Pas de replay natif, moins performant >1M msg/s

### Azure Service Bus
- ✅ Service managé, zero ops
- ❌ Vendor lock-in Azure, coût élevé à volume

## Conséquences

### Positives
- Mise en production dans les 2 semaines (équipe déjà formée)
- Patterns saga et outbox via MassTransit sans code custom

### Négatives / Trade-offs acceptés
- Migration vers Kafka probable si dépassement des projections

### Risques et mitigations
- **Risque** : volume dépasse 1M msg/jour → **Mitigation** : ADR de migration
  à déclencher à 400K/jour (seuil d'alerte à configurer)

## Références
- https://masstransit.io/documentation/patterns
- ADR-0008 : Architecture microservices

Organisation des fichiers

docs/
└── adr/
    ├── README.md               # Index avec statut et lien de chaque ADR
    ├── template.md             # Template vierge
    ├── 0001-langage-csharp.md
    ├── 0002-microservices.md
    └── 0012-message-broker.md

Index README.md minimal :

# Architecture Decision Records

| N° | Titre | Statut | Date |
|----|-------|--------|------|
| [0001](0001-langage-csharp.md) | Utiliser C# comme langage principal | Accepté | 2024-03-01 |
| [0012](0012-message-broker.md) | RabbitMQ comme message broker | Accepté | 2026-01-15 |

Critères de décision : comment choisir entre les options

  1. Compétences équipe — une techno connue > une techno supérieure sur le papier.
  2. Coût opérationnel total — licences + ops + formation + migration future.
  3. Fit avec le scale cible — ne pas surdimensionner ; prévoir un seuil de révision.
  4. Réversibilité — préférer les décisions réversibles ; documenter le plan de sortie si irréversible.
  5. Contraintes réglementaires — souveraineté des données, conformité PCI/RGPD.
  6. Écosystème existant — cohérence avec les ADRs antérieurs et l'infra en place.

Garde-fous et anti-patterns

Anti-patternCorrection
ADR rédigé 3 mois après la décisionRédiger au moment de la décision, même si brouillon
Un seul ADR pour 5 décisionsUn ADR = une décision
Aucune alternative listéeMinimum 2 alternatives réalistes
Titre vague : "Choix infra"Titre précis : "Utiliser Kubernetes pour l'orchestration conteneurs"
Statut jamais mis à jourMettre "Remplacé par ADR-YYYY" dès qu'une décision est révisée
ADR suppriméJamais supprimer — marquer Déprécié ou Remplacé
Conséquences uniquement positivesDocumenter les trade-offs explicitement ; un ADR sans négatifs est suspect
Commentaires XML avec -- dans le titreSi l'ADR est embarqué en XML, éviter -- dans les balises

Bonnes pratiques 2026

# Installer adr-tools (Unix/macOS/WSL)
brew install adr-tools

# Initialiser
adr init docs/adr

# Créer un nouvel ADR
adr new "Utiliser PostgreSQL comme base principale"
# Génère : docs/adr/0001-utiliser-postgresql-comme-base-principale.md