Aller au contenu

Documentation as Code : pourquoi et comment

Mise à jour :

Votre wiki Confluence est devenu un cimetière de pages. Personne ne sait quelle version est la bonne. Quelqu’un a modifié le runbook critique la semaine dernière, mais impossible de savoir qui et pourquoi. Une erreur s’est glissée dans la procédure de déploiement et personne ne s’en est aperçu avant l’incident de production.

Cette situation vous parle ? C’est le quotidien des équipes qui n’ont pas adopté l’approche Documentation as Code (ou Docs-as-Code).

Qu’est-ce que Documentation as Code ?

L’idée fondamentale est simple : traiter la documentation exactement comme du code source. Autrement dit, appliquer à vos documents les mêmes pratiques, outils et rigueur que vous appliquez à votre code de production.

Pourquoi cette approche ? Parce que le code et la documentation partagent les mêmes défis : ils doivent être maintenus, versionnés, relus, et ils évoluent constamment. Les développeurs ont passé des décennies à perfectionner leurs outils et workflows. Docs-as-Code consiste simplement à réutiliser cette expertise pour la documentation.

Concrètement, cela signifie :

  • Écrire en format texte (Markdown, AsciiDoc, reStructuredText) — des formats que n’importe quel éditeur peut ouvrir, que Git peut versionner efficacement, et qui restent lisibles même sans outil spécialisé.

  • Stocker dans un système de versioning (Git) — pour avoir un historique complet de chaque modification, pouvoir revenir en arrière, et travailler en parallèle sur plusieurs changements.

  • Passer par des pull requests et des reviews — pour que chaque modification soit examinée par au moins une autre personne avant d’être publiée, exactement comme pour le code.

  • Valider automatiquement avec des pipelines CI/CD — pour détecter les erreurs (liens cassés, fautes de style, problèmes de syntaxe) avant qu’elles n’atteignent les utilisateurs.

  • Déployer sur un site statique généré automatiquement — pour que chaque merge sur la branche principale publie instantanément la nouvelle version, sans intervention manuelle.

Pourquoi les wikis traditionnels échouent

Avant d’expliquer les bénéfices de Docs-as-Code, prenons le temps de comprendre pourquoi les wikis traditionnels — Confluence, SharePoint, Notion, MediaWiki — finissent presque toujours par devenir des « cimetières de documentation ».

Ce n’est pas que ces outils soient mauvais. Ils excellent pour certains usages (notes de réunion, brainstorming, documentation non technique). Mais pour la documentation technique qui doit rester fiable dans le temps, leur modèle présente des failles structurelles.

Comparaison wiki traditionnel vs Docs-as-Code

Les problèmes des wikis WYSIWYG

ProblèmeConséquence
Pas de review obligatoireN’importe qui peut publier une erreur instantanément
Historique opaqueQui a modifié quoi ? Pourquoi ? Impossible à tracer
Format propriétaireDonnées enfermées, migration difficile
Pas de branchesImpossible de préparer une mise à jour complexe
Pas de CI/CDAucune validation automatique
Éditeur web uniquementPas de travail hors-ligne, pas d’éditeur de votre choix

Le scénario catastrophe classique

Voici un scénario que vous avez peut-être vécu :

  1. Lundi : Alice met à jour le runbook de déploiement
  2. Mardi : Bob modifie le même runbook, écrasant une partie du travail d’Alice
  3. Mercredi : Charlie corrige une typo et introduit accidentellement une erreur
  4. Jeudi : Incident en production. Le runbook est suivi à la lettre… mais contient l’erreur de Charlie
  5. Vendredi : Réunion post-mortem. Impossible de savoir précisément ce qui a changé, quand, et pourquoi

Avec Docs-as-Code, ce scénario est impossible :

  • Chaque modification passe par une PR → review obligatoire
  • L’historique Git montre exactement qui a changé quoi
  • Un git revert peut annuler n’importe quel changement

L’analogie du code sans Git

Imaginez développer du code comme on fait de la doc dans un wiki :

Pratique wikiÉquivalent code (absurde)
Modifier et sauvegarder directementÉditer en production
Pas de reviewDéployer sans code review
Historique limitéPas de commit history
Format propriétaireCode dans un format binaire

Personne n’accepterait de coder ainsi. Pourquoi accepter de documenter ainsi ?

La réponse est souvent : « Parce que c’est comme ça qu’on a toujours fait » ou « Les non-développeurs ne connaissent pas Git ». Ces arguments ne tiennent plus. Les outils modernes rendent Docs-as-Code accessible à tous, et le coût de la documentation défaillante dépasse largement l’effort d’apprentissage.

Les six piliers de Docs-as-Code

Docs-as-Code repose sur six principes fondamentaux. Chacun apporte une valeur spécifique, et c’est leur combinaison qui crée un système robuste.

1. Format texte

Markdown, MDX, AsciiDoc. Lisible par les humains, versionable par Git.

2. Versioning Git

Historique complet, branches, tags. Qui a changé quoi, quand, pourquoi.

3. Pull Requests

Proposer des changements. Discuter. Approuver. Puis merger.

4. Reviews

Au moins une personne valide avant publication. Comme pour le code.

5. CI/CD

Tests automatiques : liens cassés, orthographe, style, build.

6. Déploiement auto

Merge = publication. Pas d’étape manuelle. Pas d’oubli.

Pourquoi ces six piliers fonctionnent ensemble

Chaque pilier renforce les autres :

  • Le format texte permet le versioning Git (les fichiers binaires ne se versionnent pas bien)
  • Le versioning Git permet les branches et donc les Pull Requests
  • Les Pull Requests créent un espace naturel pour les reviews
  • Les reviews sont renforcées par les vérifications CI/CD
  • Le CI/CD permet le déploiement automatique

Retirer un pilier affaiblit l’ensemble. Par exemple, utiliser Git sans PR ni review revient à perdre la moitié des bénéfices.

Le pipeline Docs-as-Code en détail

Voici à quoi ressemble un pipeline typique, du moment où vous commencez à éditer jusqu’à la publication :

Pipeline Docs-as-Code : sources, linting, build, deploy

  1. Écriture en Markdown

    L’auteur rédige ou modifie un fichier .md ou .mdx dans son éditeur préféré. C’est l’un des grands avantages de Docs-as-Code : vous n’êtes pas coincé dans un éditeur web. VS Code avec ses extensions Markdown, Vim pour les puristes, ou même Obsidian pour ceux qui préfèrent une interface graphique — tout fonctionne.

    Le travail se fait dans une branche Git dédiée, jamais directement sur main. Cela permet de :

    • Travailler sans impacter la version publiée
    • Préparer des changements complexes sur plusieurs jours
    • Avoir plusieurs personnes travaillant en parallèle sur des sujets différents
    Terminal window
    # Créer une branche pour votre modification
    git checkout -b docs/update-runbook-api
    # Éditer le fichier avec votre éditeur favori
    # ... modifications ...
    # Commiter avec un message clair
    git add docs/runbook-api.md
    git commit -m "docs: mise à jour procédure redémarrage API
    - Ajout des nouvelles commandes kubectl
    - Mise à jour des URLs du monitoring
    - Correction de la section rollback"
  2. Pull Request

    L’auteur ouvre une PR (Pull Request ou Merge Request selon la plateforme). La PR décrit les changements et leur contexte.

    ## Description
    Mise à jour du runbook suite à la migration vers Kubernetes.
    ## Changements
    - Nouvelles commandes kubectl
    - Suppression des références à l'ancien serveur
    - Ajout de la section monitoring
  3. Validation automatique (CI)

    Le pipeline CI/CD s’exécute automatiquement et vérifie :

    VérificationOutilCe qui est testé
    Syntaxe MarkdownmarkdownlintStructure, formatage
    Style rédactionnelValeOrthographe, ton, jargon
    LienslycheeLiens cassés (internes et externes)
    BuildAstro/Hugo/MkDocsLe site compile sans erreur
  4. Review humaine

    C’est l’étape la plus importante. Un ou plusieurs reviewers examinent les changements avec un regard neuf. Contrairement à l’auteur qui connaît le contexte par cœur, le reviewer voit le document comme le verra un utilisateur.

    Les questions à se poser en tant que reviewer :

    • Exactitude technique : les informations sont-elles correctes ?
    • Clarté : quelqu’un qui ne connaît pas le sujet comprendra-t-il ?
    • Complétude : manque-t-il des étapes, des prérequis, des avertissements ?
    • Style : le ton est-il cohérent avec le reste de la documentation ?
    • Testabilité : peut-on suivre cette procédure de A à Z ?

    Les reviewers laissent des commentaires directement sur les lignes concernées. L’auteur répond, discute, et pousse des corrections. Ce dialogue améliore la qualité finale bien au-delà de ce qu’une personne seule pourrait produire.

  5. Merge et déploiement

    Une fois la PR approuvée et les checks CI passés, elle est mergée. Le pipeline de déploiement se déclenche automatiquement :

    # Exemple GitHub Actions
    on:
    push:
    branches: [main]
    jobs:
    deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - run: npm ci && npm run build
    - uses: actions/deploy-pages@v4

    Quelques minutes plus tard, la documentation est en ligne.

Bénéfices concrets

Passons des principes à la pratique. Voici ce que Docs-as-Code change concrètement au quotidien.

Pour la qualité

La qualité de la documentation s’améliore mécaniquement, pas parce que les auteurs deviennent meilleurs, mais parce que le système empêche les erreurs de se propager.

Avant (wiki)Après (Docs-as-Code)
Erreurs publiées immédiatementReview obligatoire avant publication
Liens cassés découverts par les utilisateursDétectés automatiquement en CI
Style incohérentStyle guide appliqué par linter
« Qui a cassé la doc ? »git blame + historique complet
Procédures non testéesPR encourage le test avant merge
Typos qui persistentFaciles à corriger via quick PR

Pour la collaboration

Les contributeurs travaillent chacun sur leur branche. Pas de conflits d’édition simultanée. Les discussions se font dans les PR, de manière asynchrone.

Un développeur en Australie peut proposer une modification que l’équipe européenne reviewera le lendemain matin.

Pour la maintenabilité

AspectBénéfice
PortabilitéMarkdown = texte brut. Migrez où vous voulez.
BackupGit = distribué. Chaque clone est une sauvegarde.
Recherchegrep, ripgrep, recherche IDE. Instantané.
RefactoringRenommez, déplacez, réorganisez. Git trace tout.
Multi-versionTags et branches pour chaque version produit.

Pour la résilience

Un aspect souvent négligé : la résilience face aux incidents et aux départs.

SituationAvec wikiAvec Docs-as-Code
Serveur wiki HSPas de doc accessibleClone local sur chaque poste
Corruption de donnéesRestauration complexegit clone depuis n’importe quel remote
Départ d’un expertConnaissances perduesHistorique des contributions préservé
Besoin d’auditExport manuel, formatage casségit log + diff natif

Chaque développeur qui a cloné le repo possède une copie complète de l’historique. Même si GitHub/GitLab disparaît, la documentation survit.

Outils de l’écosystème

Générateurs de sites statiques (SSG)

Le SSG (Static Site Generator) est le cœur de votre pipeline. Il prend vos fichiers Markdown et les transforme en un site web complet, avec navigation, recherche, et mise en forme professionnelle.

Le choix du SSG dépend de votre écosystème technique et de vos besoins :

OutilLangagePoints fortsIdéal pour
Astro/StarlightJavaScriptRapide, moderne, excellent DXDoc technique moderne
MkDocs MaterialPythonSimple, beau thème par défautDémarrage rapide
DocusaurusJavaScriptVersioning intégré, i18nDoc produit multi-versions
HugoGoTrès rapide, pas de dépendancesGros volumes, sites rapides
SphinxPythonStandard pour Python, autodocDoc API Python
GitBookSaaSPas d’infra à gérerÉquipes non-techniques

Linters pour la prose

Les linters vérifient automatiquement la qualité de votre documentation. Ils détectent les problèmes que les humains manquent facilement : incohérences de style, jargon non expliqué, phrases trop longues, voix passive excessive.

OutilRôleExemple de règle
ValeLinter de prose configurable« Éviter simply, just, easy »
markdownlintValidation syntaxe Markdown« Headers doivent être séquentiels »
textlintLinter extensible pour texte« Phrases < 25 mots »
write-goodSuggestions de style (anglais)« Éviter la voix passive »

Exemple de configuration Vale

Vale est particulièrement puissant car il permet d’appliquer des style guides reconnus (Microsoft, Google) ou de créer vos propres règles.

# .vale.ini - Configuration racine
StylesPath = .vale/styles
MinAlertLevel = suggestion
# Packages à télécharger : vale sync
Packages = Microsoft, write-good
[*.md]
BasedOnStyles = Vale, Microsoft, write-good
# Désactiver certaines règles trop strictes
Microsoft.HeadingAcronyms = NO
write-good.Passive = suggestion # Warning au lieu d'erreur
# .vale/styles/MonEquipe/Jargon.yml - Règle personnalisée
extends: existence
message: "Évitez le jargon '%s'. Expliquez ou reformulez."
level: warning
tokens:
- leverage
- synergy
- paradigm
- deep dive

Vérification de liens

OutilDescription
lycheeRapide, écrit en Rust
markdown-link-checkSimple, Node.js
htmltestVérifie le HTML généré

