Pourquoi le DevOpsDans le dialogue d’impression, choisissez « Enregistrer au format PDF » comme destination.
Retour

DevOps · C1 Culture et fondations · Chapitre 1 · 4 h

Pourquoi le DevOps

Le mur entre développement et exploitation, les blocages du cycle de livraison traditionnel, les trois voies, les indicateurs DORA, et le post-mortem sans blâme.

Une équipe de développement livre une version. L'équipe d'exploitation la refuse : elle n'a pas été prévenue, la configuration diffère, et la mise en production tombe un jeudi soir. Les développeurs répondent que « ça marche sur nos machines ». L'exploitation répond que sa mission est la stabilité, et que chaque livraison est un risque.

Les deux ont raison, et c'est le problème. On les a payés pour des objectifs contradictoires : livrer vite d'un côté, ne rien casser de l'autre. Le résultat est prévisible — des livraisons rares, grosses, redoutées, et d'autant plus risquées qu'elles sont rares.

Le DevOps n'est pas un outil, ni un métier, ni un logiciel qu'on installe. C'est une réponse à cette contradiction d'organisation, et tout le reste du semestre en découle.

Le mur, et ce qu'il produit

Le cycle traditionnel enchaîne des phases séparées par des remises de travail.

développement ──► recette ──► exploitation ──► production     3 mois        3 semaines     1 semaine        ?

Quatre conséquences, et elles s'aggravent mutuellement.

Les lots grossissent. Puisque livrer coûte cher, on livre rarement, donc chaque livraison contient trois mois de modifications. Une version qui change deux cents fichiers est impossible à relire, impossible à tester exhaustivement, et impossible à diagnostiquer quand elle échoue.

Le risque augmente avec la taille du lot. C'est le point contre-intuitif du chapitre : on livre rarement pour réduire le risque, et c'est précisément ce qui l'augmente. Quand quelque chose casse dans un lot de deux cents modifications, on ignore laquelle est en cause.

Le retour arrière devient impossible. Revenir à la version précédente, c'est annuler trois mois de travail — donc on ne le fait pas, et l'on répare en urgence en production.

L'apprentissage s'arrête. Une équipe qui livre quatre fois par an n'a que quatre occasions annuelles d'apprendre de ses erreurs. Une qui livre tous les jours en a deux cent cinquante.

Les trois voies

Le mouvement s'énonce classiquement en trois principes, et ils forment le plan du semestre.

Le flux. Optimiser le trajet complet, du commit à la production, et non chaque étape isolément. Une équipe de développement deux fois plus rapide ne sert à rien si la mise en production prend trois semaines : le goulot d'étranglement décide du tout — c'est la loi d'Amdahl du chapitre 8 d'architecture, appliquée à une organisation. Rendre le flux visible, réduire la taille des lots, automatiser ce qui est répété : c'est l'objet des blocs II à V.

La rétroaction. Raccourcir la boucle entre une erreur et sa détection. Un bogue trouvé à l'écriture coûte une minute ; trouvé en recette, une heure ; trouvé en production, une journée et un incident. Tests automatisés, pipeline, supervision : tout le cours consiste à déplacer la détection vers la gauche.

L'apprentissage continu. Faire de chaque incident une source d'amélioration plutôt que de sanction. C'est la partie culturelle, et c'est la plus difficile à installer — voir la dernière section.

Mesurer : les quatre indicateurs DORA

Un programme d'amélioration qui ne se mesure pas est une opinion. Le programme de recherche DevOps Research and Assessment a dégagé quatre indicateurs qui, ensemble, prédisent la performance d'une équipe — et ils ont l'avantage d'être difficiles à truquer.

IndicateurQuestionÉliteFaible
Fréquence de déploiementà quelle cadence livre-t-on ?à la demande, plusieurs fois par jourmoins d'une fois par mois
Délai de livraisondu commit à la production ?moins d'une heureplus d'un mois
Taux d'échec des changementsquelle part des livraisons cause un incident ?0 à 15 %40 à 60 %
Temps de rétablissementcombien de temps pour réparer ?moins d'une heureplus d'une semaine

Graphique

Délai entre le commit et la production, en heures

  • Élite : 1 h1
  • Haute : 24 h24
  • Moyenne : 168 h (une semaine)168
  • Faible : 720 h (un mois)720
