

- Description
- Tableau de bord d’un petit avion, avec ses cadrans, ses manettes et ses rangées de commutateurs.
- Source
- U.S. Fish and Wildlife Service · page d’origine
- Licence
- PD Domaine public
Métriques et reporting de projet
Vous saurez calculer et interpréter vélocité, burndown/burnup, diagramme de flux cumulé, lead time, cycle time, throughput, WIP, et leurs liens (loi de Little).
En bref
- Vous saurez calculer et interpréter vélocité, burndown/burnup, diagramme de flux cumulé, lead time, cycle time, throughput, WIP, et leurs liens (loi de Little).
- Vous connaîtrez les métriques DORA et leurs limites hors contexte logiciel pur.
- Vous saurez mesurer la qualité des estimations et la santé du backlog.
- Vous disposerez de métriques propres aux projets data : fraîcheur, incidents de données, taux de rejet, écarts de recette.
- Vous saurez ne pas vous faire piéger par la loi de Goodhart, et construire un tableau de bord Power BI sur Azure DevOps.
Contexte de notation : équipe de 5 à 15 personnes, data/BI. Les notes /5 sont des appréciations (voir NOTATION).
Sur cette page
- 🟢 Novice — Pourquoi mesurer, et quoi
- 🟡 Pratique — Vélocité, burndown, burnup
- 🟡 Pratique — Flux : CFD, lead/cycle time, throughput, WIP
- 🟡 Pratique — DORA et métriques de livraison
- 🟡 Pratique — Qualité des estimations
- 🟡 Pratique — Santé du backlog
- 🔴 Expert — Métriques propres aux projets data
- 🔴 Expert — Loi de Goodhart et usages pervers
- 🔴 Expert — Tableaux de bord Power BI sur Azure DevOps
- Métriques — quelles métriques valent leur coût ?
- 🤖 Contribution de l'IA
- Voir aussi
Niveau : 🟢→🔴
🟢 Novice — Pourquoi mesurer, et quoi#
Mesurer sert à décider et à apprendre, pas à surveiller. Une bonne métrique répond à une question que l'équipe se pose réellement : « livrons-nous de façon prévisible ? », « où le travail attend-il ? », « la qualité baisse-t-elle ? ». Avant de choisir un indicateur, écrivez la question et la décision que la réponse peut changer ; sans décision, ne mesurez pas.
Trois familles :
| Famille | Question | Exemples |
|---|---|---|
| Flux | à quelle vitesse et avec quelle régularité le travail traverse-t-il ? | lead time, cycle time, throughput, WIP, âge des éléments |
| Valeur et qualité | ce qu'on livre sert-il, et est-ce fiable ? | défauts échappés, incidents, taux de rejet, satisfaction, adoption |
| Prédiction | atteindrons-nous l'objectif ? | vélocité, burndown/burnup, prévision probabiliste |
Préférez peu de métriques, lues en tendance, à beaucoup de métriques lues en valeur absolue. Une valeur isolée (« cycle time = 6 jours ») ne dit rien ; sa distribution et sa tendance disent tout.
🟢 Définitions de base#
| Terme | Définition | Début → fin |
|---|---|---|
| Lead time | durée totale pour le demandeur | création de la demande → livraison |
| Cycle time | durée de travail de l'équipe | début du travail → fin |
| Throughput (débit) | nombre d'éléments terminés par période | éléments/semaine |
| WIP | éléments commencés non terminés | stock à l'instant t |
| Vélocité | points de stories terminées par sprint | somme des points « Done » du sprint |
| Temps d'attente | part du lead time sans travail actif | lead time − temps actif |
Symptôme : deux équipes comparent un « cycle time » qui n'a pas le même sens. Cause : les bornes (début, fin) ne sont pas les mêmes. Remède : écrire, dans le wiki, l'état de début et l'état de fin de chaque métrique ; elles doivent être identiques entre équipes qu'on compare.
🟡 Pratique — Vélocité, burndown, burnup#
Vélocité#
Vélocité du sprint n = Σ points des stories « Done » à la clôture du sprint n
Vélocité de référence = moyenne (ou médiane) des 3 à 5 derniers sprints
Fourchette = [min ; max] des derniers sprints, plus parlante que la moyenne
La vélocité est un outil de planification locale de l'équipe, pas un indicateur de performance, ni un moyen de comparer deux équipes (les points n'ont pas la même unité d'une équipe à l'autre). Elle devient fiable après 4 à 6 sprints stables (même équipe, même durée).
Vélocités des 5 derniers sprints : 21, 18, 25, 20, 22 → moyenne 21,2 ; médiane 21 ; fourchette 18–25. Un backlog de 190 points restants donne une plage de ≈ 7,6 à 10,6 sprints, soit environ 8 à 11 sprints. Annoncez la plage, pas le chiffre moyen.
Burndown de sprint#
Courbe du reste à faire (heures ou points) par jour du sprint, comparée à la droite idéale. Lire : une falaise en fin de sprint = travail non décomposé ou mises à jour tardives ; un plat prolongé = blocage ou tâches trop grosses ; une remontée = ajout de périmètre.
Burnup (à privilégier)#
Deux courbes : travail terminé cumulé et périmètre total. Contrairement au burndown, le périmètre est visible : une ligne de périmètre qui monte explique pourquoi la fin recule.
Points
200 ┤ ·· périmètre (monte : ajout)
150 ┤ ····
100 ┤ ····· /──── terminé (cumul)
50 ┤ /─────
0 ┼──┴───────────────────────────→ sprints
Pour une release qui évolue (courant dans les projets data où des sources se découvrent en cours de route), le burnup de release, accompagné d'une prévision probabiliste (voir plus bas), est plus honnête que n'importe quel diagramme de Gantt.
🟡 Pratique — Flux : CFD, lead/cycle time, throughput, WIP#
Diagramme de flux cumulé (CFD)#
Chaque bande représente un état (Backlog, En cours, En recette, Terminé) ; la hauteur d'une bande à une date = nombre d'éléments dans cet état. Lecture :
| Forme | Signification |
|---|---|
| Bandes parallèles | flux sain |
| Bande « En cours » qui s'élargit | WIP qui gonfle : accumulation |
| Bande « En recette » qui grossit | goulot de recette (fréquent en data : validation métier) |
| Palier horizontal de « Terminé » | rien n'est livré |
Loi de Little#
Lead time moyen = WIP moyen / Throughput moyen (régime stable)
Exemple : WIP = 12 éléments, throughput = 3 éléments/semaine → lead time moyen = 4 semaines
Pour diviser le lead time par 2 à débit constant : diviser le WIP par 2.
C'est l'argument fondamental en faveur des limites de WIP : réduire le travail en cours accélère la livraison sans que personne ne travaille plus vite. Voir méthodes agiles et Lean.
Lead time et cycle time : percentiles, pas moyenne#
Les durées sont asymétriques (queue lourde) ; la moyenne trompe. Utiliser les percentiles :
| Percentile | Lecture |
|---|---|
| 50 % (médiane) | cas typique |
| 85 % | « 85 % des éléments sont terminés en ≤ X jours » : base d'un engagement réaliste |
| 95 % | cas pénibles ; à analyser |
Le diagramme de dispersion (scatterplot, un point par élément terminé) rend ces seuils visibles.
Âge des éléments en cours (aging WIP)#
Pour chaque élément en cours : âge = aujourd'hui − date de début. Comparer à la plage 85 % : tout ce qui dépasse mérite une action maintenant (plus utile que le lead time, qui n'existe qu'après coup).
Prévision probabiliste (Monte Carlo)#
Plutôt que d'extrapoler une moyenne, rééchantillonner le débit historique pour estimer une plage de dates. Mini-script PowerShell pour illustrer :
# Prévision : combien de semaines pour terminer 40 éléments ? (débit historique par semaine)
$debits = 3,5,2,4,6,3,2,5,4,3 # éléments terminés par semaine, 10 semaines
$reste = 40; $essais = 10000; $res = @()
$rnd = New-Object System.Random 42
1..$essais | ForEach-Object {
$faits = 0; $sem = 0
while ($faits -lt $reste) { $faits += $debits[$rnd.Next(0,$debits.Count)]; $sem++ }
$res += $sem
}
$tri = $res | Sort-Object
"P50 = {0} sem ; P85 = {1} sem ; P95 = {2} sem" -f $tri[[int]($essais*0.50)], $tri[[int]($essais*0.85)], $tri[[int]($essais*0.95)]
Symptôme : la prévision est sans cesse démentie. Cause : l'historique n'est pas représentatif (équipe changée, éléments de tailles très hétérogènes, périodes de vacances). Remède : n'utiliser que des périodes comparables, découper les éléments à taille homogène (« right-sizing »), refaire la prévision à chaque période.
🟡 Pratique — DORA et métriques de livraison#
Les métriques DORA (programme de recherche DevOps Research and Assessment, popularisées par le livre Accelerate de Nicole Forsgren, Jez Humble et Gene Kim, 2018) mesurent la performance de livraison logicielle. Les quatre métriques historiques :
| Métrique | Question | Mesure |
|---|---|---|
| Fréquence de déploiement | à quelle fréquence livre-t-on en production ? | déploiements / jour ou semaine |
| Délai de mise en production (lead time for changes) | combien de temps entre le commit et la production ? | durée commit → déploiement en production |
| Taux d'échec des changements | quelle part des déploiements exige une intervention immédiate (retour arrière, correctif) ? | déploiements en échec / déploiements |
| Temps de rétablissement (failed deployment recovery time, ex-time to restore service) | combien de temps pour se rétablir d'un déploiement en échec ? | durée déploiement en échec → rétablissement |
DORA a depuis fait évoluer le jeu d'indicateurs : en 2023, le temps de rétablissement a été redéfini (rétablissement après un déploiement en échec, et non après toute panne) ; depuis le rapport 2024, DORA compte cinq métriques, avec le taux de reprise des déploiements (deployment rework rate : part des déploiements non planifiés consécutifs à un incident de production), réparties en débit (délai, fréquence, rétablissement) et instabilité (taux d'échec, taux de reprise). DORA met aussi en garde contre l'usage de ces métriques comme objectifs et contre les comparaisons entre applications très différentes.
DORA hors contexte. Symptôme : on reprend les seuils « élite » (déployer plusieurs fois par jour) pour un datamart livré en kits mensuels. Cause : les seuils sont construits sur des organisations logicielles à déploiement continu. Remède : conserver l'esprit (réduire la taille des lots, automatiser, raccourcir le rétablissement) et suivre sa propre tendance ; la fréquence cible d'un kit d'installation n'est pas celle d'une application web. Voir CI/CD pour la data.
🟡 Pratique — Qualité des estimations#
Une estimation est un pari avec une marge. Mesurer sa qualité aide à l'améliorer sans en faire une vérité.
| Indicateur | Formule | Interprétation |
|---|---|---|
| Taux de réalisation de l'engagement | points terminés / points engagés au sprint | 80–100 % stable : sain ; < 70 % chronique : sur-engagement |
| Biais d'estimation | Σ(réel − estimé) / Σ estimé | > 0 : sous-estimation systématique |
| Dispersion | écart-type de (réel/estimé) | forte : estimations peu fiables → redécouper |
| Part du périmètre ajouté en sprint | points ajoutés / points engagés | élevé : interruptions ou mauvais raffinement |
| Taux de réestimation | éléments réestimés / éléments | élevé : exigences instables |
Comparez l'estimation avec le cycle time réel par taille (S/M/L). Si les « M » prennent de 2 à 15 jours, la taille n'a aucun pouvoir prédictif : mieux vaut découper que mieux estimer. Voir planification et estimation (matrice).
🟡 Pratique — Santé du backlog#
| Indicateur | Formule / requête | Seuil d'attention (repère, à calibrer) |
|---|---|---|
| Profondeur | éléments prêts / vélocité | < 2 sprints de prêt : risque de rupture ; > 6 sprints : stock inutile |
| Âge moyen | moyenne de (aujourd'hui − création) | croissance continue = stock qui vieillit |
| Éléments sans mouvement > 6 mois | ChangedDate < today−180 |
à fermer ou raffiner |
| Taux de prêt | éléments avec critères d'acceptation / total du haut du backlog | < 80 % : raffinement insuffisant |
| Ratio bugs ouverts / stories livrées | tendance | croissant : dette qualité |
| Éléments sans parent | requête de liens | traçabilité cassée |
Fixer une taille maximale du backlog (par exemple, 3 mois de travail) : tout ce qui dépasse est archivé. Le backlog n'est pas une archive de souhaits.
🔴 Expert — Métriques propres aux projets data#
Un projet de datamart ou de reporting a des objets de mesure que les métriques logicielles ignorent. Voir aussi conduite de projet data (matrice).
| Métrique | Définition | Formule | Pourquoi |
|---|---|---|---|
| Fraîcheur (freshness) | âge de la donnée la plus récente par rapport à l'heure attendue | maintenant − max(date_chargement) |
première question des utilisateurs |
| Respect de la fenêtre de chargement | part des chargements terminés avant l'heure limite | chargements à l'heure / chargements |
engagement de service |
| Incidents de données | nombre d'incidents (valeurs fausses, manquantes, doublons) par période, par criticité | comptage + MTTR | santé qualité |
| Taux de rejet | lignes rejetées / lignes lues à l'intégration | rejets / lus |
contrat de données, dérive de source |
| Complétude | part des champs critiques renseignés | non nuls / total |
qualité |
| Unicité / duplication | clés en double / lignes | doublons / lignes |
intégrité |
| Réconciliation | écart entre total source et total cible | |Σ source − Σ cible| |
justesse des chiffres |
| Écart de recette | écart entre chiffre de référence et chiffre du rapport | |rapport − référence| |
validation métier |
| Temps de rejeu | durée pour rejouer un chargement après correction | minutes/heures | résilience |
| Taux d'adoption | utilisateurs actifs / utilisateurs cibles | par rapport et par mois | valeur réelle |
| Défauts échappés | anomalies relevées par les utilisateurs après livraison | par kit | qualité de recette |
Exemple T-SQL de mesure de fraîcheur et de taux de rejet à partir d'une table de journal (conventionnelle, adapter aux noms réels) :
-- Fraîcheur par table cible (en heures) et dépassement du seuil
SELECT j.Table_Cible,
MAX(j.Date_Fin_Chargement) AS Dernier_Chargement,
DATEDIFF(HOUR, MAX(j.Date_Fin_Chargement), SYSDATETIME()) AS Age_Heures,
CASE WHEN DATEDIFF(HOUR, MAX(j.Date_Fin_Chargement), SYSDATETIME()) > s.Seuil_Heures
THEN 1 ELSE 0 END AS Hors_Seuil
FROM [dbo].[Journal_Chargement] AS j WITH (NOLOCK)
JOIN [dbo].[Seuil_Fraicheur] AS s WITH (NOLOCK) ON s.Table_Cible = j.Table_Cible
WHERE j.Statut = 'OK'
GROUP BY j.Table_Cible, s.Seuil_Heures;
-- Taux de rejet par source et par jour
SELECT CAST(j.Date_Debut AS date) AS Jour,
j.Source,
SUM(j.Lignes_Rejetees) * 1.0 / NULLIF(SUM(j.Lignes_Lues), 0) AS Taux_Rejet
FROM [dbo].[Journal_Chargement] AS j WITH (NOLOCK)
GROUP BY CAST(j.Date_Debut AS date), j.Source;
Un datamart alimenté par une application SFA est consolidé chaque nuit. Mesures suivies sur 8 semaines : fenêtre respectée 96 % des nuits (engagement 95 %) ; taux de rejet médian 0,2 % mais un pic à 3 % le lendemain d'une montée de version de l'application source (dérive de schéma) ; deux incidents de réconciliation (écart > 0,1 % sur le chiffre d'affaires) traités en < 4 h. Les pics de rejet déclenchent désormais une alerte avant que les utilisateurs ne constatent le trou.
Symptôme : tous les voyants sont verts mais les utilisateurs se plaignent de chiffres faux. Cause : on mesure l'exécution (le traitement a tourné) et non la justesse (le résultat est correct). Remède : ajouter des contrôles de réconciliation et des tests sur chiffres de référence, pas seulement des statuts d'exécution.
🔴 Expert — Loi de Goodhart et usages pervers#
« Quand une mesure devient un objectif, elle cesse d'être une bonne mesure. » — loi de Goodhart (formulation courante, attribuée à Marilyn Strathern, 1997, pour cette version).
| Métrique | Détournement typique | Parade |
|---|---|---|
| Vélocité | gonflement des points, découpage artificiel | ne jamais la comparer entre équipes ni la lier à des primes |
| Nombre de tickets fermés | tickets découpés en miettes, fermés sans valeur | mesurer la valeur livrée et les défauts échappés en même temps |
| Couverture de test | tests sans assertion | combiner avec le taux de défauts échappés |
| Lead time | éléments « rouverts » en nouveaux tickets | suivre aussi les réouvertures |
| Taux de rejet bas | règles de rejet assouplies | vérifier la complétude en aval |
| Heures saisies | saisie « de conformité » | mesurer le flux, pas les heures |
Règles de défense : (1) mesurer en paires (vitesse + qualité), (2) afficher la tendance, (3) garder les métriques pour l'équipe d'abord, (4) revoir régulièrement : retirez toute métrique qui ne nourrit plus de décision, (5) distinguer métriques de diagnostic (explorées) et objectifs (rares, peu nombreux).
🔴 Expert — Tableaux de bord Power BI sur Azure DevOps#
Source : flux OData Analytics (voir Azure DevOps en profondeur). Modèle recommandé : WorkItemSnapshot (fait de flux quotidien), WorkItem (courant), Iteration, Area, User, Date.
Pages utiles : (1) Sprint en cours (burndown, capacité, bloqués), (2) Flux (CFD, WIP, âge des éléments, scatterplot de cycle time), (3) Qualité (bugs ouverts, vieillissement, défauts échappés, cas de test), (4) Release / burnup (périmètre vs terminé), (5) Santé du backlog.
Mesures DAX typiques :
WIP actuel =
CALCULATE ( DISTINCTCOUNT ( WorkItem[WorkItemId] ),
WorkItem[State] IN { "Active", "In Progress", "Committed" } )
Throughput hebdo =
CALCULATE ( DISTINCTCOUNT ( WorkItem[WorkItemId] ),
WorkItem[CompletedDate] <> BLANK(),
DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -7, DAY ) )
Cycle time P85 (jours) =
PERCENTILEX.INC ( FILTER ( WorkItem, NOT ISBLANK ( WorkItem[CycleTimeDays] ) ),
WorkItem[CycleTimeDays], 0.85 )
Taux d'engagement tenu =
DIVIDE ( [Points terminés du sprint], [Points engagés au démarrage] )
Bonnes pratiques de conception, détaillées dans bonnes pratiques Power BI transverses : un modèle en étoile, pas d'import de toutes les révisions, mesures explicites, un thème sobre, annotations des événements (changement d'équipe, vacances) pour expliquer les ruptures.
Placer sur la première page : la décision supportée (« Pouvons-nous tenir la date de la release ? »), 3 à 5 indicateurs, leur tendance, et un texte d'interprétation rédigé par un humain. Un graphique sans lecture est une décoration.
Métriques — quelles métriques valent leur coût ?#
| Métrique | Utilité | Effort de collecte | Risque de détournement | Note de rapport utilité/coût |
|---|---|---|---|---|
| Cycle time (percentiles) | forte | faible si états fiables | moyen | 5/5 |
| Throughput + WIP | forte | faible | faible | 5/5 |
| Âge des éléments en cours | forte | faible | faible | 5/5 |
| Burnup de release | forte | faible à moyen | moyen | 4/5 |
| Vélocité | moyenne (locale) | faible | élevé | 3/5 |
| Burndown de sprint | moyenne | moyen (mise à jour des tâches) | moyen | 3/5 |
| DORA (logiciel) | forte si CD | moyen à élevé | moyen | 3/5 pour un datamart en kits |
| Heures saisies | faible | élevé | élevé | 1/5 |
| Fraîcheur / réconciliation (data) | très forte | moyen | faible | 5/5 |
🤖 Contribution de l'IA#
| Cas d'usage | Gain /5 | Risque /5 | Maturité /5 | Garde-fous |
|---|---|---|---|---|
| Rédiger l'interprétation d'un tableau de bord | 4 | 3 | 4 | l'humain valide ; l'IA ne doit pas inventer des causes |
| Détecter des anomalies de flux (WIP, âge) | 3 | 2 | 3 | seuils expliqués, faux positifs suivis |
| Prévision de livraison | 3 | 4 | 3 | rester sur des méthodes explicables (Monte Carlo) ; ne pas masquer l'incertitude |
| Rédiger des requêtes DAX/WIQL/OData | 3 | 2 | 4 | tester sur échantillon |
| Résumé de rétrospective à partir des métriques | 3 | 2 | 4 | ne remplace pas la discussion d'équipe |
Voir 11 — IA et outils.
Voir aussi#
- Panorama · Azure DevOps en profondeur · Jira et alternatives · Comparatif
- Scrum en pratique · Scrum et data · CI/CD
- Qualité des données (matrice) · Gouvernance et pilotage (matrice) · Glossaire
✻ Rédigé par Claude Sonnet 5.5