Aller au contenu
Culture DevOps high
🚧 Section en cours de réécriture — Le contenu est en cours de restructuration et peut évoluer.

Implémentation des métriques DORA

30 min de lecture

En 2022, une équipe e-commerce déployait une fois par mois avec un taux d’échec de 35%. Après 6 mois de mesure et d’amélioration basées sur les métriques DORA, elle atteignait 12 déploiements quotidiens avec seulement 3% d’échecs. Ces quatre indicateurs, validés par des années de recherche sur plus de 36 000 professionnels, représentent aujourd’hui le standard incontournable pour mesurer la performance de livraison logicielle.

Les métriques DORA (DevOps Research and Assessment) ne sont pas de simples chiffres à afficher sur un dashboard. Elles constituent un système de diagnostic qui révèle la santé de votre pipeline de livraison. Pensez-y comme aux constantes vitales d’un patient : la fréquence cardiaque (Deployment Frequency), le temps de réaction (Lead Time), le taux d’erreur (Change Failure Rate) et le temps de récupération (MTTR). Ensemble, ces indicateurs racontent une histoire cohérente sur votre capacité à livrer de la valeur rapidement et de manière fiable.

Ce guide vous accompagne pas à pas dans l’implémentation concrète de ces métriques, depuis la collecte des données brutes jusqu’à la création d’un dashboard actionnable.

Avant de commencer l’implémentation, assurez-vous de disposer des éléments suivants :

Avant de plonger dans l’implémentation technique, comprenons pourquoi ces quatre métriques spécifiques ont été choisies parmi des centaines de mesures possibles.

Le programme DORA, initié par Gene Kim, Jez Humble et Nicole Forsgren, a analysé les pratiques de milliers d’organisations pendant plus de 6 ans. La conclusion est sans appel : les équipes “Elite” livrent 208 fois plus fréquemment que les équipes les moins performantes, avec un temps de récupération 2 604 fois plus rapide.

Ces métriques fonctionnent en binôme selon deux dimensions. Les deux premières (Deployment Frequency et Lead Time) mesurent votre throughput — c’est-à-dire votre vélocité de livraison de valeur. Les deux dernières (Change Failure Rate et MTTR) mesurent votre stability — c’est-à-dire la fiabilité de ce que vous livrez. L’objectif n’est pas d’optimiser l’une au détriment de l’autre, mais d’améliorer les deux simultanément.

Vue d'ensemble des 4 métriques DORA : throughput vs stability

Le tableau suivant résume chaque métrique et ce qu’elle mesure concrètement :

MétriqueCe qu’elle mesureDimension
Deployment Frequency (DF)Nombre de déploiements réussis en productionThroughput
Lead Time for Changes (LT)Temps entre le premier commit et la mise en productionThroughput
Change Failure Rate (CFR)Pourcentage de déploiements causant des incidentsStability
Mean Time to Recover (MTTR)Durée moyenne pour restaurer le service après incidentStability

Comment savoir si vos métriques sont bonnes ? Le tableau ci-dessous définit les quatre niveaux de performance identifiés par la recherche DORA. Votre objectif est de progresser graduellement vers le niveau Elite :

MétriqueLowMediumHighElite
Deployment Frequency< 1/mois1/semaine - 1/mois1/jour - 1/semaineMultiple/jour
Lead Time> 6 mois1-6 mois1 jour - 1 semaine< 1 jour
Change Failure Rate> 30%16-30%0-15%0-15%
MTTR> 6 mois1 jour - 1 semaine< 1 jour< 1 heure

La Deployment Frequency mesure combien de fois vous déployez en production sur une période donnée. C’est la métrique la plus simple à collecter, mais aussi la plus révélatrice de votre maturité DevOps.

Imaginez la fréquence de déploiement comme le pouls de votre équipe. Un pouls faible (1 déploiement par mois) indique souvent des processus lourds, des peurs du changement, ou une dette technique importante. Un pouls rapide (plusieurs fois par jour) révèle une équipe confiante dans ses tests, son automatisation et sa capacité à corriger rapidement les problèmes.

