Rédiger un post-mortem vérifiable
Un post-mortem est un court récit écrit d’un incident : une chronologie, une cause et une liste d’actions. Il compte, car un récit que personne ne peut vérifier ne garde qu’une impression.
L’incident de coût de la médiathèque est fini. L’équipe le rédige, et un petit script compare le brouillon au journal avant que quiconque le signe.
À la fin de cette leçon
Remarque
Je peux écrire ce qui s’est passé, pourquoi, et ce qui change.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Post-mortem | un récit écrit d’un incident et de ses suites | |
| Chronologie | les événements d’un incident, dans l’ordre du temps | |
| Cause | pourquoi cela s’est produit, en termes que le journal confirme | |
| Action | un changement avec un responsable et une échéance | |
| Contrôle | un moyen de voir qu’une action a marché | au plus 2 tentatives |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une chronologie reprend les heures du journal
Une chronologie liste ce qui s’est passé et quand, dans l’ordre. Copiez chaque heure d’une trace écrite. Ne l’écrivez pas de mémoire.
Une bonne chronologie contient aussi les temps lents : quand la cause a commencé, quand on l’a remarquée, quand elle a fini. Les écarts entre ces heures sont les leçons.
Exemple : les événements de la médiathèque
| Heure | Événement |
|---|---|
| 10:55 | Une fiche plus longue est en ligne |
| 12:02 | L’alerte horaire de coût se déclenche |
| 12:20 | La cause est trouvée dans la trace |
| 12:35 | Les tentatives sont plafonnées |
| 13:00 | Le coût repasse sous la limite |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une cause que le journal peut confirmer
Écrivez la cause comme une phrase que le journal peut prouver ou réfuter. Elle dit ce qui s’est passé, pour quelles requêtes et pourquoi.
« Chaque question sur les tarifs était tentée cinq fois, car le contrôle de 40 mots ne pouvait pas réussir » se vérifie. « Le système était surchargé » ne se vérifie pas : aucune trace ne le confirme.
Une action a un responsable et un contrôle
Une action est un changement qui corrige la cause ou raccourcit les écarts. Chacune a un responsable, une échéance et un contrôle : un chiffre que le journal montrera quand l’action aura marché.
« Faire plus attention » n’a rien de tout cela. « Au plus 2 tentatives par requête, vu dans le journal sous 2 jours » a les trois.
Une erreur fréquente
Attention
Beaucoup pensent qu’un post-mortem doit dire qui est fautif. Il doit dire ce qui, dans le système, a permis la faute. Mettez un nom à côté d’une action, comme responsable, et nulle part ailleurs.
Écrire le brouillon et le journal, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const fs = require(\"fs\");' 'const EVENEMENTS = [' ' { heure: \"10:55\", code: \"fiche_publiee\" },' ' { heure: \"12:02\", code: \"alerte_declenchee\" },' ' { heure: \"12:20\", code: \"cause_trouvee\" },' ' { heure: \"12:35\", code: \"tentatives_plafonnees\" },' ' { heure: \"13:00\", code: \"cout_normal\" },' '];' 'const BROUILLON = {' ' chronologie: [' ' { heure: \"10:55\", code: \"fiche_publiee\" },' ' { heure: \"12:02\", code: \"alerte_declenchee\" },' ' { heure: \"12:10\", code: \"cause_trouvee\" },' ' { heure: \"13:00\", code: \"cout_normal\" },' ' ],' > pm.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire le brouillon et le journal, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' cause: \"Chaque question sur les tarifs était tentée cinq fois, car le contrôle de 40 mots ne pouvait pas réussir\",' ' actions: [' ' { quoi: \"Plafonner les tentatives à 2\", responsable: \"Samir\", controle: \"Le journal montre au plus 2 tentatives par requête\", jours: 2 },' ' { quoi: \"Faire plus attention à la fiche\", responsable: \"Samir\", controle: \"\", jours: 5 },' ' { quoi: \"Alerter toutes les 10 minutes\", responsable: \"\", controle: \"Une alerte part dans les 10 minutes d’un pic\", jours: 60 },' ' ],' '};' 'fs.writeFileSync(\"evenements.json\", JSON.stringify(EVENEMENTS, null, 1));' 'fs.writeFileSync(\"postmortem.json\", JSON.stringify(BROUILLON, null, 1));' >> pm.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Créer les fichiers du brouillon
docker exec -w /home/node/project agent node pm.jsAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire le vérificateur, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const fs = require(\"fs\");' 'const JOURS_MAX = 30;' 'function aUnChiffre(texte) { return /[0-9]/.test(texte); }' 'function lancer() {' ' const evenements = JSON.parse(fs.readFileSync(\"evenements.json\", \"utf8\"));' ' const pm = JSON.parse(fs.readFileSync(\"postmortem.json\", \"utf8\"));' ' const chronologie = [];' ' const actions = [];' ' let derniere = \"\";' ' pm.chronologie.forEach(function (ligne, i) {' ' const trouve = evenements.find(function (e) { return e.code === ligne.code; });' ' if (trouve === undefined) chronologie.push(i + \":evenement_inconnu\");' ' else if ((trouve.heure === ligne.heure) === false) chronologie.push(i + \":mauvaise_heure\");' ' if (ligne.heure < derniere) chronologie.push(i + \":hors_ordre\");' ' derniere = ligne.heure;' ' });' > verifier-pm.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire le vérificateur, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' evenements.forEach(function (e) {' ' if (pm.chronologie.some(function (l) { return l.code === e.code; }) === false) chronologie.push(\"manquant:\" + e.code);' ' });' ' pm.actions.forEach(function (a, i) {' ' if (a.responsable.trim() === \"\") actions.push(i + \":sans_responsable\");' ' if (a.controle.trim() === \"\") actions.push(i + \":sans_controle\");' ' else if (aUnChiffre(a.controle) === false) actions.push(i + \":sans_chiffre\");' ' if (a.jours > JOURS_MAX) actions.push(i + \":trop_tard\");' ' });' ' console.log(\"Chronologie :\", chronologie.join(\" \"));' ' console.log(\"Actions :\", actions.join(\" \"));' ' const total = chronologie.length + actions.length;' ' console.log(\"Problèmes :\", total);' ' console.log(total === 0 ? \"Le post-mortem est prêt.\" : \"Le post-mortem n’est pas prêt.\");' '}' 'module.exports = { lancer };' 'if (require.main === module) lancer();' >> verifier-pm.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Vérifier le brouillon
docker exec -w /home/node/project agent node verifier-pm.jsAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ce que le vérificateur affiche
| Ligne | Ce qu’elle dit |
|---|---|
| Chronologie | 2:mauvaise_heure manquant:tentatives_plafonnees |
| Actions | 1:sans_controle 2:sans_responsable 2:trop_tard |
| Problèmes | 5 |
| Dernière ligne | Le post-mortem n’est pas prêt. |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Écrire la correction
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const fs = require(\"fs\");' 'const pm = JSON.parse(fs.readFileSync(\"postmortem.json\", \"utf8\"));' 'pm.chronologie[2].heure = \"12:20\"; // le journal dit 12:20' 'pm.chronologie.splice(3, 0, { heure: \"12:35\", code: \"tentatives_plafonnees\" });' 'pm.actions[1].quoi = \"Tester chaque fiche avec le contrôle de 40 mots avant sa publication\";' 'pm.actions[1].controle = \"Chaque cas de l’évaluation passe le contrôle de 40 mots avant la publication d’une fiche\";' 'pm.actions[2].responsable = \"Anne\";' 'pm.actions[2].jours = 14;' 'fs.writeFileSync(\"postmortem.json\", JSON.stringify(pm, null, 1));' 'require(\"./verifier-pm\").lancer();' > corriger-pm.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Corriger le brouillon et revérifier
docker exec -w /home/node/project agent node corriger-pm.jsAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.