Les trois premières barres sont écrasées par la dernière, et c'est le propos : entre une équipe élite et une équipe faible, l'écart n'est pas de 20 % mais d'un facteur sept cents. Ce n'est pas une différence de talent ni de rapidité de frappe — c'est une différence de FLUX, et tout le reste du semestre consiste à en supprimer les obstacles.

Les deux premiers indicateurs mesurent la vitesse, les deux derniers la stabilité. Le résultat central de ces travaux est contre-intuitif et vaut d'être retenu : les deux vont ensemble. Les équipes qui livrent le plus souvent sont aussi celles qui cassent le moins et réparent le plus vite. Le compromis supposé entre vitesse et stabilité n'existe pas — c'est l'accumulation de gros lots rares qui produit à la fois la lenteur et l'instabilité.

Deux mises en garde d'usage. Ces indicateurs mesurent une équipe et un système, jamais une personne — les employer pour évaluer quelqu'un les rend immédiatement inutiles. Et ils se prennent ensemble : améliorer la fréquence de déploiement en négligeant le taux d'échec ne fait que déplacer le problème.

Le post-mortem sans blâme

Un incident survient. Deux réactions possibles, et elles produisent des organisations opposées.

Chercher le responsable. Quelqu'un a fait une manipulation malheureuse, on le sait, on le dit. Le résultat est mécanique : la prochaine fois, personne ne signalera l'erreur, chacun retardera les livraisons risquées, et l'information cessera de circuler. L'organisation devient plus lente et moins sûre.

Chercher ce qui a rendu l'erreur possible. Pourquoi une commande manuelle pouvait-elle détruire la base ? Pourquoi n'y avait-il pas de confirmation, de sauvegarde testée, de séparation entre les environnements ? Ce sont des questions sur le système, et elles ont des réponses actionnables.

Le principe s'énonce ainsi : on suppose que chacun a agi au mieux compte tenu de ce qu'il savait à ce moment-là. L'erreur humaine n'est pas une explication, c'est un point de départ — elle demande pourquoi le système a permis, voire favorisé, cette erreur.

Un post-mortem tient en cinq parties : ce qui s'est passé, quand, quel a été l'impact mesuré, pourquoi cela a été possible, et quelles actions concrètes sont décidées avec un responsable et une échéance. Sans la dernière partie, c'est un rapport ; avec elle, c'est un apprentissage.

Quiz · 1 question

Une équipe livre une fois par trimestre pour « limiter les risques ». Que dit le résultat des travaux DORA ?

  • C'est cohérent : moins de livraisons signifie mécaniquement moins d'occasions de casser la productioncohérent
  • C'est l'inverse : livrer rarement produit de gros lots, où l'on ne sait plus quelle modification a cassé quoi, où le retour arrière est impraticable et où l'apprentissage est rare — vitesse et stabilité vont ensemblel'inverse
  • Cela dépend uniquement de la qualité des tests : la fréquence de livraison n'a pas d'effet propresans effet

Réponse : C'est le résultat central de ces travaux, et il est contre-intuitif : les équipes qui déploient le plus souvent ont AUSSI le plus faible taux d'échec et le plus court temps de rétablissement. Le compromis supposé entre vitesse et stabilité n'existe pas. Le mécanisme est la TAILLE DU LOT : livrer rarement ne réduit pas le nombre de modifications, cela les accumule. Un lot de trois mois change deux cents fichiers — impossible à relire, à tester exhaustivement, à diagnostiquer quand il échoue, et impossible à annuler puisque revenir en arrière signifierait perdre trois mois de travail. À l'inverse, une livraison quotidienne contient peu de changements : la cause d'un incident est presque évidente, et le retour arrière est indolore. Et l'équipe qui livre 250 fois par an a 250 occasions d'apprendre, contre quatre.

Quiz · 1 question

Après un incident, un responsable demande « qui a lancé cette commande ? ». Pourquoi est-ce contre-productif ?

  • Parce que l'information est difficile à retrouver dans les journauxdifficulté technique
  • Parce que la question porte sur la PERSONNE et non sur le SYSTÈME : elle pousse chacun à taire ses erreurs et à éviter les opérations risquées, ce qui rend l'organisation à la fois plus lente et moins sûreeffet sur le système
  • Parce que le responsable de l'incident est presque toujours le dernier à avoir déployé, donc la réponse est connue d'avanceréponse évidente

