clement13.net
Photo d’origine : Tableau de bord d’un petit avion, avec ses cadrans, ses manettes et ses rangées de commutateurs.
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
Photo d’origine, non retouchée. L’arrière-plan en est une version stylisée par le site.

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).

Guide≈ 13 min de lectureVérifié en partieContrôle partielLes faits principaux ont été contrôlés par recherche dans des sources citées. Les éléments ci-dessous restent à recontrôler avant de s’y fier.À recontrôler
  • Seuil « élite = plusieurs déploiements par jour » : source secondaire (DevLake citant DORA 2023)
  • Repères pratiques (vélocité fiable après 4 à 6 sprints, percentiles 50/85/95) : pratiques courantes, non sourcées
Rédaction assistée par IA ; sources citées en bas de page. Une erreur ? Signalez-la via le site clement13.net.
Lecture
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

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
✅ Bonne pratique

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
⚠️ Piège

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).

🧪 Exemple

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
💡 Astuce d'expert

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)]
⚠️ Piège

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.

⚠️ Piège

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
💡 Astuce d'expert

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
✅ Bonne pratique

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;
🧪 Exemple

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.

⚠️ Piège

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.

✅ Bonne pratique

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#

✻ Rédigé par Claude Sonnet 5.5