Bref, j’ai mis en place les DORA Metrics dans un grand groupe ! (REX 🩖)

Image abstraite représentant les metrics avec un tyrannosaure pour illustrer le REX

Nouvel article qui fait suite Ă  mon introduction aux DORA Metrics 🎉  Pour rappel, je vous avais dĂ©fini les 4 mĂ©triques (4 Keys) qui permettent de mesurer l'efficacitĂ© de la livraison logicielle:

Deployment Frequency | Lead Time for Changes | Mean Time to Restore | Change Failure Rate

Aujourd'hui, je vous partage mon retour d'expérience (REX) sur leur mise en place chez un client qui souhaitait objectiver et améliorer sa performance de livraison.

1. Comprendre l'organisation et dĂ©finir les concepts 🏱

L'organisation du groupe

Lorsque je suis arrivé chez ce client, j'ai pu constater qu'il y avait de nombreux produits (> 1000) avec des technologies hétérogÚnes. Mais d'ailleurs, c'est quoi un produit ? La premiÚre chose à faire a été de se mettre d'accord sur les définitions !

L'organisation de l'entreprise était la suivante :

  • Le groupe est divisĂ© en plateformes
  • Les plateformes sont divisĂ©es en domaines
  • Les domaines sont divisĂ©s en produits

AprÚs quelques ateliers avec le management et des projets pilotes, nous sommes tombés d'accord sur les définitions suivantes :

  • Plateforme : Niveau le plus haut de l'organisation, regroupe plusieurs domaines fonctionnels liĂ©s
  • Domaine : Regroupe des produits ayant des fonctionnalitĂ©s similaires ou complĂ©mentaires
  • Produit : PĂ©rimĂštre fonctionnel perceptible par l'utilisateur final, pour lequel les changements lui sont communiquĂ©s. Un produit peut ĂȘtre composĂ© de plusieurs composants (microservices ou briques monolithiques) et peut ĂȘtre dĂ©ployĂ© sur diffĂ©rents environnements de production

SchĂ©ma d’organisation d’un site e-commerce : la plateforme Commerce regroupe les domaines E-Commerce (catalogue, panier, commande web) et Magasins (catalogue, caisse, commande magasin) ; la plateforme Gestion Clients regroupe les domaines Comptes Clients (gestion client web, magasin, data compliance) et FidĂ©litĂ© (programme de fidĂ©litĂ©, newsletters).

Les cas d'usage identifiés

Une fois l'organisation de la société comprise et les concepts définis, il a fallu comprendre tous les cas d'usage des DORA Metrics avec des ateliers comme l'Example Mapping.

Tableau Example Mapping avec quatre catégories : User Stories (jaune), Rules (bleu), Examples (vert), Questions (rose), chacune contenant des post-its de la couleur correspondante.

â„č N’hĂ©sitez pas Ă  consulter notre offre de formations si vous souhaitez approfondir vos connaissances Craft et pratiquer ce type d’atelier.

Je ne veux pas vous mettre tous les cas d'usage, car ça serait trop long et ce n'est pas l'objectif de l'article, mais je vais vous donner quelques exemples :

  • En tant que CTO, je souhaite comparer les performances de livraison entre les plateformes (par exemple entre la plateforme Commerce et la plateforme Gestion Clients) pour identifier les meilleures pratiques DevOps Ă  gĂ©nĂ©raliser au niveau du groupe.
  • En tant que Lead Tech d'un produit e-commerce, je souhaite comparer nos mĂ©triques avec celles des autres produits du domaine Commerce (comme le panier ou le catalogue) pour comprendre pourquoi leurs dĂ©ploiements gĂ©nĂšrent moins d'incidents en production.
  • En tant que Domain Leader Catalogue, je souhaite analyser l'impact du multi-instance sur la frĂ©quence de dĂ©ploiement. Par exemple, comprendre si les produits dĂ©ployĂ©s sur plusieurs environnements de production (pour diffĂ©rentes BU) ont plus de difficultĂ©s Ă  maintenir un rythme de livraison Ă©levĂ© et si oui, comprendre les causes.
  • En tant que Product Owner, je veux suivre l'Ă©volution de nos mĂ©triques aprĂšs le passage d'une architecture monolithique Ă  des microservices, notamment pour vĂ©rifier si la frĂ©quence de dĂ©ploiement de chaque composant s'amĂ©liore comme prĂ©vu.

2. Les dĂ©fis techniques et organisationnels 🔧

La mise en place des DORA Metrics dans un groupe de cette taille présentait beaucoup de défis majeurs. Avec mon client, nous avons fait le choix d'implémenter les DORA Metrics uniquement sur les produits déployés sur Kubernetes (cela représente environ 80% des produits). Voici les principaux obstacles que nous avons dû surmonter :