Réponse : La question est mécaniquement contre-productive, quelle que soit l'intention. Si signaler une erreur expose à une sanction, personne ne la signale : les incidents sont découverts plus tard et par d'autres, l'information cesse de circuler, et chacun retarde les opérations risquées — donc les lots grossissent, ce qui ramène au premier quiz. Le principe du post-mortem sans blâme est de SUPPOSER que chacun a agi au mieux compte tenu de ce qu'il savait, et de traiter l'erreur humaine non comme une explication mais comme un point de départ : pourquoi le système a-t-il permis, voire favorisé, cette erreur ? Pourquoi une commande manuelle pouvait-elle détruire la base sans confirmation, sans sauvegarde testée, sans séparation des environnements ? Ces questions-là ont des réponses actionnables — et c'est la cinquième partie du compte rendu, celle des actions avec responsable et échéance, qui distingue un apprentissage d'un rapport.

À vous

L'exercice calcule les quatre indicateurs à partir d'un journal de déploiements — dates, succès ou échec, heure de commit, heure de rétablissement — pour deux équipes fictives.

Vous verrez d'abord ce que chaque indicateur mesure réellement, puis vous éprouverez le résultat central : en faisant varier la taille des lots dans le simulateur fourni, vous obtiendrez mécaniquement l'un ou l'autre profil. Une même équipe, un même rythme de travail, et deux positions opposées dans le classement — parce que la seule chose qu'on a changée est la fréquence de livraison.

La dernière partie est un piège de mesure : une équipe qui améliore sa fréquence de déploiement en dégradant son taux d'échec n'a pas progressé, et l'exercice le rend visible.

Exercice de code

Calculez les quatre indicateurs DORA, puis montrez par simulation que vitesse et stabilité vont ensemble.

Point de départ

// ── Un journal de déploiements ────────────────────────────────────────────
// heure en heures depuis le début de l'observation (720 h = un mois).
const JOURNAL_A = [
  { t: 2,   commit: 1,   ok: true },
  { t: 6,   commit: 5,   ok: true },
  { t: 9,   commit: 8.5, ok: false, retabli: 9.7 },
  { t: 14,  commit: 13,  ok: true },
  { t: 20,  commit: 19,  ok: true },
  { t: 26,  commit: 25,  ok: true },
  { t: 31,  commit: 30,  ok: true },
  { t: 38,  commit: 37,  ok: true },
];
const JOURNAL_B = [
  { t: 200, commit: 20,  ok: false, retabli: 380 },
  { t: 500, commit: 260, ok: true },
  { t: 700, commit: 520, ok: false, retabli: 900 },
];

function indicateurs(journal, dureeObservation) {
  const n = journal.length;
  const echecs = journal.filter((d) => !d.ok);
  return {
    frequence: 0,        // ← à écrire : déploiements par semaine
    delai: 0,            // ← à écrire : moyenne de (t − commit), en heures
    tauxEchec: 0,        // ← à écrire : part des déploiements ayant échoué
    retablissement: 0,   // ← à écrire : moyenne de (retabli − t) sur les échecs
  };
}

function classer(i) {
  const note = (v, seuils) => seuils.findIndex((s) => v <= s);
  return "à écrire";     // ← élite / haute / moyenne / faible
}

// ── Simuler l'effet de la TAILLE DES LOTS ─────────────────────────────────
// Une même équipe, un même rythme de travail : 240 modifications par mois.
// Seule varie la fréquence de livraison.
function simuler(modificationsParMois, deploiementsParMois) {
  const parLot = modificationsParMois / deploiementsParMois;
  // Hypothèse empirique : la probabilité qu'un lot casse croît avec sa
  // taille, et le temps de diagnostic aussi — on ne sait pas quelle
  // modification est en cause parmi celles du lot.
  const probaEchec = Math.min(0.9, 1 - Math.pow(0.995, parLot));
  const diagnostic = 0.5 + parLot * 0.15;   // heures
  return { parLot, probaEchec, diagnostic };
}

// ── À VOUS ────────────────────────────────────────────────────────────────
// 1. Écrivez indicateurs() et classer(), puis comparez les deux équipes.
// 2. Faites varier deploiementsParMois de 1 à 240 : que deviennent le taux
//    d'échec et le temps de rétablissement ?
// 3. Une équipe passe de 4 à 30 déploiements par mois mais son taux d'échec
//    monte de 10 % à 45 %. A-t-elle progressé ?

console.log(JSON.stringify(indicateurs(JOURNAL_A, 720)));

Solution

const JOURNAL_A = [
  { t: 2, commit: 1, ok: true }, { t: 6, commit: 5, ok: true },
  { t: 9, commit: 8.5, ok: false, retabli: 9.7 }, { t: 14, commit: 13, ok: true },
  { t: 20, commit: 19, ok: true }, { t: 26, commit: 25, ok: true },
  { t: 31, commit: 30, ok: true }, { t: 38, commit: 37, ok: true },
];
const JOURNAL_B = [
  { t: 200, commit: 20, ok: false, retabli: 380 },
  { t: 500, commit: 260, ok: true },
  { t: 700, commit: 520, ok: false, retabli: 900 },
];

const moyenne = (t) => t.reduce((s, x) => s + x, 0) / (t.length || 1);

function indicateurs(journal, dureeObservation) {
  const echecs = journal.filter((d) => !d.ok);
  return {
    frequence: (journal.length / dureeObservation) * 168,          // par semaine
    delai: moyenne(journal.map((d) => d.t - d.commit)),            // heures
    tauxEchec: echecs.length / journal.length,
    retablissement: moyenne(echecs.map((d) => d.retabli - d.t)),   // heures
  };
}

function classer(i) {
  // Seuils simplifiés d'après les paliers DORA.
  const niveau = (v, s) => (v <= s[0] ? "élite" : v <= s[1] ? "haute" : v <= s[2] ? "moyenne" : "faible");
  const inverse = (v, s) => (v >= s[0] ? "élite" : v >= s[1] ? "haute" : v >= s[2] ? "moyenne" : "faible");
  return {
    frequence: inverse(i.frequence, [7, 1, 0.25]),
    delai: niveau(i.delai, [1, 24, 168]),
    tauxEchec: niveau(i.tauxEchec, [0.15, 0.3, 0.45]),
    retablissement: niveau(i.retablissement, [1, 24, 168]),
  };
}

console.log("— 1. deux équipes, un mois d'observation —");
for (const [nom, j] of [["équipe A", JOURNAL_A], ["équipe B", JOURNAL_B]]) {
  const i = indicateurs(j, 720), c = classer(i);
  console.log("   " + nom);
  console.log("      fréquence      " + i.frequence.toFixed(1).padStart(6) + " /semaine   " + c.frequence);
  console.log("      délai          " + i.delai.toFixed(1).padStart(6) + " h          " + c.delai);
  console.log("      taux d'échec   " + (i.tauxEchec * 100).toFixed(0).padStart(6) + " %          " + c.tauxEchec);
  console.log("      rétablissement " + i.retablissement.toFixed(1).padStart(6) + " h          " + c.retablissement);
}
console.log("   L'équipe A n'est pas « meilleure » : elle a un FLUX différent, et");
console.log("   les quatre indicateurs basculent ENSEMBLE. C'est le point à vérifier.");

console.log("");
console.log("— 2. la taille des lots explique tout —");
function simuler(modificationsParMois, deploiementsParMois) {
  const parLot = modificationsParMois / deploiementsParMois;
  const probaEchec = Math.min(0.9, 1 - Math.pow(0.995, parLot));
  const diagnostic = 0.5 + parLot * 0.15;
  return { parLot, probaEchec, diagnostic };
}
console.log("   déploiements/mois | modifs/lot | taux d'échec | rétablissement");
for (const d of [1, 2, 4, 12, 30, 120, 240]) {
  const s = simuler(240, d);
  console.log("   " + String(d).padStart(17) + " | " + String(s.parLot).padStart(10) +
    " | " + (s.probaEchec * 100).toFixed(0).padStart(11) + " %" +
    " | " + s.diagnostic.toFixed(1).padStart(11) + " h");
}
console.log("   Même équipe, même volume de travail, même rythme de frappe : on n'a");
console.log("   changé QUE la fréquence de livraison, et les deux indicateurs de");
console.log("   STABILITÉ suivent la vitesse. Le compromis supposé entre les deux");
console.log("   n'existe pas — c'est l'accumulation en gros lots qui produit à la");
console.log("   fois la lenteur et l'instabilité.");

