Aller au contenu
Documentation medium

Reviews et fraîcheur : garder la documentation à jour

17 min de lecture

Imaginez la scène. 3h du matin, une alerte critique. L’ingénieur d’astreinte ouvre le runbook « Redémarrage API principale ». Il suit les étapes… et rien ne fonctionne. Le service a été migré il y a 6 mois, les commandes pointent vers des serveurs qui n’existent plus. Résultat : 2 heures de galère au lieu de 15 minutes.

Ce scénario arrive tous les jours dans des équipes qui n’ont pas de processus de review documentaire. Ce guide vous apprend à l’éviter.

Une documentation obsolète est pire qu’une absence de documentation. Pourquoi ? Parce qu’elle donne une fausse confiance. L’opérateur suit une procédure qui ne fonctionne plus, perd du temps, aggrave parfois la situation.

Sans processus de maintenance actif, voici ce qui se passe :

Cycle de dégradation vs cycle maintenu

La ligne du haut montre la dégradation naturelle :

  1. Mois 1 : Documentation créée, testée, parfaite ✓
  2. Mois 3-6 : Petits changements de configuration (non documentés)
  3. Mois 9-12 : Migration majeure, document complètement obsolète ✗

La ligne du bas montre le cycle avec reviews régulières :

  1. Mois 1 : Documentation créée ✓
  2. Mois 3 : Review planifiée → corrections mineures 🔍
  3. Mois 6 : Document toujours fiable ✓

Imaginez votre réfrigérateur à la maison :

SituationSans vérificationAvec vérification hebdo
Yaourt périméDécouvert après 3 mois, moisiConsommé ou jeté à temps
Reste oubliéDéveloppe des formes de vie inconnuesIdentifié et traité rapidement
OrganisationChaos, impossible de trouver quoi que ce soitRangé, accessible

La documentation, c’est pareil. Vous devez ouvrir le frigo régulièrement pour vérifier ce qui est encore bon et ce qui doit partir.

Pour qu’une documentation soit vraiment utile, elle doit répondre à cinq critères. Utilisez cette grille lors de vos reviews :

QualitéQuestion à poserConséquence si « non »
ExacteLes informations sont-elles correctes ?Erreurs, incidents aggravés
ComplèteManque-t-il des étapes ?Procédure impossible à terminer
ActuelleReflète-t-elle l’état actuel du système ?Confusion, perte de temps
AccessiblePeut-on la trouver facilement ?Documentation inutilisée
TestéeQuelqu’un l’a-t-il suivie récemment ?Bugs cachés, étapes manquantes

Tous les documents n’ont pas besoin de la même fréquence de vérification. Un runbook utilisé en situation d’urgence mérite plus d’attention qu’un document historique.

Documents critiques — review mensuelle

TypePourquoi cette fréquence
Runbook incident critiqueUtilisé en urgence, doit être parfait
Procédure de sécuritéContexte de menace évolue vite
Checklist déploiementPipeline change régulièrement

Ces documents peuvent faire la différence entre un incident résolu en 15 minutes et une crise de plusieurs heures.

Voici un calendrier type pour une équipe moyenne :

JANVIER : Review runbooks critiques (semaine 2)
FÉVRIER : —
MARS : Review Service Overviews (semaine 1)
AVRIL : Review runbooks critiques (semaine 2)
MAI : —
JUIN : Review complète : runbooks ops + Service Overviews (semaine 1)
JUILLET : Review runbooks critiques (semaine 2)
AOÛT : —
SEPTEMBRE : Review Service Overviews (semaine 1)
OCTOBRE : Review runbooks critiques + ADRs annuels (semaine 2)
NOVEMBRE : —
DÉCEMBRE : Review annuelle complète - tout le corpus (semaine 1)

Une review ne consiste pas à survoler le document en 30 secondes. C’est un processus structuré en plusieurs étapes.

Processus de review en 4 étapes

  1. Identifier les documents à reviewer

    Commencez par établir la liste des documents concernés :

    • Filtrez par date de dernière review
    • Priorisez les documents critiques
    • Vérifiez les signalements utilisateurs (« Ce doc m’a posé problème »)
    Fenêtre de terminal
    # Exemple : trouver les docs non reviewées depuis 90 jours
    find docs/ -name "*.md" -exec grep -l "last_reviewed:" {} \; | while read f; do
    last=$(grep "last_reviewed:" "$f" | cut -d' ' -f2)
    days=$(( ($(date +%s) - $(date -d "$last" +%s)) / 86400 ))
    [ $days -gt 90 ] && echo "⚠️ $f : $days jours"
    done
  2. Vérifier les métadonnées

    Avant de plonger dans le contenu, validez les informations de base :

    ÉlémentQuestionAction si problème
    Date de mise à jourRéaliste ?Investiguer l’historique git
    OwnerToujours dans l’équipe ?Réassigner
    Liens internesFonctionnent-ils tous ?Corriger ou supprimer
    Tags/catégoriesToujours pertinents ?Mettre à jour
  3. Valider le contenu technique

    C’est l’étape la plus importante. Vérifiez :

    • Commandes : fonctionnent-elles toujours ?
    • Chemins : les fichiers/dossiers existent-ils ?
    • Captures d’écran : reflètent-elles l’interface actuelle ?
    • Versions : les numéros de version sont-ils à jour ?
  4. Décider et documenter

    À l’issue de la review, trois options :

    DécisionQuandAction
    OKDocument correctMettre à jour last_reviewed
    À mettre à jourCorrections nécessairesCréer ticket, deadline 48h
    À archiverDocument obsolèteDéplacer vers /archives/

    Documentez systématiquement la review :

    <!-- Review: 2025-01-15 par @alice - OK, liens vérifiés, commandes testées -->