Une architecture complexe à appréhender

L'entreprise comportait :

  • Plus de 1000 produits utilisant des technologies diffĂ©rentes
  • Des produits dĂ©ployĂ©s plusieurs fois pour diffĂ©rentes BU
  • Un mix d'architectures monolithiques et microservices
  • Des relations complexes entre composants et produits

Face à cette complexité, nous avons adopté une approche pragmatique : sélectionner quelques produits pilotes représentatifs de l'écosystÚme pour implémenter les DORA Metrics. AprÚs avoir validé notre méthodologie sur ces cas concrets, nous avons pu déployer progressivement la solution à l'ensemble du portefeuille de produits.

Des données éparpillées

Il fallait collecter les données depuis :

  • Les clusters Kubernetes pour les logs de dĂ©ploiements
  • GitHub pour l'historique des versions
  • ServiceNow pour les incidents

Le véritable défi ? Corréler ces données hétérogÚnes pour obtenir une vision cohérente !

Cette mission a nĂ©cessitĂ© une collaboration transverse entre plusieurs Ă©quipes techniques. Nous avons conçu une architecture cloud robuste pour centraliser l'ensemble des donnĂ©es dans une base de donnĂ©es BigQuery. Cette solution nous a d'ailleurs poussĂ©s Ă  optimiser nos requĂȘtes et l'utilisation de BigQuery car nous atteignions rapidement les limites de performance 😅.

L'objectif final Ă©tait de disposer d'un rĂ©fĂ©rentiel unique permettant d'exĂ©cuter des requĂȘtes SQL complexes (cf l’implĂ©mentation des mĂ©triques plus bas dans cet article) pour calculer prĂ©cisĂ©ment nos mĂ©triques DORA.

Des pratiques DevOps non standardisées

Une partie des équipes avait :

  • Leur propre workflow de dĂ©ploiement
  • Leurs conventions de versioning
  • Leur façon de gĂ©rer les environnements de production

Il a fallu aider ces équipes à adopter les bonnes pratiques du groupe à savoir :

  • la norme SemVer pour le versioning
  • l'utilisation des solutions groupe pour dĂ©ployer leurs produits sur Kubernetes
  • la dĂ©claration systĂ©matique des incidents dans ServiceNow
  • etc.

La standardisation des pratiques DevOps : un prérequis indispensable aux DORA Metrics

Ce chantier d'harmonisation, bien que colossal pour une organisation de cette envergure, s'est rĂ©vĂ©lĂ© ĂȘtre un puissant levier de transformation ! MĂȘme si des standards existaient dĂ©jĂ , les DORA Metrics ont agi comme un rĂ©vĂ©lateur implacable : les projets ne respectant pas les bonnes pratiques Ă©taient immĂ©diatement identifiables par l'absence de donnĂ©es exploitables pour le calcul des mĂ©triques.

Cette transparence a créé une incitation naturelle à l'adoption des standards du groupe, bien plus efficace qu'une simple directive top-down.

Des données pas toujours fiables

Les principaux problĂšmes :

  • Pas de standard dans le nommage des composants
  • Des dĂ©ploiements de configuration qui polluaient les mĂ©triques
  • Une difficultĂ© Ă  identifier les vrais dĂ©ploiements en production
  • Des annotations manquantes ou incohĂ©rentes

Pragmatisme et itération : la clé du succÚs en environnement réel

Face à l'imperfection inévitable des données en contexte d'entreprise de grande taille, nous avons adopté une approche pragmatique : formuler des hypothÚses clairement documentées et acceptées par toutes les parties prenantes. Ces conventions, bien qu'imparfaites, nous ont permis d'avancer sans attendre la perfection qui arrivera sans doute jamais.

Cette démarche s'alignait parfaitement avec la philosophie des DORA Metrics : l'objectif n'est pas d'atteindre une précision absolue, mais de capturer des tendances significatives permettant d'orienter l'amélioration continue.

Une organisation multi-niveaux Ă  respecter

Il fallait :

  • Fournir des vues adaptĂ©es Ă  chaque niveau (plateforme, domaine, produit)
  • Prendre en compte les particularitĂ©s de chaque BU
  • Garder des mĂ©triques comparables malgrĂ© les diffĂ©rences
  • Accompagner les Ă©quipes vers de meilleures pratiques

La dimension humaine à ne pas négliger

Nous avons rapidement identifié des craintes légitimes :

  • Peur d'ĂȘtre jugĂ© uniquement sur des chiffres et que les mĂ©triques servent Ă  comparer les Ă©quipes entre elles
  • Tentation de biaiser le systĂšme (par exemple en multipliant volontairement les dĂ©ploiements inutiles pour amĂ©liorer artificiellement la frĂ©quence)
  • RĂ©ticence Ă  reporter certains incidents pour ne pas impacter le Change Failure Rate
  • DifficultĂ©s Ă  voir les DORA metrics comme outil d'amĂ©lioration continue

Notre approche : transformer les résistances en adhésion

PlutÎt que d'imposer un systÚme de mesure, nous avons choisi d'impliquer les équipes dans sa construction. Nous avons organisé des ateliers de sensibilisation, partagé les objectifs stratégiques derriÚre ces métriques, et surtout, écouté les préoccupations des équipes.

Cette dĂ©marche participative a permis de transformer progressivement la perception des DORA Metrics : d'un outil potentiellement menaçant de surveillance, elles sont devenues un levier d'amĂ©lioration continue valorisĂ© par les Ă©quipes elles-mĂȘmes.

3. Hypothùses techniques retenues 🧐

Fondations solides : établir des conventions claires et partagées Pour bùtir un systÚme de mesure fiable dans un environnement complexe, nous avons dû établir un ensemble d'hypothÚses et de conventions. Elles ont été clairement documentées et validées collectivement et elles étaient nécessaires pour calculer les métriques avec des données imparfaites.

Voici les principales conventions que nous avons établies, organisées par domaine :

DĂ©ploiements 🚀

Identification des déploiements en production

  • Un dĂ©ploiement est considĂ©rĂ© rĂ©ussi uniquement quand :
  • Seuls les dĂ©ploiements avec l'annotation info/environment = prod sont pris en compte
  • Les dĂ©ploiements de configuration pure sont exclus des mĂ©triques

Impact utilisateur

  • Un dĂ©ploiement en production impacte potentiellement l'utilisateur final
  • Un produit peut ĂȘtre dĂ©ployĂ© sur plusieurs workspaces (namespace/cluster)
  • Une modification d'un composant ou de sa configuration implique une modification du produit

Lead Time For Changes ⏱

Traçabilité du code

  • Le code source mentionnĂ© dans l'annotation est responsable du dĂ©ploiement du composant
  • La correspondance dans le repository Git est matĂ©rialisĂ©e par un tag
  • Le temps entre un commit et son tag est nĂ©gligeable pour le calcul global

Limitations acceptées

  • Seuls les tags respectant la norme SemVer sont pris en compte
  • Les configurations d'environnement sans code source associĂ© crĂ©ent des dĂ©ploiements multiples pour une mĂȘme version

Incidents et rĂ©cupĂ©ration 🚹

Temporalité des incidents

  • Le temps entre l'apparition rĂ©elle d'un incident et son ouverture dans l'outil est considĂ©rĂ© comme nĂ©gligeable
  • Tous les incidents reportĂ©s (automatiquement ou manuellement) ont un impact utilisateur

Association déploiement-incident

  • Le dĂ©ploiement le plus rĂ©cent d'un composant du produit avant la crĂ©ation de l'incident est considĂ©rĂ© comme la cause
  • En l'absence d'information sur l'instance spĂ©cifique, l'incident est associĂ© au produit dans son ensemble

Structure organisationnelle 🏱

Définition d'un produit

  • Un produit est un pĂ©rimĂštre fonctionnel perceptible par l'utilisateur final
  • Un produit peut ĂȘtre composĂ© de plusieurs composants (microservices ou briques monolithiques)
  • Les changements au niveau produit sont communiquĂ©s aux utilisateurs

Multi-instance

  • Un mĂȘme produit peut ĂȘtre dĂ©ployĂ© dans diffĂ©rents environnements de production
  • Chaque instance est considĂ©rĂ©e comme une entitĂ© distincte pour les mĂ©triques de dĂ©ploiement
  • Les incidents sont agrĂ©gĂ©s au niveau produit plutĂŽt qu'au niveau instance

Limitations connues 🚧

Données manquantes

  • Certains dĂ©ploiements peuvent manquer d'annotations complĂštes
  • Les tags peuvent ne pas suivre strictement SemVer
  • La corrĂ©lation entre incidents et instances spĂ©cifiques n'est pas toujours possible

Pistes d'amélioration

  • ImplĂ©menter "configuration as code" pour mieux tracer les changements de configuration
  • Étendre la prise en compte des tags au-delĂ  de SemVer
  • Ajouter la notion d'instance produit dans l'outil de gestion des incidents

Ces hypothÚses sont réguliÚrement revues et ajustées en fonction des retours d'expérience et de l'évolution des pratiques DevOps dans l'organisation.

4. La collecte des donnĂ©es : une approche par source 📊

