Software Engineering

Optimiser les revues de code et l'intégration avec DevEx

Dans le génie logiciel moderne, l'expérience développeur (DevEx) n'est plus une métrique secondaire ; c'est un facteur critique de productivité et de rétention. Deux des goulots d'étranglement les plus importants auxquels les développeurs sont confrontés sont la latence des revues de code et le temps nécessaire pour devenir productif lors de l'intégration (onboarding). En traitant ces domaines comme des systèmes mesurables, les dirigeants techniques peuvent mettre en place des boucles de rétroaction qui améliorent continuellement ces processus. Cet article explore comment définir, mesurer et agir sur les principales métriques DevEx pour raccourcir ces cycles et autonomiser votre équipe.

Définir et mesurer la latence des revues de code

La latence des revues de code est le temps total écoulé entre la création d'une demande de tirage (pull request, PR) et sa fusion (merge). Cependant, cette métrique est trop grossière à elle seule. Pour obtenir des informations exploitables, nous devrions la décomposer en « Temps jusqu'à la première revue » et « Temps jusqu'à la fusion ». Un temps jusqu'à la première revue élevé indique souvent un problème de capacité dans le pipeline de revue, tandis qu'un temps jusqu'à la fusion élevé peut suggérer de longues négociations aller-retour ou des blocages.

Pour mesurer cela efficacement, intégrez votre pipeline de métriques à votre fournisseur Git. Voici un exemple simplifié en Python utilisant une API hypothétique pour calculer ces métriques :


import requests
import statistics

def get_pr_metrics(repo_id):
    # Appel API hypothétique pour obtenir les données des PR
    url = f"https://api.gitprovider.com/repos/{repo_id}/pull_requests?state=closed"
    response = requests.get(url)
    prs = response.json()
    
    review_latencies = []
    merge_latencies = []
    
    for pr in prs:
        created = pr['created_at']
        first_reviewed = pr.get('first_reviewed_at')
        merged = pr.get('merged_at')
        
        if first_reviewed and merged:
            # Calcul en heures
            review_latencies.append((first_reviewed - created).total_seconds() / 3600)
            merge_latencies.append((merged - created).total_seconds() / 3600)
            
    return {
        "avg_first_review_hours": statistics.mean(review_latencies) if review_latencies else 0,
        "p90_merge_hours": statistics.quantiles(merge_latencies, n=10)[8] if merge_latencies else 0
    }

# Exemple d'utilisation
# metrics = get_pr_metrics(12345)
# print(f"Temps moyen jusqu'à la première revue : {metrics['avg_first_review_hours']:.2f} heures")

En suivant le 90e percentile (P90) plutôt que la simple moyenne, vous identifiez les pires expériences vécues par vos développeurs, qui sont souvent les plus préjudiciables au moral et à la productivité.

Accélérer l'intégration avec le Temps jusqu'à la Valeur

Le temps d'intégration est généralement mesuré par le « Temps jusqu'au premier commit » ou le « Temps jusqu'à la première PR fusionnée ». Cependant, une métrique plus robuste est le « Temps jusqu'à la Valeur », qui suit le temps qu'il faut à un nouvel employé pour livrer indépendamment une fonctionnalité ou un correctif significatif. Pour optimiser cela, vous devez instrumenter le processus d'intégration lui-même.

Une stratégie efficace consiste à définir un « Chemin Doré » pour les nouveaux développeurs. Cela inclut une séquence spécifique de tâches : configuration de l'environnement local, exécution de la suite de tests, correction d'une erreur de linting et fusion d'une petite correction de documentation. Chaque étape doit avoir une durée attendue définie. Si l'étape « Configuration de l'environnement local » prend régulièrement plus de temps que les 30 minutes attendues, cela signale la nécessité d'améliorer la documentation ou d'automatiser le processus de configuration.


# Exemple de structure de données pour la liste de contrôle d'intégration
onboarding_metrics = {
    "developer_id": "dev_101",
    "start_date": "2023-10-01",
    "steps": [
        {
            "task": "Installer les dépendances",
            "target_hours": 0.5,
            "actual_hours": 2.1,
            "blocked": False
        },
        {
            "task": "Exécuter la suite de tests localement",
            "target_hours": 0.25,
            "actual_hours": 0.3,
            "blocked": False
        },
        {
            "task": "Première PR fusionnée",
            "target_hours": 48,
            "actual_hours": 72,
            "blocked": True
        }
    ]
}

Remarquez l'écart dans l'étape « Installer les dépendances ». Dans un scénario réel, cela déclencherait une enquête sur la gestion des dépendances ou la complexité de l'infrastructure.

Fermer la boucle de rétroaction

Collecter les métriques n'est que la moitié de la bataille. L'autre moitié consiste à agir sur elles. Une boucle de rétroaction nécessite des réunions régulières, telles qu'une « Revue DevEx » bimensuelle, où les données sur la latence des revues et les frictions d'intégration sont présentées. L'objectif est d'identifier les problèmes systémiques. Par exemple, si la latence des revues augmente les vendredis, la boucle pourrait suggérer la mise en place d'une politique de « pas de fusion le vendredi » ou la formation croisée des réviseurs pour assurer la couverture.

De même, si le temps d'intégration est élevé en raison d'un système de build complexe, la boucle pourrait prioriser un ticket de dette technique pour simplifier le pipeline de build pour tous les développeurs, et pas seulement les nouveaux embauchés. La clé est de traiter les métriques DevEx comme des indicateurs avancés de la santé de l'équipe et d'allouer la capacité d'ingénierie pour résoudre les goulots d'étranglement qu'elles révèlent.

En mesurant, analysant et agissant continuellement sur ces métriques, vous créez une culture où l'efficacité n'est pas un projet ponctuel, mais un voyage continu. Cette approche conduit à une livraison plus rapide des fonctionnalités, à une plus grande satisfaction professionnelle et à une organisation d'ingénierie plus résiliente.

Commencez petit. Choisissez une métrique, comme le temps moyen de fusion des PR, suivez-la pendant un mois et mettez en œuvre un changement basé sur les données. L'impact sera immédiat et le processus deviendra durable avec le temps.

Share: