Aller au contenu
Documentation medium

Postmortem blameless : apprendre des incidents

24 min de lecture

En 2012, Knight Capital, une société de trading américaine, a perdu 440 millions de dollars en 45 minutes à cause d’un incident technique. Un déploiement défectueux avait réactivé du code obsolète. L’entreprise a frôlé la faillite.

Ce qui différencie les organisations résilientes des autres ? Leur capacité à apprendre de chaque incident. Le postmortem blameless transforme une crise en opportunité d’amélioration. Sans lui, les mêmes erreurs se répètent, la frustration s’installe, et la prochaine panne majeure n’est qu’une question de temps.

Cycle vertueux du postmortem : Incident → Résolution → Postmortem → Actions → Prévention → Système amélioré

Un postmortem (littéralement « après la mort ») est une analyse structurée réalisée après un incident. Son objectif : comprendre ce qui s’est passé, pourquoi c’est arrivé, et comment éviter que ça se reproduise.

L’adjectif blameless (« sans blâme ») est fondamental : l’analyse se concentre sur les causes systémiques, pas sur la recherche d’un coupable. Cette approche, popularisée par Google dans leur pratique SRE (Site Reliability Engineering), part d’un principe simple : les personnes impliquées ont agi rationnellement avec les informations qu’elles avaient à ce moment-là.

L’industrie aéronautique est le modèle de référence pour l’analyse des incidents. Après chaque accident ou incident grave, une enquête approfondie est menée. L’objectif n’est jamais de punir le pilote, mais de comprendre la chaîne d’événements qui a conduit à l’incident.

Cette approche a permis de faire de l’avion le moyen de transport le plus sûr au monde. Un crash en 1970 pouvait tuer 100 personnes et se répéter 5 ans plus tard pour les mêmes raisons. Aujourd’hui, chaque incident alimente une base de connaissances mondiale qui profite à toute l’industrie.

Le postmortem blameless applique cette philosophie aux opérations informatiques.

Ces deux documents servent des objectifs différents :

AspectCompte-rendu d’incidentPostmortem
MomentPendant ou juste après l’incidentQuelques jours après, avec du recul
ObjectifTracer les faits et la résolutionAnalyser les causes et prévenir
ContenuChronologie, actions, résolutionCauses profondes, actions correctives
Durée de vieArchive de référenceDocument vivant avec suivi
AudienceÉquipe technique, supportToute l’organisation concernée
TonFactuel, techniqueAnalytique, pédagogique

Le compte-rendu répond à « que s’est-il passé ? ». Le postmortem répond à « pourquoi c’est arrivé et comment éviter que ça se reproduise ? ».

Focus : les systèmes et leur comportement.

Ce postmortem analyse les défaillances matérielles, logicielles ou d’infrastructure. Il répond aux questions :

  • Quel composant a défailli en premier ?
  • Comment la panne s’est-elle propagée ?
  • Pourquoi les mécanismes de protection n’ont pas fonctionné ?

Exemple : un serveur de base de données qui sature sa mémoire provoque un effet cascade sur les applications clientes. Le postmortem technique analyse la configuration mémoire, les requêtes problématiques, et l’absence d’alerting sur ce seuil.

Quand l’utiliser : pannes d’infrastructure, bugs applicatifs, problèmes de performance.

Face à un incident, la réaction instinctive est de chercher « qui a fait ça ». Cette approche semble logique : identifier le responsable et le sanctionner devrait éviter que ça se reproduise.

En réalité, cette logique est contre-productive :

Comportement induitConséquence
Les équipes cachent leurs erreursLes incidents sont sous-déclarés
Les gens évitent les tâches risquéesL’innovation est freinée
L’information ne circule pasLes causes réelles restent inconnues
La confiance disparaîtLa collaboration se dégrade

Le postmortem blameless part d’un principe fondamental : les personnes impliquées ont agi rationnellement avec les informations qu’elles avaient à ce moment-là.

Si un administrateur a exécuté une commande qui a causé une panne, les questions pertinentes sont :

  • Pourquoi cette commande était-elle possible dans cet environnement ?
  • Quelles informations manquaient pour anticiper le risque ?
  • Quel filet de sécurité aurait pu prévenir l’impact ?

Le problème n’est jamais « Jean a fait une erreur ». Le problème est « notre système a permis qu’une erreur humaine normale cause un incident majeur ».

Une culture blameless produit des résultats mesurables :

  • Déclaration d’incidents +40% : les équipes signalent les problèmes plus tôt
  • Temps de résolution -25% : l’information circule sans filtre
  • Récurrence des incidents -50% : les vraies causes sont traitées
  • Engagement des équipes +30% : la confiance remplace la peur

Un postmortem efficace suit une structure standardisée. Voici un exemple complet :

postmortem-2024-12-15-api-timeout.md
# Postmortem : Timeout API de paiement
Date de l'incident : 15 décembre 2024
Auteur : Marie Dupont
Participants : Jean Martin (Ops), Pierre Durand (Dev), Sophie Bernard (Support)
Statut : En cours de suivi
## Résumé exécutif
L'API de paiement a été indisponible pendant 47 minutes (14h23-15h10)
suite à une saturation du pool de connexions PostgreSQL.
Impact : 1 247 transactions échouées, perte estimée à 45 000 €.
## Chronologie des événements
| Heure | Événement |
|-------|-----------|
| 14h23 | Première alerte : temps de réponse API > 5s |
| 14h25 | L'équipe support signale des plaintes clients |
| 14h28 | Jean identifie la saturation du pool PostgreSQL |
| 14h35 | Tentative de restart du service API (échec) |
| 14h42 | Pierre identifie une requête bloquante non commitée |
| 14h48 | Kill de la session PostgreSQL problématique |
| 14h52 | Restart progressif des instances API |
| 15h10 | Retour à la normale confirmé |
## Analyse des causes
### Cause immédiate
Une requête de reporting lancée manuellement a verrouillé une table
pendant 45 minutes, bloquant progressivement toutes les connexions.
### Causes contributives
1. Pas de séparation entre base transactionnelle et reporting
2. Pas de timeout configuré sur les requêtes longues
3. Pas d'alerte sur le nombre de connexions actives
4. Documentation du pool de connexions inexistante
### Cause profonde
L'architecture ne prévoit pas d'isolation entre les charges de travail
critiques (transactions) et non critiques (reporting).
## Ce qui a bien fonctionné
- Détection rapide par le monitoring (< 5 min)
- Communication fluide entre les équipes
- Logs suffisamment détaillés pour le diagnostic
- Rollback possible sans perte de données
## Ce qui a mal fonctionné
- Pas de [runbook](/docs/documenter/concevoir/runbooks/) pour ce type d'incident
- Temps de diagnostic trop long (14 min)
- Première tentative de correction inefficace
- Pas d'alerte sur les verrous de longue durée
## Actions correctives
| Action | Responsable | Échéance | Priorité |
|--------|-------------|----------|----------|
| Créer une réplique dédiée au reporting | Pierre | 15 jan | Haute |
| Configurer statement_timeout à 5 min | Jean | 20 déc | Critique |
| Ajouter alerte sur connexions > 80% | Jean | 20 déc | Haute |
| Rédiger runbook « saturation pool PG » | Marie | 10 jan | Moyenne |
| Former l'équipe support au diagnostic | Sophie | 31 jan | Moyenne |
## Leçons apprises
1. Les requêtes ad-hoc sur la base de production sont un risque majeur
2. Le monitoring du pool de connexions était un angle mort
3. L'équipe a besoin d'un runbook pour les incidents base de données
## Métriques de suivi
- Nombre d'incidents pool de connexions : objectif 0 sur 6 mois
- Temps moyen de détection : objectif < 2 min
- Temps moyen de résolution incidents DB : objectif < 15 min
  1. Factuel

    Un bon postmortem décrit les faits sans interprétation ni jugement. « Le service a été redémarré à 14h52 » plutôt que « Jean a enfin pensé à redémarrer le service ».

    La chronologie doit être vérifiable. Les heures proviennent des logs, pas des souvenirs. Les actions sont décrites objectivement.

  2. Complet

    Toutes les informations nécessaires sont présentes : contexte, chronologie, causes, impacts, actions. Un lecteur qui n’a pas vécu l’incident doit pouvoir comprendre ce qui s’est passé et pourquoi.

    Les zones d’ombre sont explicitement mentionnées : « Nous n’avons pas pu déterminer pourquoi le monitoring n’a pas alerté plus tôt ».

  3. Actionnable

    Chaque cause identifiée génère une action corrective. Chaque action a un responsable, une échéance et une priorité. « Améliorer le monitoring » n’est pas une action. « Ajouter une alerte Prometheus sur pg_stat_activity > 80 connexions » en est une.

  4. Partagé

    Un postmortem qui reste dans un tiroir ne sert à rien. Il doit être accessible à toutes les personnes concernées, présenté en réunion d’équipe, et référencé dans la documentation.

    Les équipes qui n’ont pas participé à l’incident doivent pouvoir apprendre de l’expérience des autres.

  5. Suivi

    Les actions correctives sont trackées jusqu’à leur complétion. Un postmortem sans suivi est un exercice de style. Le statut des actions est mis à jour régulièrement, et un bilan est fait après l’échéance de la dernière action.

