Architecture zéro conflit : le 80/20 du développement parallèle

DEV - 06/11
Comment la propriété au niveau des fichiers a éliminé tous les conflits de fusion (mais pas les bogues d'intégration) Partie 4 du...

Comment la propriété au niveau du fichier a éliminé tous les conflits de fusion (mais pas les bogues d'intégration)

Partie 4 de la série de développement multi-agents

  • Partie 1 : 5 agents Claude Code peuvent-ils travailler de manière indépendante ?
  • Partie 2 : La réalité du développement multi-agent « autonome »
  • Partie 3 : Tests basés sur les propriétés avec hypothèses

TL;DR

Nous avons atteint un taux de réussite de fusion automatique de 100 % sur 5 PR parallèles. Aucune résolution manuelle des conflits. Le secret ? Propriété au niveau du fichier : chaque PR crée de NOUVEAUX fichiers ou possède des sections complètement distinctes.

Mais voici le problème : zéro conflit de fusion ≠ zéro travail d'intégration.

L'intégration a quand même pris 6 heures. 5 de ces heures étaient consacrées au débogage de l'IA, et non à la fusion. La propriété au niveau du fichier résout le problème des conflits de fusion, et non le problème de l'exactitude de l'intégration.

La leçon : la règle des 80/20 s’applique. 80 % du succès du développement parallèle provient d’une seule décision de conception (propriété du fichier). Les 20 % restants représentent le travail acharné (faire en sorte que le code fonctionne réellement ensemble).

Le problème : les conflits de fusion tuent le travail parallèle

Développement parallèle traditionnel :

Développeur A : modifie les lignes user_service.py 100 à 150. Développeur B : modifie les lignes user_service.py 120 à 180.
Entrer en mode plein écran Quitter le mode plein écran

Résultat:

<<<<<<< HEAD (modifications de A) def get_user(user_id): # L'implémentation de A renvoie db.query(User).filter_by(id=user_id).first() ======= def get_user(user_id) : # L'implémentation de B renvoie cache.get(f"user:{user_id}") ou db.query(User).get(user_id) >>>>>>> feature/b (les changements de B)
Entrer en mode plein écran Quitter le mode plein écran

Fusionner les conflits ! Quelqu'un (même l'IA) doit le résoudre manuellement.

Le coût des conflits de fusion

Temps par conflit :

  • Comprendre les deux changements : 5 à 15 minutes
  • Résoudre manuellement : 5 à 10 minutes
  • Testez la fusion : 5 à 10 minutes
  • Total : 15 à 35 minutes par conflit

En développement parallèle avec 5 PR :

  • Conflits potentiels : 10 à 50 (en fonction du chevauchement)
  • Temps de résolution : 2,5 à 30 heures
  • Tue l'avantage du travail parallèle !

Notre expérience :

  • Conflits attendus (approche traditionnelle) : 10-20
  • Conflits réels (architecture zéro conflit) : 0
  • Temps gagné : ~10 heures

La solution : la propriété au niveau du fichier

Principe de base : chaque PR possède des fichiers complètement distincts.

Règles de conception :

  1. CRÉER de nouveaux fichiers au lieu de modifier les fichiers partagés
  2. PARTITIONNEZ soigneusement les fichiers existants (sections qui ne se chevauchent pas)
  3. DEFER a partagé les modifications apportées au PR d'intégration final

Comment nous l'avons appliqué

RPCe qu'il a crééCe qu'il a modifiéRisque de conflit
PR-1 : Générateurs de teststests/test_video_moderation/test_builders.py(NOUVEAU)Aucun✅ Zéro
PR-2 : Tests budgétairestests/test_video_moderation/unit/test_budget_allocation.py(NOUVEAU)vidéo_modérateur.py(code de fabrication)✅ Zéro (uniquement PR touchant ce code)
PR-3 : Tests de segmentstests/test_video_moderation/unit/test_segment_duration.py(NOUVEAU)Aucun✅ Zéro
PR-4 : Tests de propriététests/test_video_moderation/simulation/test_properties.py(NOUVEAU)Aucun✅ Zéro
PR-5 : Tests de classementtests/test_video_moderation/simulation/test_edge_cases.py(section)Seulement ce fichier, seulement une nouvelle section✅ Zéro
PR-6 : IntégrationTests d'intégration Cross-PR (NOUVEAU)Déclarations d'importation (différées jusqu'à la fin)⚠️ Moyen (mais séquentiel)

Aperçu clé : la création de fichiers se fait sans conflit. Différents fichiers = différents objets git = zéro chevauchement.

Les modèles de conception

Modèle 1 : Créer de nouveaux fichiers de test

Au lieu de:

# Modification du fichier test_video_moderator.py existant (partagé par plusieurs PR) # PR-1 ajoute des tests ici # PR-2 ajoute des tests ici # PR-3 ajoute des tests ici # → CONFLIT !
Entrer en mode plein écran Quitter le mode plein écran

Faites ceci :

# PR-1 crée : tests/test_video_moderation/test_builders.py # PR-2 crée : tests/test_video_moderation/unit/test_budget_allocation.py # PR-3 crée : tests/test_video_moderation/unit/test_segment_duration.py # PAS DE CONFLITS - différents fichiers !
Entrer en mode plein écran Quitter le mode plein écran

Avantage:

  • Chaque PR est entièrement propriétaire de son fichier
  • Les modifications ne se chevauchent pas
  • Git gère de manière trivial...
    [Courte citation de 8% de l'article original]
Loading...