La clé d’une bonne mesure est l’automatisation. Chaque déploiement doit envoyer un événement vers votre système de métriques. Voici comment l’implémenter selon votre plateforme CI/CD :

.github/workflows/deploy.yml
name: Deploy to Production
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy application
run: ./deploy.sh
- name: Track deployment metric
if: success()
run: |
curl -X POST "${{ secrets.METRICS_ENDPOINT }}/deployments" \
-H "Content-Type: application/json" \
-d '{
"timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'",
"environment": "production",
"service": "${{ github.repository }}",
"commit_sha": "${{ github.sha }}",
"status": "success"
}'

Si votre fréquence est trop basse, identifiez le goulot d’étranglement principal :

SymptômeCause probableSolution
Déploiements groupés le vendrediPeur du changementFeature flags, rollback automatique
Batches de 50+ commitsRevues de code trop longuesLimiter la taille des PRs à 400 lignes
Tests qui durent 2+ heuresSuite de tests non optimiséeParallélisation, tests par impact
Approbations manuelles multiplesProcessus bureaucratiqueTrunk-based development, confiance automatisée

Le Lead Time mesure le temps écoulé entre le premier commit d’un changement et son déploiement en production. Cette métrique révèle la fluidité de votre pipeline de bout en bout.

Pensez au Lead Time comme au temps de trajet d’un colis. De la commande (commit) à la livraison (production), chaque étape ajoute du délai : la revue de code, les tests, les approbations, le déploiement lui-même. Un Lead Time de 6 mois signifie que vos clients attendent 6 mois pour bénéficier d’une correction de bug. Un Lead Time de quelques heures signifie que vous pouvez réagir rapidement aux retours utilisateurs.

Le calcul du Lead Time nécessite de corréler les commits aux déploiements. Voici la logique :

# Exemple de calcul Lead Time
calcul_lead_time:
# 1. Identifier le déploiement
deployment:
id: "deploy-123"
commit_sha: "abc123"
deploy_time: "2024-06-15T14:00:00Z"
# 2. Trouver le premier commit de la PR/branche associée
first_commit:
sha: "def456"
time: "2024-06-14T10:00:00Z"
# 3. Calculer la différence
lead_time: "28 heures"
import requests
from datetime import datetime
def calculate_lead_time(owner: str, repo: str, deployment_sha: str) -> float:
"""
Calcule le Lead Time en heures pour un déploiement donné.
Le Lead Time est mesuré du premier commit de la PR
jusqu'au timestamp du déploiement en production.
"""
headers = {"Authorization": f"token {GITHUB_TOKEN}"}
# Étape 1 : Trouver la PR associée au commit déployé
pr_response = requests.get(
f"https://api.github.com/repos/{owner}/{repo}/commits/{deployment_sha}/pulls",
headers=headers
)
if not pr_response.json():
return None # Commit direct sans PR
pr = pr_response.json()[0]
# Étape 2 : Récupérer tous les commits de cette PR
commits_response = requests.get(
pr['commits_url'],
headers=headers
)
commits = commits_response.json()
# Le premier commit est le plus ancien
first_commit_date = commits[0]['commit']['committer']['date']
# Étape 3 : Récupérer le timestamp du déploiement
deploy_time = get_deployment_timestamp(deployment_sha)
# Étape 4 : Calculer la différence
first_commit = datetime.fromisoformat(first_commit_date.replace('Z', '+00:00'))
deployed = datetime.fromisoformat(deploy_time.replace('Z', '+00:00'))
lead_time_hours = (deployed - first_commit).total_seconds() / 3600
return lead_time_hours

Le Lead Time se décompose en plusieurs phases. Identifiez laquelle consomme le plus de temps :

PhaseDurée typique problématiqueOptimisation
CodePRs de 1000+ lignesTrunk-based development, PRs < 400 lignes
Review> 48h en attenteLimiter le WIP, reviews < 24h, pair programming
Build> 30 minutesCache des dépendances, builds incrémentaux
Tests> 1 heureParallélisation, tests par impact, shift-left
DeployManuel, > 1 jourAutomatisation complète, GitOps