L'architecture de collecte : le cƓur technique du projet Le succĂšs des DORA Metrics repose sur notre capacitĂ© Ă  collecter, intĂ©grer et corrĂ©ler des donnĂ©es provenant de multiples systĂšmes. Cette architecture d'intĂ©gration constitue la colonne vertĂ©brale technique de notre solution.

Architecture de données centralisée

BigQuery comme référentiel central

Pour rĂ©pondre aux besoins d'analyse et de corrĂ©lation des donnĂ©es, nous avons mis en place une architecture oĂč toutes les donnĂ©es sont centralisĂ©es dans Google BigQuery. Cette approche prĂ©sente plusieurs avantages :

  • CapacitĂ© Ă  traiter de grands volumes de donnĂ©es (logs Kubernetes, Ă©vĂ©nements GitHub, tickets ServiceNow)
  • PossibilitĂ© d'exĂ©cuter des requĂȘtes SQL complexes pour calculer les mĂ©triques
  • FacilitĂ© d'intĂ©gration avec des outils de visualisation (pour ce projet, Power BI)
  • Mise Ă  jour des donnĂ©es en quasi temps rĂ©el via des flux de donnĂ©es (streaming)

Examinons maintenant notre approche pour chaque source de données :

Données de déploiement

ÉlĂ©mentDescription
Source principaleKubernetes
ÉvĂ©nements collectĂ©s
  • Collecte des Ă©vĂ©nements de type "deployment" avec statut "success"
  • Identification des dĂ©ploiements via la progression "Progressing → True" avec "NewReplicaSetAvailable"
  • Focus sur les dĂ©ploiements en production via l'annotation info/environment=prod
Annotations existantes sur les pods
  • info/product_id : identifiant unique du produit
  • info/bu_index : identifiant de la Business Unit
  • info/cluster_name : nom du cluster
Annotations Ă  ajouter pour les DORA
  • release.mgmt/deploy.src : URL du repository source
  • release.mgmt/deploy.src-version : version dĂ©ployĂ©e
  • release.mgmt/env : environnement (prod/prep/uat/dev)
Points d’attention
  • Distinction entre dĂ©ploiements de configuration et vraies mises en production
  • Gestion des dĂ©ploiements multi-instances pour diffĂ©rentes BU
  • TraçabilitĂ© complĂšte via les annotations

Données de code source

ÉlĂ©mentDescription
Source de véritéGitHub
Sources d’extraction
  • Commits : pour tracer les changements de code
  • Tags : pour identifier les versions dĂ©ployĂ©es
Corrélation version-déploiement
  • Chaque version en production est matĂ©rialisĂ©e par un tag Git
  • Les annotations Kubernetes contiennent les rĂ©fĂ©rences du code source et de la version
  • La correspondance tag-version permet de calculer prĂ©cisĂ©ment le Lead Time

Données d'incidents

ÉlĂ©mentDescription
Source principaleServiceNow
CritÚres de sélection des incidents
  • Incidents rĂ©solus uniquement
  • Statut ≠ "Canceled"
  • Lien avec produit identifiĂ©
Limitations actuelles
  • Les incidents sont liĂ©s Ă  un produit et non Ă  une instance spĂ©cifique
  • ImpossibilitĂ© de lier directement un incident Ă  une instance particuliĂšre
  • NĂ©cessitĂ© d'utiliser des heuristiques pour la corrĂ©lation

5. ImplĂ©mentation et calcul des mĂ©triques 📈

De la théorie à la pratique : adapter et calculer les métriques à tous les niveaux Les définitions théoriques des DORA Metrics sont un point de départ, mais leur implémentation concrÚte nécessite une adaptation fine au contexte spécifique de l'entreprise et une approche multi-échelle pour répondre aux besoins de tous les niveaux de l'organisation.

Implémentation des métriques

Voici comment nous avons adapté et implémenté chacune des quatre métriques :

Lead Time for Changes (Délai de livraison des changements)

Le Lead Time for Changes mesure le temps qui s'écoule entre la derniÚre modification de code (commit) et son déploiement effectif en production. Dans cette entreprise, nous avons dû sensibiliser les équipes sur l'importance de taguer chaque version déployée pour tracer correctement le code source.

  • Extraction: Ă  partir des dĂ©ploiements Kubernetes (annotation "version" et "repo"), nous retrouvons le commit Git.
  • Calcul:
  • AgrĂ©gation: comme chaque produit pouvait regrouper plusieurs composants, nous avons choisi de calculer d'abord un Lead Time moyen pour chaque composant, avant de prendre la moyenne de ces composants au niveau du produit.

