Bonnes pratiques — Travailler efficacement avec un coding agent
Document de référence personnel pour démarrer un nouveau projet en collaboration avec Claude Code (ou tout autre coding agent). Synthèse de retours d'expérience et de patterns qui réduisent significativement la consommation de tokens et améliorent la qualité des livrables.
1. Principes fondamentaux
1.1 Le coût caché : la redécouverte
À chaque nouvelle conversation, un coding agent arrive avec zéro contexte sur ton projet. Sans préparation, il va : - Scanner ton arborescence - Lire des fichiers au hasard pour comprendre le stack - Re-déduire les conventions de code à partir d'exemples - Poser des questions auxquelles tu as déjà répondu 10 fois
Chacune de ces actions consomme des tokens. Sur la durée d'un projet, c'est le premier poste de gaspillage.
La règle d'or : ce qui est documenté à l'avance n'a pas besoin d'être redécouvert.
1.2 Le bon découpage : une session = une unité de travail
- Trop court (un prompt = un fichier) : tu perds en cohérence, les sessions ne voient pas la vision globale
- Trop long (une session = une phase entière) : le contexte gonfle, l'agent perd le focus, et un échec en milieu de phase pollue tout le reste
- Bon équilibre : une session = une story / une PR raisonnable. ~2-8 heures de travail humain équivalent.
1.3 La documentation comme code
Traiter la documentation projet avec la même rigueur que le code : - Versionnée dans le repo (Git) - Maintenue à jour au fil des livraisons - Avec une distinction claire entre vivant (source de vérité) et historique (archivé)
2. Structure de projet recommandée
mon-projet/
├── CLAUDE.md # Instructions pour le coding agent (racine)
├── README.md # Documentation humaine standard
├── docs/
│ ├── architecture/ # Specs vivantes
│ │ ├── overview.md
│ │ ├── data-model.md
│ │ └── ...
│ ├── decisions/ # ADRs (Architecture Decision Records)
│ │ ├── 001-choix-stack.md
│ │ ├── 002-pattern-X.md
│ │ └── ...
│ ├── progress.md # Journal des livraisons
│ ├── <phase-en-cours>/ # Tickets/specs de la phase active
│ └── archive/ # Specs historiques des phases livrées
│ └── <phase-livrée>/
└── src/
└── ...
3. Le fichier CLAUDE.md
C'est le fichier qui fait la différence. Claude Code le lit automatiquement au démarrage de chaque session.
3.1 Sections recommandées
# <Nom du projet>
## Vision
Une à deux phrases qui décrivent ce qu'est le projet et pour qui.
## Stack technique
- Langage / framework principal et version
- Base de données
- Outils de build / déploiement
- Choix techniques structurants (ex : monorepo, microservices, monolithe modulaire)
## Structure du repo
- `src/<projet-A>/` — description courte
- `src/<projet-B>/` — description courte
- `tests/` — où vivent les tests
- `docs/` — où vivent les specs
> Utilise des `Read` ciblés. Inutile de lister les dossiers en premier.
## Documentation
- Specs vivantes : `docs/architecture/`
- Décisions : `docs/decisions/`
- Progrès : `docs/progress.md`
- Phase active : `docs/<phase-name>/`
- ⚠️ `docs/archive/` contient des specs historiques, à ne PAS utiliser comme référence
## Conventions de code
- Style (ex : EditorConfig, Prettier, conventions de nommage)
- Patterns à respecter (ex : Repository, MediatR, ADR-driven)
- Patterns à éviter (ex : pas de logique métier dans les controllers)
- Politique de tests (couverture, types de tests obligatoires)
## Commandes courantes
```bash
# Build
<commande>
# Tests
<commande>
# Lancement local
<commande>
# Migration DB
<commande>
État du projet
Phases livrées :
- ✅ Phase A :
Pièges connus
- Toujours vérifier les versions des paquets au moment de l'ajout
Workflow de travail
- Lis le ticket cible dans
docs/<phase-active>/ - Lis
progress.mdpour les écarts récents - Propose un plan avant d'implémenter
- Implémente, teste, valide les critères d'acceptation
- Propose une mise à jour de
progress.mdà la fin
### 3.2 Ce qu'il NE faut PAS mettre
- Tout le détail des stories (elles sont dans `docs/`)
- L'historique du projet (il est dans `progress.md`)
- Des choses qui changent souvent (la liste des contributeurs, les versions exactes des paquets)
Le `CLAUDE.md` doit rester **stable et synthétique**. Si tu le modifies plus d'une fois par phase, c'est qu'il déborde.
---
## 4. Les ADRs (Architecture Decision Records)
### 4.1 Format minimal recommandé
```markdown
# ADR-XXX — <Titre court de la décision>
**Date** : YYYY-MM-DD
**Statut** : Accepté | Remplacé par ADR-YYY | Obsolète
## Contexte
2-4 phrases qui expliquent le problème à résoudre et pourquoi
il fallait choisir.
## Décision
La décision prise, en 1-3 phrases. Affirmative et claire.
## Conséquences
- Conséquence positive 1
- Conséquence positive 2
- Trade-off ou conséquence négative acceptée
- Ce que ça empêche / contraint pour la suite
4.2 Quand créer un ADR
À chaque fois que tu prends une décision qui : - Sera difficile à inverser plus tard - Va susciter des "pourquoi a-t-on fait ça ?" dans 3 mois - Touche un choix structurel (architecture, stockage, pattern, sécurité)
Pas pour : les choix de détail (nom de variable, structure de dossier intra-projet, micro-décisions).
4.3 Numérotation et fichiers
001-,002-,003-... append-only (jamais réutiliser un numéro)- Si une décision en remplace une autre : nouveau ADR avec statut "Accepté", l'ancien passe à "Remplacé par ADR-XXX"
- Garder les ADRs obsolètes en place — ils racontent l'évolution du raisonnement
5. Le journal progress.md
5.1 Pourquoi
C'est le pont entre l'intention (tickets) et la réalité (code). Sans lui, l'agent doit deviner les écarts en lisant le code, ce qui consomme énormément de tokens et reste imparfait.
5.2 Format
Append-only, une entrée par phase ou jalon livré :
## Phase X — <Titre> — Terminée le YYYY-MM-DD
Stories livrées : X-01, X-02, X-03.
### Décisions d'implémentation
- <Décision concrète prise pendant l'implémentation, non triviale>
- <Autre décision>
### Écarts vs tickets
- Story X-02 : <ce qui a été fait différemment et pourquoi>
- <Autre écart>
### Fichiers clés créés ou modifiés
- `src/path/to/important-file.cs`
- `docs/decisions/00X-decision.md` (nouveau ADR créé)
### Notes pour la suite
- <Point d'attention pour la phase suivante>
- <Dette technique consciente, à traiter plus tard>
5.3 Discipline
À mettre à jour à la fin de chaque session productive, pas une fois tous les 36 du mois. C'est ce qui permet à la session suivante de démarrer en 50 tokens au lieu de 5000.
6. Découpage du travail en phases et tickets
6.1 Granularité d'une phase
Une phase = un livrable qui apporte de la valeur testable de bout en bout.
Mauvais exemple : "Phase 1 : modèle de données" (pas testable seul).
Bon exemple : "Phase 1 : Squelette de communication agent ↔ serveur" (on peut valider que la mécanique fonctionne, même sans logique métier).
Estimation cible : 1 à 3 semaines de travail part-time. Au-delà, redécouper.
6.2 Granularité d'une story
Une story = une PR raisonnable. Quelques heures à un jour de travail effectif.
Tests d'une bonne granularité : - Tu peux la décrire en 1 phrase - Elle a 3-7 critères d'acceptation - Elle bloque ou est bloquée par 0 à 3 autres stories - Elle ne mélange pas plusieurs préoccupations (ex : "Implémenter X et son UI" → 2 stories)
6.3 Format de ticket pour coding agent
# Story X-NN — <Titre>
| Champ | Valeur |
|---|---|
| Type | Story |
| Phase | <lettre> |
| Estimate | <points> |
## Description
Contexte court : pourquoi cette story existe.
## Tâches
Liste ordonnée et concrète. Pas de "réfléchir à", uniquement des actions vérifiables.
- Créer le fichier X
- Implémenter la méthode Y avec la signature Z
- Ajouter les tests T1, T2, T3
## Critères d'acceptation
- ✅ <Critère vérifiable de manière objective>
- ✅ <Autre critère>
## Dépendances
- Bloqué par : X-NN
- Bloque : X-MM
## Points de vigilance
Ce qui peut mal se passer ou ce qui est facile à oublier.
L'agent peut implémenter directement sans poser 10 questions de clarification.
7. Workflow de session
7.1 Démarrage d'une session
Prompt minimal recommandé :
Story à implémenter : `docs/<phase>/<story>.md`
État : phases A, B, C livrées (voir progress.md). Story en cours : <X-NN>.
Procède : lis le ticket, propose ton plan d'attaque, implémente, lance les tests.
C'est tout. Le CLAUDE.md fait le reste.
7.2 Pendant la session
- Laisse l'agent travailler par lots, mais valide les choix architecturaux significatifs avant qu'il code 500 lignes dans la mauvaise direction
- Si tu fais un écart vs le ticket, dis-le explicitement ("On va faire X au lieu de Y, parce que Z") pour que ce soit ajouté à
progress.md - Refuse les sessions qui dérivent : si à mi-chemin tu réalises que la story n'est pas la bonne, arrête, redécoupe, recommence proprement
7.3 Fin de session
Demander explicitement à l'agent :
Avant de terminer :
1. Récapitule ce qui a été fait
2. Liste les écarts vs le ticket (s'il y en a)
3. Propose une mise à jour de progress.md
4. Liste les éventuels nouveaux ADRs à créer
Tu valides, tu commits, tu fermes la session.
8. Cycle de vie de la documentation
8.1 Pendant une phase active
docs/
├── architecture/ # vivant
├── decisions/ # vivant, append-only
├── progress.md # vivant
└── <phase-active>/ # vivant, c'est le workspace
├── README.md
├── epic-*.md
└── *-story-*.md
8.2 À la livraison d'une phase
Étape 1 — Promotion
Avant d'archiver, extraire ce qui mérite de vivre :
- Schémas de données → docs/architecture/data-model.md
- Diagrammes d'architecture → docs/architecture/
- Décisions structurelles → nouveaux ADRs dans docs/decisions/
- Contrats d'API → docs/architecture/api-contract.md ou pointeur vers le fichier source
Étape 2 — Archivage
docs/
├── archive/
│ └── <phase-livrée>/
│ ├── README.md ← warning : "ne pas utiliser comme spec courante"
│ └── (anciens tickets)
Étape 3 — Mise à jour CLAUDE.md
- Section "État du projet" : marquer la phase comme livrée
- Pointeur vers la nouvelle phase active
- Vérifier que le warning sur
docs/archive/est toujours présent
8.3 À la fin du projet
Soit :
- Tout est en production stable → docs/archive/ peut tout absorber, docs/architecture/ reste comme référence
- Le projet est abandonné → garder l'archive complète pour valeur historique
Ne jamais supprimer purement et simplement les anciennes specs. Elles ne coûtent rien en stockage et peuvent rendre service.
9. Optimisations spécifiques à Claude Code
9.1 Préempter les exploration coûteuses
Dans CLAUDE.md, lister explicitement la structure du repo évite que l'agent fasse tree ou find au démarrage. Économie typique : quelques milliers de tokens par session.
9.2 Référencer, ne pas copier
Au lieu de copier le contenu d'un ticket dans le prompt :
❌ Voici le ticket : [paste de 800 lignes]
✅ Implémente la story 'docs/phase-c/C-02.md'
L'agent lit le fichier lui-même. Tu économises les tokens du copy-paste, et l'agent voit le ticket dans son contexte naturel (à côté des autres tickets, qu'il peut consulter si besoin).
9.3 Sessions courtes et ciblées
Une nouvelle conversation est gratuite (pas de token consommé pour démarrer). Ce qui coûte, c'est le contexte accumulé. Donc :
- Démarre une nouvelle session pour chaque story
- Ne crains pas de "perdre" le contexte — il est dans CLAUDE.md et progress.md
- Une session qui dérive ou qui bug : tue-la, relance proprement
9.4 Demander des plans avant l'implémentation
Pour les stories complexes :
Lis le ticket. Avant d'écrire le moindre code, propose-moi :
1. Les fichiers que tu vas créer/modifier
2. Les choix d'implémentation principaux
3. Les éventuelles ambiguïtés du ticket à lever
J'attends ton plan avant que tu commences à coder.
Coût : faible (l'agent réfléchit, mais c'est court). Bénéfice : tu évites une implémentation à jeter.
9.5 Capacités natives à exploiter
Readciblé sur les bons fichiers (leCLAUDE.mdaide à pointer vers les bons fichiers)Grepplutôt que lecture intégrale quand on cherche un patternEditplutôt queWritequand on modifie un fichier existant- Lancement de tests par l'agent lui-même pour valider avant de rendre
Si tu vois l'agent lire 15 fichiers pour rien, ton CLAUDE.md ou tes specs ont un trou. C'est un signal.
10. Checklist de démarrage d'un nouveau projet
À faire avant d'écrire la première ligne de code avec un coding agent :
- [ ] Créer le repo Git
- [ ] Rédiger un
CLAUDE.mdinitial (sections : vision, stack, structure prévue, conventions, commandes, workflow) - [ ] Créer la structure
docs/:architecture/,decisions/,progress.md - [ ] Rédiger un plan macro du projet (phases, jalons, vision long terme) dans
docs/architecture/overview.md - [ ] Identifier la première phase, créer son dossier
docs/<phase-1>/ - [ ] Découper la première phase en stories avec critères d'acceptation
- [ ] Créer les premiers ADRs pour les choix de stack et patterns structurants
- [ ] Premier commit "Initial documentation scaffold"
À ce stade, tu es prêt à démarrer la première session de coding avec un prompt court et un agent qui sait exactement où il met les pieds.
11. Anti-patterns à éviter
| Anti-pattern | Pourquoi c'est un problème | Quoi faire à la place |
|---|---|---|
| Tout coller dans le prompt | Tokens gaspillés à chaque session | Référencer les fichiers du repo |
Pas de CLAUDE.md |
L'agent redécouvre tout à chaque session | Le créer avant la première session |
| Sessions infinies | Contexte qui gonfle, dérive, perte de focus | Une session = une story |
| Tickets vagues | L'agent pose 10 questions ou part dans une direction | Critères d'acceptation explicites |
| Ne pas archiver les specs livrées | Confusion entre intention passée et réalité | Workflow d'archivage à la livraison |
Pas de progress.md |
Les écarts sont invisibles, l'agent les redécouvre | Mise à jour à chaque fin de session |
| ADRs trop longs | Personne ne les lit (ni toi ni l'agent) | Format court : contexte / décision / conséquences |
| Documenter en post-coup | Les détails sont oubliés, la qualité chute | Documenter pendant l'implémentation |
12. Mantra final
Documenter pour ne plus avoir à expliquer.
Chaque minute passée à structurer ta documentation projet est rendue au centuple en sessions plus courtes, plus précises, et moins coûteuses en tokens. Ce qui est dans CLAUDE.md, progress.md et docs/decisions/ n'a pas besoin d'être réexpliqué — ni à l'agent, ni à toi-même dans 6 mois, ni à un collègue qui rejoint le projet.
C'est le même investissement que faire des tests : douloureux à démarrer, payant sur la durée.