Pour identifier les causes profondes, la technique des 5 pourquoi (5 Whys) est particulièrement efficace. Développée par Toyota dans le cadre du Lean Manufacturing, elle consiste à poser la question « Pourquoi ? » de manière itérative jusqu’à atteindre la cause racine.

Méthode des 5 pourquoi : du symptôme à la cause racine

Exemple concret :

QuestionRéponse
IncidentL’API de paiement a été indisponible pendant 47 minutes
Pourquoi ?Le pool de connexions PostgreSQL était saturé
Pourquoi ?Une requête maintenait un verrou sur une table depuis 45 minutes
Pourquoi ?La requête de reporting n’avait pas de timeout configuré
Pourquoi ?Aucune politique de timeout n’existe pour les requêtes
Pourquoi ?L’architecture n’a pas été conçue pour isoler les charges de travail

La cause profonde n’est pas « quelqu’un a lancé une requête », mais « l’architecture permet qu’une requête de reporting impacte les transactions critiques ».

  • Obligatoire : les personnes directement impliquées dans l’incident
  • Recommandé : les équipes impactées (support, métier)
  • Optionnel : le management (en observateur, pas en juge)

Un facilitateur neutre guide la discussion. Son rôle :

  • Maintenir le focus sur les faits et les causes
  • Couper court aux accusations ou justifications
  • S’assurer que toutes les voix sont entendues
  • Garder le timing (1h30 maximum)
  • Prendre des notes structurées
PhaseDuréeObjectif
Introduction5 minRappeler les règles blameless
Chronologie20 minReconstituer les faits ensemble
Analyse des causes30 minIdentifier les causes profondes
Ce qui a fonctionné10 minValoriser les bonnes pratiques
Actions correctives20 minDéfinir les améliorations
Conclusion5 minRésumer et attribuer le suivi
  1. Nous cherchons les causes, pas les coupables
  2. Chacun a agi rationnellement avec les informations disponibles
  3. Les erreurs humaines sont des symptômes, pas des causes
  4. Nous sommes là pour apprendre, pas pour juger
  5. Les désaccords sont bienvenus, les attaques personnelles non

Tous les incidents ne méritent pas un postmortem complet. Définissez des critères clairs pour votre organisation :

CritèrePostmortem obligatoirePostmortem recommandé
Durée> 30 minutes15-30 minutes
Impact utilisateurs> 1000 utilisateurs100-1000 utilisateurs
Impact financier> 10 000 €1 000-10 000 €
Données perduesOuiRisque avéré
Incident récurrent3ème occurrence2ème occurrence
Near missÉvité de justesse-
SolutionAvantagesInconvénients
Wiki d’équipeAccessible, recherche facilePeut devenir désorganisé
Dépôt GitVersionné, revue possibleMoins accessible aux non-tech
Confluence/NotionCollaboration facileDépendance à un outil
Dossier partagéSimpleRecherche limitée

Recommandation : utilisez le même outil que vos runbooks. La cohérence facilite l’adoption. Créez une structure de nommage claire : postmortem-YYYY-MM-DD-resume-court.md.

Symptôme : le postmortem se transforme en procès. Les questions commencent par « pourquoi tu as… » ou « qui a décidé de… ».

Conséquence : les équipes se braquent, l’information ne circule plus, les prochains incidents seront cachés.

Solution : le facilitateur recadre immédiatement. Reformuler « pourquoi Jean a fait ça » en « quelles informations manquaient pour éviter cette action ».