Le Change Failure Rate mesure le pourcentage de déploiements qui causent un incident en production ou nécessitent un rollback. C’est l’indicateur de la qualité de ce que vous livrez.

Imaginez le CFR comme votre taux de retour produit. Si vous envoyez 100 colis et que 30 reviennent pour défaut, vous avez un problème de qualité. De même, si 30% de vos déploiements causent des incidents, vos processus de validation sont insuffisants.

# Calcul du Change Failure Rate
periode: "2024-06"
statistiques:
deployments_total: 100
deployments_failed:
rollbacks: 3
incidents_lies: 2
hotfixes: 1
total_failures: 6
# CFR = (failures / total) × 100
change_failure_rate: "6%"

La difficulté du CFR réside dans la corrélation entre déploiements et incidents. Voici deux approches :

# Annotations sur les Deployments Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
# Identifiant unique du déploiement
metrics.dora/deployment-id: "deploy-2024-06-15-001"
# Statut mis à jour en cas de problème
metrics.dora/status: "success" # ou "rolled-back", "failed"
# Timestamp pour corrélation
metrics.dora/deployed-at: "2024-06-15T14:00:00Z"

Un CFR élevé révèle des problèmes dans votre chaîne de qualité :

Cause fréquenteDiagnosticSolution
Tests insuffisantsCoverage < 60%Augmenter les tests E2E, tests de contrat
Erreurs de configurationConfigs différentes dev/prodInfrastructure as Code, validation pre-deploy
Changements trop grosPRs > 1000 lignesSmaller batches, feature flags
Environnements différents”Ça marche sur ma machine”Parité dev/staging/prod, containers
Données de test irréalistesTests passent, prod échoueAnonymisation de données prod, chaos engineering

Le MTTR mesure le temps moyen pour restaurer le service après un incident. C’est l’indicateur de votre résilience — votre capacité à rebondir quand les choses tournent mal.

Pensez au MTTR comme au temps de réponse des urgences. Face à un incendie, ce qui compte n’est pas qu’il ne se produise jamais (impossible), mais la rapidité avec laquelle les pompiers arrivent et maîtrisent la situation. Une équipe avec un MTTR de 6 mois laisse ses utilisateurs sans service pendant des mois. Une équipe Elite restaure le service en moins d’une heure.

# Calcul du MTTR mensuel
periode: "2024-06"
incidents:
- id: "INC-001"
detected_at: "2024-06-05T10:00:00Z"
resolved_at: "2024-06-05T10:45:00Z"
recovery_time: "45 minutes"
- id: "INC-002"
detected_at: "2024-06-12T14:30:00Z"
resolved_at: "2024-06-12T16:00:00Z"
recovery_time: "90 minutes"
- id: "INC-003"
detected_at: "2024-06-20T03:00:00Z"
resolved_at: "2024-06-20T03:20:00Z"
recovery_time: "20 minutes"
# MTTR = moyenne des temps de recovery
mttr: "(45 + 90 + 20) / 3 = 51.67 minutes"
import pdpyras
from datetime import datetime
from statistics import mean
def get_mttr_from_pagerduty(start_date: str, end_date: str) -> float:
"""
Récupère les incidents PagerDuty résolus et calcule le MTTR.
Ne prend en compte que les incidents de production résolus.
Retourne le MTTR en minutes.
"""
session = pdpyras.APISession(PAGERDUTY_TOKEN)
# Récupérer uniquement les incidents résolus
incidents = session.iter_all(
'incidents',
params={
'since': start_date,
'until': end_date,
'statuses[]': ['resolved'],
# Filtrer par service de production
'service_ids[]': PRODUCTION_SERVICE_IDS
}
)
recovery_times = []
for incident in incidents:
created = datetime.fromisoformat(incident['created_at'])
resolved = datetime.fromisoformat(incident['resolved_at'])
# Temps de recovery en minutes
recovery_minutes = (resolved - created).total_seconds() / 60
recovery_times.append(recovery_minutes)
if not recovery_times:
return 0.0
mttr = mean(recovery_times)
return round(mttr, 2)