Mettre en place Docs-as-Code

  1. Choisir le format

    Markdown est le choix par défaut. MDX si vous avez besoin de composants interactifs. AsciiDoc pour des documents très structurés.

  2. Initialiser le repo Git

    Soit dans le même repo que le code (monorepo), soit dans un repo dédié à la documentation.

    Terminal window
    mkdir docs && cd docs
    git init
    echo "# Documentation" > README.md
    git add . && git commit -m "Initial commit"
  3. Choisir un SSG

    Pour débuter, MkDocs Material est le plus simple :

    Terminal window
    pip install mkdocs-material
    mkdocs new .
    mkdocs serve # Preview local
  4. Configurer le CI

    Exemple minimal pour GitHub Actions :

    .github/workflows/docs.yml
    name: Documentation
    on:
    pull_request:
    paths: ['docs/**', 'mkdocs.yml']
    push:
    branches: [main]
    jobs:
    lint:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - run: npx markdownlint-cli docs/**/*.md
    build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-python@v5
    with:
    python-version: '3.12'
    - run: pip install mkdocs-material
    - run: mkdocs build --strict
    deploy:
    if: github.ref == 'refs/heads/main'
    needs: [lint, build]
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - run: pip install mkdocs-material
    - run: mkdocs gh-deploy --force
  5. Établir les conventions

    Documentez vos conventions dans un fichier CONTRIBUTING.md :

    • Structure des fichiers
    • Style guide
    • Processus de review
    • Templates de PR
  6. Former l’équipe

    La courbe d’apprentissage est faible si l’équipe connaît déjà Git. Prévoyez une session de 30-60 minutes couvrant :

    • Le « pourquoi » : expliquez les problèmes que Docs-as-Code résout
    • Le workflow : branche → édition → commit → PR → review → merge
    • La pratique : faites une PR ensemble, du début à la fin
    • Le CI : montrez ce qui se passe quand le pipeline détecte un problème
    • Les ressources : où trouver de l’aide, qui contacter

Gérer la transition depuis un wiki

Si vous avez un wiki existant avec des années de contenu, la tentation est de tout migrer d’un coup. Résistez. Une migration « big bang » est le meilleur moyen de créer du chaos et de dégoûter l’équipe.

Adoptez plutôt une stratégie progressive qui minimise les risques et permet d’ajuster en cours de route.

  1. Commencez par les nouveaux documents Tout nouveau contenu va dans le repo Git.

  2. Migrez les documents critiques Runbooks, procédures d’incident, documentation API.

  3. Laissez mourir le reste Les pages non consultées depuis 6 mois peuvent rester dans le wiki (en lecture seule) ou être archivées.

Que faire du wiki pendant la transition ?

Pendant la période de transition, vous aurez deux sources. Pour éviter la confusion :

  1. Mettez le wiki en lecture seule dès que possible
  2. Ajoutez un bandeau sur chaque page wiki : « Cette documentation a migré vers [nouveau site]. Cette page n’est plus maintenue. »
  3. Redirigez les URLs de l’ancien wiki vers le nouveau site
  4. Fixez une date de fermeture du wiki et communiquez-la

Pièges courants et solutions

Même avec la meilleure volonté, certains pièges guettent les équipes qui adoptent Docs-as-Code. Voici les plus fréquents et comment les éviter.

PiègeProblèmeSolution
Trop de frictionPR pour une typo = décourageantAutoriser les commits directs pour typos mineures
Reviews qui traînentDoc jamais publiéeSLA de review (24h max) + rotation
CI trop stricteBloqué par des warnings mineursNiveaux d’alerte (error vs warning)
Pas de previewImpossible de voir le renduDeploy preview sur chaque PR
Monorepo ingérableDoc noyée dans le codeDossier /docs dédié et bien structuré
Markdown trop limitéBesoin de composants richesMDX, Astro, ou SSG avec extensions

Focus : le problème de la friction

Le piège le plus insidieux est la friction excessive. Si contribuer à la doc demande plus d’effort qu’avant, les gens arrêteront de contribuer.

Signes d’alarme :

  • « J’aurais bien corrigé cette typo mais flemme de faire une PR »
  • « Le CI est rouge pour un truc mineur, je laisse tomber »
  • « Ma PR attend une review depuis une semaine »

Solutions :

  • Commits directs autorisés pour les typos et corrections mineures
  • CI avec niveaux : warnings vs erreurs bloquantes
  • SLA de review : 24h max, rotation des reviewers
  • Templates de PR pré-remplis pour réduire l’effort

Anti-patterns à éviter

Deux erreurs reviennent systématiquement lors de l’adoption de Docs-as-Code :

Anti-patternPourquoi c’est un problèmeAlternative
Wiki ET Git en parallèleDeux sources de vérité = personne ne sait où est la bonne versionUne seule source (Git), wiki en lecture seule puis fermé
Reviews de façadeApprouver sans lire revient à ne pas avoir de reviewExiger un commentaire substantif, rotation des reviewers

Pour une liste complète des anti-patterns documentaires (pas seulement liés à Docs-as-Code), consultez le guide dédié :

À retenir

Même workflow que le code

Git, branches, PR, reviews, CI/CD. Si vous savez coder, vous savez documenter.

Texte brut = liberté

Markdown vous appartient. Pas de vendor lock-in. Migrez quand vous voulez.

Review = qualité

Une deuxième paire d’yeux détecte les erreurs avant vos utilisateurs.

Automatisation = fiabilité

Le CI vérifie ce que les humains oublient : liens, style, build.

Ressources complémentaires