console.log("");
console.log("— 3. le piège de mesure —");
const avant = { frequence: 4 / 4.3, delai: 300, tauxEchec: 0.10, retablissement: 40 };
const apres = { frequence: 30 / 4.3, delai: 40, tauxEchec: 0.45, retablissement: 40 };
for (const [nom, i] of [["avant", avant], ["après", apres]]) {
  const c = classer(i);
  console.log("   " + nom + " : fréquence " + c.frequence.padEnd(8) +
    " | délai " + c.delai.padEnd(8) + " | échec " + c.tauxEchec);
}
console.log("   La vitesse a bondi, la stabilité s'est effondrée : l'équipe a");
console.log("   déplacé le problème, pas amélioré son flux. Les quatre indicateurs");
console.log("   se lisent ENSEMBLE, jamais un seul — et jamais pour évaluer");
console.log("   quelqu'un, sous peine de les rendre immédiatement inutiles.");

En travaux pratiques

Le fil rouge du semestre est une petite application web de suivi de tickets — tickets — qu'on empaquettera, testera, déploiera, orchestrera et supervisera. Cette première séance ne touche pas encore au code : elle installe le vocabulaire de mesure sur lequel tout le reste s'appuiera.

Travaux pratiques 1 · 1 h

Mesurer avant de changer quoi que ce soit

Calculer les quatre indicateurs DORA sur un dépôt réel, puis rédiger un post-mortem sans blâme à partir d'un incident fourni.

Avant de commencer

  • Git installé, et un dépôt public actif de votre choix cloné en local
  • Un tableur ou un langage de script pour les calculs

Énoncé

  1. Extraire l'historique des livraisonsClonez un dépôt public qui publie des versions étiquetées, et sortez la liste de ses étiquettes avec leur date. Vous voulez une ligne par livraison. Indice : git tag --sort=creatordate --format='%(creatordate:short) %(refname:short)' donne exactement cela.
  2. Calculer la fréquence de déploiementSur les six derniers mois, combien de livraisons par semaine ? Situez le résultat dans les paliers du cours : élite, haute, moyenne, faible.
  3. Calculer le délai de livraisonPour cinq étiquettes prises au hasard, mesurez l'écart entre la date du commit le plus ancien qu'elles contiennent et la date de l'étiquette. C'est une approximation du délai entre l'écriture et la mise à disposition. Indice : git log --format=%ci v1.2.0..v1.3.0 | tail -1 donne la date du premier commit de l'intervalle.
  4. Estimer les deux indicateurs de stabilitéCherchez les versions correctives publiées moins de 48 h après une version : ce sont vos candidats « échec de changement ». Le délai entre les deux approxime le temps de rétablissement.
  5. Rédiger un post-mortemÀ partir de l'incident fourni ci-dessous, écrivez un compte rendu en cinq parties. INCIDENT : le 14 mars à 10 h 04, un déploiement fait passer le taux d'erreur de 0,1 % à 4 %. L'alerte part à 10 h 31. La cause est comprise à 10 h 44 : une migration a renommé une colonne, et l'ancienne version des travailleurs de fond, non redéployée, échouait. Retour arrière à 10 h 46 — sans effet, la colonne étant déjà renommée. Correctif appliqué à 11 h 20. Indice : Les cinq parties : ce qui s'est passé, la chronologie, l'impact MESURÉ, pourquoi c'était possible, et les actions avec responsable et échéance.

C'est réussi quand

  • Vos quatre indicateurs sont chiffrés, et vous savez dire dans quel palier se situe le dépôt
  • Votre post-mortem ne nomme personne
  • Chacune de vos actions correctives est vérifiable et porte une échéance

Correction

Extraction des livraisonsterminal
git tag --sort=creatordate \
--format='%(creatordate:short) %(refname:short)' | tail -40

# Délai de livraison pour une étiquette donnée
git log --format=%ci v1.2.0..v1.3.0 | tail -1   # premier commit
git log -1 --format=%ci v1.3.0                   # publication

Le calcul est approximatif, et c'est acceptable : ces indicateurs servent à situer une tendance, pas à produire un chiffre à la décimale. Ce qui compte est de les recalculer de la même façon chaque mois.

Ce que révèle presque toujours le calcul

Les quatre indicateurs vont dans le même sens. Un dépôt qui publie une fois par trimestre affiche aussi un délai de plusieurs semaines et des correctifs d'urgence fréquents — c'est le résultat central du chapitre, et le voir sur un vrai dépôt vaut mieux que de le lire.

Post-mortem — les quatre premières parties