Le MTTR se décompose en plusieurs phases. Chacune peut être optimisée :

PhaseCe qu’elle couvreLeviers d’amélioration
DétectionTemps avant de savoir qu’il y a un problèmeAlerting proactif, SLOs bien définis, monitoring synthétique
DiagnosticTemps pour comprendre la causeObservabilité complète (logs, traces, metrics), dashboards clairs
MitigationTemps pour arrêter l’hémorragieRollback automatique en 1 clic, feature flags, circuit breakers
RésolutionTemps pour corriger définitivementRunbooks à jour, escalation claire, post-mortems

Pour que vos métriques DORA soient fiables, vous devez mettre en place une architecture de collecte automatisée. Les données proviennent de sources diverses — votre gestionnaire de code, votre pipeline CI/CD, votre système d’incidents — et convergent vers un dashboard centralisé.

Architecture de collecte des métriques DORA

L’architecture de collecte DORA comprend quatre couches distinctes :

CoucheRôleExemples d’outils
SourcesÉmettent les événements brutsGitHub, GitLab, ArgoCD, PagerDuty, Opsgenie
CollecteurAgrège et normalise les donnéesScripts Python, OpenTelemetry, webhooks
StockageConserve les séries temporellesPrometheus, InfluxDB, TimescaleDB
VisualisationAffiche les dashboardsGrafana, Datadog, custom

Voici une configuration Grafana pour afficher les 4 métriques DORA. Chaque panel utilise des seuils colorés basés sur les niveaux de performance DORA :

{
"dashboard": {
"title": "DORA Metrics Dashboard",
"description": "Vue d'ensemble des 4 métriques DORA",
"panels": [
{
"title": "Deployment Frequency (7 jours)",
"type": "stat",
"description": "Nombre de déploiements réussis cette semaine",
"targets": [{
"expr": "sum(increase(deployments_total{env=\"production\", status=\"success\"}[7d]))"
}],
"thresholds": {
"steps": [
{"color": "red", "value": 0},
{"color": "orange", "value": 1},
{"color": "yellow", "value": 4},
{"color": "green", "value": 7}
]
}
},
{
"title": "Lead Time (heures)",
"type": "stat",
"description": "Temps moyen commit → production",
"targets": [{
"expr": "avg(deployment_lead_time_hours{env=\"production\"})"
}],
"thresholds": {
"steps": [
{"color": "green", "value": 0},
{"color": "yellow", "value": 24},
{"color": "orange", "value": 168},
{"color": "red", "value": 720}
]
}
},
{
"title": "Change Failure Rate (%)",
"type": "gauge",
"description": "Pourcentage de déploiements causant des incidents",
"targets": [{
"expr": "sum(deployments_failed_total) / sum(deployments_total) * 100"
}],
"thresholds": {
"steps": [
{"color": "green", "value": 0},
{"color": "yellow", "value": 15},
{"color": "orange", "value": 30},
{"color": "red", "value": 45}
]
}
},
{
"title": "MTTR (minutes)",
"type": "stat",
"description": "Temps moyen de restauration du service",
"targets": [{
"expr": "avg(incident_recovery_time_minutes)"
}],
"thresholds": {
"steps": [
{"color": "green", "value": 0},
{"color": "yellow", "value": 60},
{"color": "orange", "value": 1440},
{"color": "red", "value": 10080}
]
}
}
]
}
}

Plutôt que de construire votre propre solution de collecte, vous pouvez utiliser des outils spécialisés. Voici une comparaison des principales options :

OutilTypePoints fortsIdéal pour
SleuthSaaSAuto-découverte, setup en 10 minÉquipes qui veulent démarrer vite
LinearBSaaSMétriques engineering complètesÉquipes cherchant des insights dev
Faros AIOpen sourceFlexible, 100+ intégrationsOrganisations avec contraintes data
PortSaaSDeveloper portal + DORA intégréPlatform engineering mature
Four KeysOpen sourceCréé par Google, GCP-nativeÉquipes sur Google Cloud
HaystackOpen sourceSelf-hosted, privacy-firstOrganisations sensibles aux données