Principale difficulté: éviter les déploiements de "configuration" sans changement de code, qui fausseraient la métrique. Nous avons donc isolé ces cas dans un tableau de bord à part, pour ne pas influencer le Lead Time for Changes général.

Deployment Frequency (Fréquence de déploiement)

La Deployment Frequency indique la cadence à laquelle on pousse des mises à jour en production (exprimée en , ou inverse de l'intervalle entre deux déploiements).

Au niveau d'un produit, nous calculons la moyenne des fréquences de déploiement de tous ses composants. Nous avons aussi mis en évidence quelques "cas limites", par exemple lorsqu'un composant n'a qu'un seul déploiement. Dans ces situations, on ne peut pas déterminer d'intervalle et la fréquence reste "N/A".

C'était essentiel de distinguer un déploiement réellement exposé à l'utilisateur dans l'environnement "prod" (annotation "info/environment=prod") de simples déploiements sur des environnements de test ou d'intégration.

Mean Time to Restore (MTTR) ou Mean Time to Recover (Temps moyen de restauration)

Le MTTR calcule le temps moyen nécessaire pour résoudre un incident ou le temps apparent de défaillance pour l'utilisateur. Au départ, nous avons constaté que l'outil de ticketing (ServiceNow) n'enregistrait pas toujours les champs d'ouverture et de clÎture de maniÚre cohérente.

Nous avons donc dĂ» :

  • Sensibiliser les Ă©quipes support : un champ "date de dĂ©but d'incident" doit ĂȘtre rempli le plus prĂ©cisĂ©ment possible dĂšs ouverture (sinon nous utilisons la date de crĂ©ation du ticket).
  • VĂ©rifier la date de rĂ©solution ou de clĂŽture : c'est la rĂ©fĂ©rence pour la fin d'incident.
  • Calculer la moyenne de (date de fin − date de dĂ©but) sur tous les incidents clĂŽturĂ©s, pour chaque produit.

Pour la plupart des cas, cela a fonctionné correctement. Mais, comme souvent, nous avons rencontré des écarts (tickets fermés trÚs tardivement, incidents mal catégorisés, etc.). Il a fallu faire accepter les limites de la mesure (la durée de vie d'un ticket n'est pas toujours égale à la durée réelle de l'incident technique).

Change Failure Rate (Taux d'échec des changements)

Le Change Failure Rate (CFR) représente la proportion de déploiements qui entraßnent au moins un incident en production. Ici, le plus gros challenge a été de lier les incidents ServiceNow au "dernier déploiement" d'un produit. Faute de pouvoir tracer précisément l'instance de composant à l'origine, nous avons adopté la convention suivante :

  • Identifier le "dernier dĂ©ploiement" survenu avant la date de crĂ©ation de l'incident, tous composants du produit confondus.
  • IncrĂ©menter un dĂ©ploiement "dĂ©faillant" si au moins un incident lui est rattachĂ©.
  • Diviser le nombre de dĂ©ploiements dĂ©faillants par le nombre total de dĂ©ploiements du produit, sur la pĂ©riode considĂ©rĂ©e.

Bien sĂ»r, cela reste une approximation: on ne sait pas distinguer un incident rĂ©ellement liĂ© Ă  un composant particulier. D'oĂč la nĂ©cessitĂ© d'amĂ©liorer la remontĂ©e d'informations dans ServiceNow (par exemple en demandant explicitement quelle version rĂ©elle est touchĂ©e).

Calcul des mĂ©triques par niveau de granularitĂ© 📊

Vision multi-échelle : du composant à la plateforme L'une des forces de notre implémentation réside dans sa capacité à fournir des métriques à différents niveaux de granularité. Cette approche multi-échelle permet à chaque niveau de management d'accéder aux indicateurs pertinents pour son périmÚtre de responsabilité, tout en garantissant la cohérence globale des mesures.

Différentes vues des Dora Metrics de notre solution pour illustrer les calculs un peu plus bas.

Vue globale des dora metrics

Vue dĂ©taillĂ©e des dora metrics au niveau d’un produit

Vue pour suivre l’évolution des dora metrics au niveau d’une plateforme

Lead Time For Changes

Niveau Composant

oĂč :

  • = Date de dĂ©ploiement en production
  • = Date du dernier commit de la version
  • = Nombre de dĂ©ploiements en production associĂ©s Ă  un tag Git

Niveau Produit

oĂč :

  • = Lead Time du composant i
  • = Nombre de composants du produit

Niveau Domaine

oĂč :

  • = Lead Time du produit i
  • = Nombre de produits dans le domaine

Niveau Plateforme

oĂč :

  • = Lead Time du domaine i
  • = Nombre de domaines dans la plateforme

Deployment Frequency

Niveau Composant

oĂč :

  • = Date du dĂ©ploiement actuel
  • = Date du dĂ©ploiement prĂ©cĂ©dent

Niveau Produit

oĂč :

  • = Nombre de dĂ©ploiements composants
  • = FrĂ©quence de dĂ©ploiement du composant

Niveau Domaine

oĂč :

  • = Nombre de produits
  • = FrĂ©quence de dĂ©ploiement du produit

Niveau Plateforme

oĂč :

  • = Nombre de domaines
  • = FrĂ©quence de dĂ©ploiement du domaine

Change Failure Rate

Niveau Composant

  • Non calculĂ© Ă  ce niveau en raison de la difficultĂ© Ă  associer prĂ©cisĂ©ment les incidents Ă  des composants spĂ©cifiques

Niveau Produit

oĂč :

  • = Nombre de dĂ©ploiements prĂ©cĂ©dant au moins un incident
  • = Nombre total de dĂ©ploiements du produit

Niveau Domaine

oĂč :

  • = Nombre de produits dans le domaine

Niveau Plateforme

oĂč :

  • = Nombre de domaines dans la plateforme

Mean Time To Recover

Niveau Composant

  • Non calculĂ© Ă  ce niveau car les incidents sont tracĂ©s au niveau produit

Niveau Produit

oĂč :

  • = Nombre d'incidents
  • = Date de rĂ©solution de l'incident
  • = Date de dĂ©but de l'incident

Niveau Domaine

oĂč :

  • = Nombre de produits dans le domaine

Niveau Plateforme

oĂč :

  • = Nombre de domaines dans la plateforme

Calcul des métriques avec BigQuery

Image de datacenter

Photo by Taylor Vick on Unsplash

Toutes nos mĂ©triques sont calculĂ©es via des requĂȘtes SQL exĂ©cutĂ©es sur BigQuery. Voici comment nous procĂ©dons pour chaque mĂ©trique :

Lead Time For Changes

  • Mesure le temps entre une modification de code et son dĂ©ploiement en production
  • Formule :
sql
-- Calcul du Lead Time For Changes par composant
SELECT d.component_name,
       d.product_id,
       AVG(TIMESTAMP_DIFF(d.deployment_timestamp, c.commit_timestamp, HOUR)) as lead_time_hours
FROM `dora_metrics.deployments` d
         JOIN
     `dora_metrics.git_commits` c
     ON
         d.git_tag = c.tag
WHERE d.environment = 'prod'
  AND d.deployment_timestamp BETWEEN '2024-01-01' AND '2024-12-31'
GROUP BY d.component_name, d.product_id

Deployment Frequency

  • FrĂ©quence des dĂ©ploiements en production
  • CalculĂ©e par composant puis agrĂ©gĂ©e au niveau produit
  • Exclusion des dĂ©ploiements de configuration
sql
-- Calcul de la fréquence de déploiement par composant
WITH deployments_ordered AS (SELECT component_name,
                                    product_id,
                                    deployment_timestamp,
                                    LAG(deployment_timestamp) OVER (
      PARTITION BY component_name
      ORDER BY deployment_timestamp
    ) as previous_deployment
                             FROM `dora_metrics.deployments`
                             WHERE environment = 'prod'
                               AND is_config_only = FALSE
                               AND deployment_timestamp BETWEEN '2024-01-01' AND '2024-12-31')
SELECT component_name,
       product_id,
       COUNT(*)                                                            as deployment_count,
       AVG(TIMESTAMP_DIFF(deployment_timestamp, previous_deployment, DAY)) as avg_days_between_deployments,
       SAFE_DIVIDE(COUNT(*), 365)                                          as deployments_per_day
FROM deployments_ordered
WHERE previous_deployment IS NOT NULL
GROUP BY component_name, product_id

Change Failure Rate

  • Taux de dĂ©ploiements causant au moins un incident en production
  • ExprimĂ© en pourcentage
  • BasĂ© sur les dĂ©ploiements Kubernetes rĂ©ussis et les incidents ServiceNow rĂ©solus
sql
-- Calcul du Change Failure Rate par produit
WITH deployments_with_incidents AS (SELECT d.deployment_id,
                                           d.product_id,
                                           MAX(CASE WHEN i.incident_id IS NOT NULL THEN 1 ELSE 0 END) as has_incident
                                    FROM `dora_metrics.deployments` d
                                             LEFT JOIN
                                         `dora_metrics.incidents` i
                                         ON
                                             d.product_id = i.product_id
                                                 AND i.created_timestamp > d.deployment_timestamp
                                                 AND i.created_timestamp <= (SELECT MIN(next_d.deployment_timestamp)
                                                                             FROM `dora_metrics.deployments` next_d
                                                                             WHERE next_d.product_id = d.product_id
                                                                               AND next_d.deployment_timestamp > d.deployment_timestamp)
                                    WHERE d.environment = 'prod'
                                      AND d.deployment_timestamp BETWEEN '2024-01-01' AND '2024-12-31'
                                    GROUP BY d.deployment_id, d.product_id)
SELECT product_id,
       COUNT(*)                                       as total_deployments,
       SUM(has_incident)                              as failed_deployments,
       SAFE_DIVIDE(SUM(has_incident), COUNT(*)) * 100 as change_failure_rate_percent
FROM deployments_with_incidents
GROUP BY product_id

Mean Time To Recover

  • Temps moyen de rĂ©solution des incidents
  • CalculĂ© Ă  partir des dates d'ouverture et de rĂ©solution dans ServiceNow
  • AgrĂ©gĂ© au niveau produit
sql
-- Calcul du Mean Time To Recover par produit
SELECT product_id,
       COUNT(*)                                                         as incident_count,
       AVG(TIMESTAMP_DIFF(resolved_timestamp, created_timestamp, HOUR)) as mttr_hours
FROM `dora_metrics.incidents`
WHERE status = 'Resolved'
  AND created_timestamp BETWEEN '2024-01-01' AND '2024-12-31'
  AND resolved_timestamp IS NOT NULL
GROUP BY product_id

Fiabilisation et optimisation des données

Infrastructure as Code

  • Utilisation de Terraform pour standardiser les dĂ©ploiements
  • Configuration automatique des annotations requises
  • Validation des formats de donnĂ©es

Bonnes pratiques

  • Tagging systĂ©matique des versions
  • Documentation des conventions
  • Formation des Ă©quipes

Monitoring

  • DĂ©tection des annotations manquantes
  • Alertes sur les incohĂ©rences
  • Suivi de la qualitĂ© des donnĂ©es

Optimisation de BigQuery

La gestion d'un volume important de données dans BigQuery a nécessité plusieurs optimisations :

sql
-- Création de tables partitionnées par date pour améliorer les performances
CREATE TABLE `dora_metrics.deployments_partitioned`
    PARTITION BY DATE
(
    deployment_timestamp
)
AS
SELECT *
FROM `dora_metrics.deployments`;

-- CrĂ©ation de vues matĂ©rialisĂ©es pour les requĂȘtes frĂ©quentes
CREATE
MATERIALIZED VIEW `dora_metrics.lead_time_daily`
AS
SELECT product_id, DATE (deployment_timestamp) as deployment_date, AVG (TIMESTAMP_DIFF(deployment_timestamp, commit_timestamp, HOUR)) as avg_lead_time_hours
FROM
    `dora_metrics.deployments_with_commits`
GROUP BY
    product_id, deployment_date;

Automatisation des flux de données

Nous avons mis en place plusieurs processus automatisés pour maintenir des données à jour :

  • Jobs Cloud Functions pour synchroniser les donnĂ©es ServiceNow toutes les 15 minutes
  • Webhooks GitHub pour capturer les Ă©vĂ©nements de commit et de tag en temps rĂ©el
  • Export des logs Kubernetes via Cloud Logging avec un dĂ©lai maximum de 5 minutes

Cette approche nous permet d'obtenir des métriques fiables et exploitables pour l'amélioration continue de nos processus de livraison.

Points clĂ©s pour l'agrĂ©gation 🔑

Garantir la cohérence et la pertinence des métriques agrégées

  • PondĂ©ration
  • Exclusions
  • Cas particuliers

Cette approche d'agrégation garantit :

  • Une reprĂ©sentation Ă©quitable Ă  chaque niveau
  • Une cohĂ©rence dans le calcul des mĂ©triques
  • Une prise en compte appropriĂ©e des cas limites

SynthÚse de notre approche d'implémentation

Une implémentation progressive et adaptée au contexte

Notre approche d'implémentation des DORA Metrics a combiné rigueur méthodologique et pragmatisme. Nous avons défini des formules de calcul précises tout en les adaptant aux réalités opérationnelles de l'entreprise. L'agrégation multi-niveaux nous a permis de répondre aux besoins de tous, du développeur individuel jusqu'au comité de direction.

Cette implémentation technique n'était cependant que la premiÚre étape. La véritable valeur des DORA Metrics réside dans leur capacité à transformer les pratiques et la culture de l'organisation.

6. BĂ©nĂ©fices, enseignements et perspectives đŸ€”

La mise en place des DORA Metrics est un voyage, pas une destination.

Ce retour d'expérience illustre une réalité fondamentale : implémenter les DORA Metrics dans un grand groupe nécessite bien plus qu'une simple application de formules mathématiques. C'est un projet de transformation qui touche à la fois aux aspects techniques, organisationnels et humains.

Bénéfices observés

Impact transformationnel : au-delĂ  des chiffres

L'implémentation des DORA Metrics a généré des bénéfices qui dépassent largement le cadre de la simple mesure de performance. Elle a catalysé une véritable transformation des pratiques et de la culture de livraison logicielle au sein de l'organisation.

Voici les principaux impacts positifs observés :

  • Une meilleure visibilitĂ© sur la performance de livraison : Les Ă©quipes ont pu objectiver leurs points forts (par exemple, une frĂ©quence de dĂ©ploiement Ă©levĂ©e) et leurs axes d'amĂ©lioration (par exemple, un trĂšs long "Lead Time for Changes").
  • Un langage commun entre Ă©quipes : Les DORA Metrics servent dĂ©sormais de rĂ©fĂ©rence partagĂ©e. Lorsqu'il y a un incident, tout le monde comprend la corrĂ©lation possible entre le "dernier dĂ©ploiement" et le Change Failure Rate.
  • La mise en lumiĂšre de la dette de traçabilitĂ© : Le besoin de taguer systĂ©matiquement les versions, d'indiquer l'instance concernĂ©e dans les tickets, etc. a Ă©tĂ© rendu Ă©vident grĂące Ă  la mesure du Lead Time for Changes et du Change Failure Rate.

Ces métriques sont imparfaites (comme tout indicateur), mais elles offrent un "socle" suffisamment solide pour enclencher de vraies discussions et pour s'améliorer en continu.

Enseignements clés

Cette expérience a impliqué de nombreuses adaptations et m'a permis de tirer plusieurs enseignements importants :

  • Standardisation nĂ©cessaire : Les DORA Metrics nĂ©cessitent une standardisation des pratiques DevOps pour ĂȘtre efficaces
  • Adaptation au contexte : Il est essentiel d'adapter les mĂ©triques au contexte spĂ©cifique de l'entreprise
  • QualitĂ© des donnĂ©es cruciale : La fiabilitĂ© des mĂ©triques dĂ©pend directement de la qualitĂ© des donnĂ©es collectĂ©es
  • Dimension humaine prĂ©pondĂ©rante : L'accompagnement des Ă©quipes et la gestion du changement sont aussi importants que l'aspect technique
  • Pragmatisme indispensable : Accepter les imperfections initiales et itĂ©rer progressivement est la clĂ© du succĂšs

Perspectives d'évolution

Cette premiÚre phase d'implémentation nous a permis d'identifier plusieurs axes d'amélioration pour l'avenir :

  • DĂ©tection des changements de Configuration : DĂ©ployer une solution pour tracer prĂ©cisĂ©ment les modifications de configuration, actuellement difficiles Ă  distinguer des dĂ©ploiements de code.
  • GranularitĂ© des incidents : Enrichir ServiceNow pour associer chaque incident au composant ou Ă  l'instance spĂ©cifique concernĂ©e, permettant ainsi un calcul plus prĂ©cis du Change Failure Rate.
  • Automatisation accrue : RĂ©duire les interventions manuelles dans la collecte et le traitement des donnĂ©es pour amĂ©liorer la fiabilitĂ© et la frĂ©quence de mise Ă  jour des mĂ©triques.

Conclusion 🙌

Ce retour d'expérience démontre que la mise en place des DORA Metrics dans un grand groupe est un projet de transformation à part entiÚre. Au-delà des aspects techniques, c'est avant tout un projet humain qui nécessite pédagogie, pragmatisme et persévérance.

Le parcours n’a pas Ă©tĂ© sans difficultĂ©s. Il y des inquiĂ©tudes, notamment parmi les personnes directement impliquĂ©es dans les projets. GrĂące Ă  des sponsors engagĂ©s et, surtout, Ă  une approche basĂ©e sur la transparence et le temps accordĂ© Ă  chacun, nous avons pu atteindre nos objectifs.

Les bénéfices sont à la hauteur de l'investissement : une meilleure visibilité sur la performance de livraison, un langage commun entre les équipes, et surtout, une culture d'amélioration continue qui s'installe progressivement dans l'organisation.

J'espĂšre que ce partage d'expĂ©rience vous sera utile ! N'hĂ©sitez Ă  me contacter sur Linkedin ou par mail si vous souhaitez Ă©changer sur le sujet 🙂

À propos de l'auteur

Maxime Deroullers

Maxime Deroullers

Cet article vous a inspiré ?

Vous avez des questions ou des défis techniques suite à cet article ? Nos experts sont là pour vous aider à trouver des solutions concrÚtes à vos problématiques.