CE QUI S'EST PASSÉ : une migration renommant une colonne a été déployée avec l'application web, mais les travailleurs de fond sont restés sur la version précédente et ont échoué sur chaque tâche. CHRONOLOGIE : panne 10 h 04, alerte 10 h 31 (27 min de détection), diagnostic 10 h 44, retour arrière inefficace 10 h 46, rétablissement 11 h 20. IMPACT : 4 % des requêtes en erreur pendant 76 minutes, environ 3 000 tâches de fond perdues. POURQUOI C'ÉTAIT POSSIBLE : la migration était destructive et déployée en une seule étape ; les deux composants ne sont pas déployés ensemble ; le retour arrière n'avait jamais été testé avec une migration.

Post-mortem — les actions, et ce qui les distingue d'un vœu

Chaque action nomme un responsable, une échéance et un critère de vérification. Par exemple : « les migrations destructives passent en trois étapes, règle vérifiée automatiquement dans le pipeline — équipe plateforme, 30 avril, critère : une migration DROP COLUMN fait échouer la vérification ». Comparez avec « être plus vigilant sur les migrations », qui n'engage rien et ne se vérifie pas.

La faute à ne pas commettre

Aucune phrase du compte rendu ne doit désigner une personne, même implicitement — « le développeur qui a écrit la migration » en désigne une. La question n'est pas qui a fait la migration mais pourquoi le système a permis qu'une migration destructive parte en une seule étape, sans que rien ne l'en empêche.

Ce que la suite en fait

Le chapitre 2 remet à niveau les outils que tout le reste suppose — la ligne de commande, le réseau, et surtout Git, dont la stratégie de branchement décide directement de la taille des lots dont ce chapitre vient de parler.

Les blocs II à V construisent ensuite le flux, dans l'ordre où une modification le parcourt : empaquetée, vérifiée, livrée, déployée sur une infrastructure décrite, orchestrée. Et le bloc VI y ajoute ce sans quoi rien n'est mesurable — c'est là que les indicateurs de ce chapitre cessent d'être un tableau pour devenir un graphique qu'on regarde.

À retenir

Flashcards · 5 cartes

Quel problème le DevOps résout-il, et pourquoi les deux camps ont-ils raison ?
Une contradiction d'ORGANISATION : le développement est payé pour livrer vite, l'exploitation pour ne rien casser. Les deux objectifs sont légitimes et opposés, d'où des livraisons rares, grosses et redoutées. Le DevOps n'est ni un outil ni un métier : c'est la réponse à cette contradiction, et l'outillage n'en est que la conséquence.
Pourquoi livrer rarement augmente-t-il le risque au lieu de le réduire ?
Parce que la TAILLE DU LOT augmente. Un lot de trois mois change deux cents fichiers : impossible à relire, à tester exhaustivement, à diagnostiquer quand il échoue, et impossible à annuler puisque revenir en arrière signifierait perdre trois mois. En prime, une équipe qui livre quatre fois par an n'a que quatre occasions annuelles d'apprendre, contre deux cent cinquante pour une livraison quotidienne.
Énoncez les trois voies du DevOps.
LE FLUX : optimiser le trajet complet du commit à la production, pas chaque étape isolément — le goulot d'étranglement décide du tout, comme dans la loi d'Amdahl. LA RÉTROACTION : raccourcir la boucle entre une erreur et sa détection, un bogue coûtant une minute à l'écriture, une heure en recette, une journée en production. L'APPRENTISSAGE CONTINU : faire de chaque incident une amélioration plutôt qu'une sanction.
Quels sont les quatre indicateurs DORA, et que faut-il en savoir ?
VITESSE : fréquence de déploiement, et délai entre le commit et la production. STABILITÉ : taux d'échec des changements, et temps de rétablissement. Résultat central : les deux vont ENSEMBLE — les équipes qui livrent le plus souvent cassent le moins et réparent le plus vite. Deux mises en garde : ils mesurent une ÉQUIPE et un système, jamais une personne, et ils se prennent ENSEMBLE — améliorer la fréquence en dégradant le taux d'échec n'est pas un progrès.
Qu'est-ce qu'un post-mortem sans blâme, et que contient-il ?
Le principe : SUPPOSER que chacun a agi au mieux compte tenu de ce qu'il savait. L'erreur humaine n'est pas une explication mais un point de départ — pourquoi le système a-t-il permis, voire favorisé, cette erreur ? Chercher le responsable a un effet mécanique : plus personne ne signale ses erreurs, chacun évite les opérations risquées, les lots grossissent. Cinq parties : ce qui s'est passé, quand, l'impact MESURÉ, pourquoi c'était possible, et les ACTIONS avec responsable et échéance — sans la dernière, c'est un rapport, pas un apprentissage.