Four Keys est l’outil open source de référence, créé par l’équipe DORA chez Google. Il se déploie sur Google Cloud Platform :

Fenêtre de terminal
# Cloner le repository Four Keys
git clone https://github.com/GoogleCloudPlatform/fourkeys.git
cd fourkeys
# Configurer le projet GCP
export PROJECT_ID="mon-projet-dora"
export REGION="europe-west1"
# Lancer le script de déploiement
# Crée : BigQuery, Cloud Run, Pub/Sub, Cloud Build triggers
./setup/setup.sh
# Vérifier le déploiement
gcloud run services list --project=$PROJECT_ID

L’implémentation des métriques DORA n’est pas une fin en soi. L’objectif est d’utiliser ces données pour améliorer continuellement vos pratiques. Voici le cycle recommandé :

Cycle d'amélioration continue basé sur les métriques DORA

  1. Mesurer le baseline

    Collectez 2 à 4 semaines de données avant de tenter toute amélioration. Ce baseline vous permettra de mesurer l’impact réel de vos actions. Sans baseline, vous ne saurez jamais si vos changements ont eu un effet positif.

  2. Analyser les goulots

    Identifiez quelle métrique est la plus faible et pourquoi. Utilisez les données pour trouver les causes racines. Par exemple, si votre Lead Time est élevé, décomposez-le : est-ce le temps de review ? Le build ? Les tests ?

  3. Améliorer un processus

    Concentrez-vous sur une seule métrique à la fois. Implémentez un changement ciblé (ex: limiter la taille des PRs, paralléliser les tests) et donnez-lui le temps de produire des effets (2-4 semaines minimum).

  4. Valider les résultats

    Comparez les nouvelles mesures au baseline. Le changement a-t-il eu l’effet escompté ? Y a-t-il eu des effets secondaires sur les autres métriques ? Documentez les apprentissages.

Voici un plan réaliste pour implémenter les métriques DORA dans votre organisation :

  1. Semaine 1-2 : Instrumentation

    • Ajouter les webhooks de tracking dans vos pipelines CI/CD
    • Configurer la corrélation entre déploiements et incidents
    • Valider que les données arrivent correctement
  2. Semaine 3-4 : Baseline et Dashboard

    • Déployer un dashboard Grafana basique
    • Collecter le baseline sur 2 semaines complètes
    • Partager le dashboard avec les équipes (lecture seule)
  3. Mois 2 : Première amélioration

    • Identifier la métrique la plus faible
    • Choisir une action d’amélioration ciblée
    • Implémenter et mesurer l’impact
  4. Mois 3+ : Culture de l’amélioration

    • Instaurer une revue mensuelle des métriques
    • Définir des objectifs par équipe (réalistes)
    • Célébrer les améliorations, sans blâmer les régressions

Pour aller plus loin dans l’implémentation, consultez ces guides spécifiques :

RessourceDescription
DORA.devSite officiel du programme DORA avec outils et recherche
State of DevOps ReportRapport annuel avec les dernières données sur 36 000+ professionnels
Four KeysOutil open source de collecte DORA par Google
AccelerateLe livre fondateur par Nicole Forsgren, Jez Humble et Gene Kim

Les métriques DORA constituent le standard de mesure de la performance DevOps. Voici les points clés de ce guide :

  • 4 métriques mesurent votre performance : Deployment Frequency, Lead Time, Change Failure Rate, MTTR
  • 2 dimensions complémentaires : throughput (DF, LT) pour la vélocité, stability (CFR, MTTR) pour la fiabilité
  • Les équipes Elite déploient 208× plus fréquemment avec un MTTR 2 604× plus rapide
  • Collectez automatiquement via webhooks CI/CD et corrélation avec les incidents
  • Partagez le dashboard avec toutes les équipes pour créer une culture de la mesure
  • Améliorez une métrique à la fois pour voir l’impact réel
  • Les métriques DORA prédisent le succès organisationnel — ce n’est pas juste de la vanité