Symptôme : le postmortem s’arrête à la cause immédiate. « Le serveur a planté parce que le disque était plein. Action : ajouter du disque ».

Conséquence : le même incident se reproduira sous une autre forme. Les causes systémiques ne sont jamais traitées.

Solution : appliquer la méthode des 5 pourquoi systématiquement. Pourquoi le disque s’est rempli ? Pourquoi l’alerte n’a pas fonctionné ? Pourquoi personne n’a vérifié ?

Symptôme : le postmortem est rédigé mais jamais partagé. Il reste dans le dossier de son auteur ou dans une page wiki que personne ne consulte.

Conséquence : l’apprentissage reste individuel. Les autres équipes feront les mêmes erreurs.

Solution : inclure une étape de diffusion dans le processus. Présentation en réunion d’équipe, notification dans le canal Slack, lien dans la documentation.

Symptôme : le postmortem contient une belle liste d’actions correctives. Trois mois plus tard, aucune n’a été réalisée.

Conséquence : l’exercice perd sa crédibilité. Les équipes cessent de proposer des améliorations puisqu’elles ne sont jamais implémentées.

Solution : tracker les actions dans l’outil de gestion de projet (Jira, GitLab Issues). Faire un bilan mensuel des actions ouvertes. Escalader les blocages.

Un postmortem isolé a peu d’impact. Son intégration dans les processus existants maximise sa valeur :

.gitlab-ci.yml (extrait)
# Création automatique d'un template de postmortem après incident majeur
create_postmortem:
stage: post-incident
script:
- |
cat > postmortems/postmortem-$(date +%Y-%m-%d)-${INCIDENT_ID}.md << EOF
# Postmortem : ${INCIDENT_TITLE}
Date de l'incident : $(date +%Y-%m-%d)
Auteur : À compléter
Participants : À compléter
Statut : En cours de rédaction
## Résumé exécutif
À compléter
## Chronologie des événements
| Heure | Événement |
|-------|-----------|
| | |
## Analyse des causes
### Cause immédiate
### Causes contributives
### Cause profonde
## Actions correctives
| Action | Responsable | Échéance | Priorité |
|--------|-------------|----------|----------|
| | | | |
EOF
- git add postmortems/
- git commit -m "chore: créer template postmortem incident ${INCIDENT_ID}"
- git push
rules:
- if: $INCIDENT_SEVERITY == "major"

Chaque postmortem peut générer ou améliorer un runbook. Ajoutez systématiquement une action :

« Créer/mettre à jour le runbook pour ce type d’incident »

Le postmortem alimente la base de connaissances opérationnelles.

Les angles morts révélés par l’analyse doivent se traduire en alertes :

« Ajouter une alerte sur [métrique] avec seuil [valeur] »

Le postmortem améliore la détection des futurs incidents.

  • Noter l’heure de début précise
  • Identifier les personnes impliquées
  • Capturer les logs et métriques pertinents
  • Documenter chaque action tentée et son résultat
  • Noter l’heure de résolution
  • Attendre 24-48h après l’incident (recul nécessaire)
  • Collecter les logs, métriques, captures d’écran
  • Reconstituer la chronologie à partir des données
  • Identifier tous les participants à inviter
  • Réserver une salle et envoyer l’invitation
  • Rappeler les règles blameless en début de réunion
  • Valider la chronologie collectivement
  • Appliquer la méthode des 5 pourquoi
  • Identifier ce qui a bien fonctionné
  • Définir des actions SMART (Spécifique, Mesurable, Atteignable, Réaliste, Temporel)
  • Attribuer un responsable et une échéance à chaque action
  • Rédiger le document final dans les 48h
  • Faire relire par les participants
  • Publier dans l’espace documentaire
  • Créer les tickets pour chaque action corrective
  • Notifier les équipes concernées
  • Planifier le suivi des actions

Pour les équipes avec des incidents fréquents, des outils spécialisés facilitent la gestion des postmortems :

OutilTypePoints forts
PagerDutySaaSIntégration alerting, templates, suivi automatique
Opsgenie (Atlassian)SaaSIntégration Jira, collaboration temps réel
incident.ioSaaSSlack-native, automatisation
RootlySaaSChatOps, intégrations multiples
Jira Service ManagementSaaSIntégration ITSM complète
GitLabSelf-hosted/SaaSIssues + Wiki intégrés