Les reviews manuelles sont indispensables, mais l’automatisation peut vous aider à identifier les documents qui nécessitent une attention particulière.

Standardisez vos frontmatters pour faciliter l’automatisation :

---
title: "Runbook : Redémarrage API principale"
last_updated: 2025-01-15
last_reviewed: 2025-01-15
review_frequency: monthly # monthly | quarterly | yearly | never
owner: "@alice"
criticality: high # high | medium | low
---

Intégrez la vérification dans votre pipeline CI/CD :

check-doc-freshness.sh
#!/bin/bash
EXIT_CODE=0
find docs/ -name "*.md" | while read -r file; do
# Extraire les métadonnées
last_review=$(grep "last_reviewed:" "$file" | cut -d' ' -f2)
frequency=$(grep "review_frequency:" "$file" | cut -d' ' -f2)
# Calculer les jours depuis dernière review
if [ -n "$last_review" ]; then
days=$(( ($(date +%s) - $(date -d "$last_review" +%s)) / 86400 ))
# Seuils selon fréquence
case "$frequency" in
monthly) threshold=45 ;;
quarterly) threshold=120 ;;
yearly) threshold=400 ;;
*) threshold=90 ;;
esac
if [ "$days" -gt "$threshold" ]; then
echo "::warning file=$file::Review en retard ($days jours)"
EXIT_CODE=1
fi
else
echo "::warning file=$file::Pas de date de review"
fi
done
exit $EXIT_CODE

Configurez des notifications quand :

ÉvénementCanal recommandéDestinataire
Doc non reviewée depuis > seuilSlack / EmailOwner du document
Owner a quitté l’équipeTicket JIRAManager / Tech Lead
Lien cassé détectéSlackÉquipe documentation
Aucun owner définiTicketProduct Owner

Après chaque incident, la documentation doit être revue systématiquement. C’est le moment idéal pour détecter les écarts entre la théorie (la doc) et la pratique (ce qui a vraiment fonctionné).

Lors du débrief post-incident, posez ces questions :

  • Le runbook utilisé était-il à jour ?
  • Manquait-il des étapes cruciales ?
  • Y avait-il des erreurs dans les commandes ?
  • A-t-on découvert une nouvelle procédure à documenter ?
  • Le Service Overview reflète-t-il la réalité ?
  • L’ordre des étapes était-il optimal ?

Quand une documentation devient obsolète (service décommissionné, procédure abandonnée), ne la supprimez pas. Archivez-la.

RaisonExplication
Historique préservéComprendre pourquoi certaines décisions ont été prises
Référence futureLe sujet peut revenir (migration inverse, audit)
Audit trailProuver que la procédure existait à une date donnée
FormationMontrer l’évolution des pratiques aux nouveaux
docs/
├── actifs/ ← Documentation vivante
│ ├── services/
│ ├── runbooks/
│ └── onboarding/
└── archives/ ← Documentation figée
├── 2023/
│ └── api-v1-runbook.md
├── 2024/
│ └── ancien-monitoring.md
└── 2025/

Ajoutez un bandeau visible en haut de chaque document archivé :

:::caution[Document archivé]
Ce document n'est plus maintenu.
**Raison** : Service décommissionné le 2025-01-15.
**Pour référence historique uniquement.**
:::

Ce qui se mesure s’améliore. Voici les métriques clés à suivre :

MétriqueCibleSeuil d’alerteComment mesurer
% docs reviewées dans les temps> 90%< 80%Script CI hebdomadaire
Âge moyen depuis dernière review< 90 jours> 180 joursDashboard automatisé
Docs modifiées après incident100% des cas< 80%Checklist postmortem
Liens cassés0> 0Linter automatique
Docs sans date de review0> 5%Script CI
Docs sans owner0> 0Rapport mensuel
┌─────────────────────────────────────────────────────────────┐
│ 📊 SANTÉ DOCUMENTAIRE - Janvier 2025 │
├─────────────────────────────────────────────────────────────┤
│ Documents à jour : ████████████████████░░ 85% ⚠️ │
│ Reviews ce mois : 12 / 15 planifiées │
│ Âge moyen : 67 jours ✓ │
│ Liens cassés : 3 ⚠️ (voir ticket #1234) │
│ Docs sans owner : 1 ⚠️ (runbook-legacy) │
└─────────────────────────────────────────────────────────────┘
Anti-patternProblèmeSolution
« On reviewera quand on aura le temps »Le temps n’arrive jamaisBloquer des créneaux fixes au calendrier
Review = « ça a l’air bon »Aucune vraie vérificationChecklist obligatoire + test réel
Supprimer les vieilles docsPerte d’historiqueArchiver avec bandeau explicatif
Pas de date de reviewImpossible de savoir l’étatFrontmatter obligatoire en CI
Review par l’auteur seulBiais de confirmationToujours une review croisée
Ignorer les retours utilisateursProblèmes récurrentsCanal de feedback + suivi

La dégradation est naturelle

Sans maintenance active, toute documentation devient obsolète. Ce n’est pas un échec, c’est une loi de la nature.

Planifiez les reviews

Ce qui n’est pas au calendrier n’arrive pas. Bloquez du temps dédié.

Automatisez la détection

Scripts CI, alertes Slack, dashboards : laissez les machines vous alerter des problèmes.

Archivez, ne supprimez pas

L’historique a de la valeur. Déplacez plutôt que détruire.