Be Software Architecture Wise
Be Wise Apps

Read in English · Leer en español · Auf Deutsch lesen

Section 3.7 sur 3.8 · Intermédiaire · 22 min de lecture

La loi de Conway et la forme des organisations

Leçon vidéo

5 min · narré en anglais, avec sous-titres
Écouter seulement (audio)
Lire la transcription

Quand vous concevez un système, vous concevez aussi qui doit parler à qui. Dans cette leçon, vous découvrirez la loi de Conway, les données qui l’étayent, le calcul de la taille des équipes et la façon dont les architectes utilisent cette loi à dessein.

Imaginez quatre groupes de bâtisseurs, chacun construisant une partie d’une maison. Ils ne se parlent jamais. Vous obtiendrez quatre parties qui s’assemblent mal, avec les jointures exactement là où les groupes se sont rencontrés. Le logiciel fonctionne de la même manière. Les parties d’un système, et les liens entre elles, tendent à reproduire les équipes qui se parlent. Et l’inverse est tout aussi vrai.

En 1968, le magazine Datamation a publié un article de Melvin Conway intitulé How Do Committees Invent? Sa conclusion est aujourd’hui connue sous le nom de loi de Conway : les organisations qui conçoivent des systèmes sont contraintes de produire des conceptions qui copient leurs structures de communication. Le raisonnement est presque mécanique. Deux parties d’un système se connectent par une interface, et une interface n’existe que là où les personnes qui conçoivent ces parties l’ont négociée. La structure du système reflète donc celle de l’organisation. Son exemple : huit personnes devaient écrire deux compilateurs. Cinq ont été affectées au COBOL et trois à l’ALGOL. Le compilateur COBOL fonctionnait en cinq phases, et le compilateur ALGOL en trois.

Voici à quoi cela ressemble aujourd’hui. Les équipes Paiement et Catalogue se parlent, mais chaque changement de schéma passe par une équipe partagée chargée de la base de données. Le système qu’elles construisent se couple donc par une base de données partagée. Les deux services lisent et écrivent dans des tables partagées. Personne ne l’a planifié. C’est ce qui arrive quand les seules jointures d’un produit se trouvent là où les personnes qui le construisent se sont réellement parlé.

Est-ce vrai ? En 2012, MacCormack, Baldwin et Rusnak ont comparé des paires de produits, l’un issu d’une entreprise fortement couplée, l’autre d’une communauté open source faiblement couplée. Dans chaque paire, le produit de l’organisation faiblement couplée était plus modulaire. Une étude de Microsoft Research sur Windows Vista a montré que des données sur l’organisation à l’origine de chaque partie prédisaient mieux quelles parties étaient sujettes aux défaillances que les métriques de code classiques. Mais une revue de cent quarante-deux études, en 2016, a jugé l’effet miroir fréquent plutôt qu’universel. Les études de projets ouverts ne le confirment souvent pas, peut-être parce que des outils partagés et des discussions ouvertes permettent malgré tout aux gens de se coordonner. C’est une tendance forte, pas une loi de la physique.

La taille des équipes compte aussi. Un groupe de n personnes compte n fois n moins un, divisé par deux, canaux de communication possibles. Trois personnes en ont trois. Cinq personnes en ont dix. Et huit personnes en ont vingt-huit. Les canaux croissent à peu près comme le carré de la taille du groupe : doublez l’équipe et vous quadruplez les canaux.

Le produit de commande d’une entreprise de livraison de repas est construit par une seule équipe de huit personnes : vingt-huit canaux. Elle prévoit de passer à vingt-quatre ingénieurs. En une seule équipe de vingt-quatre, cela fait deux cent soixante-seize canaux : environ dix fois plus, pour trois fois plus de personnes. En trois équipes de huit, il y a quatre-vingt-quatre canaux au sein des équipes. Si chaque équipe a un seul interlocuteur avec chacune des autres, cela n’en ajoute que trois. Environ quatre-vingt-sept en tout. Mais si les responsabilités sont floues et que chaque modification mobilise tous les ingénieurs, vous revenez à deux cent soixante-seize. Répartir les personnes en équipes n’aide donc que si le système est découpé de la même façon, pour que la plupart des modifications ne demandent qu’une seule équipe. C’est l’architecture qui rend possible le graphe plus petit.

Si les systèmes reflètent les organisations, vous pouvez vous en servir délibérément. La manœuvre de Conway inversée façonne les équipes en fonction de l’architecture voulue : une équipe durable par frontière visée, responsable de son code, de ses données et de son pipeline, et travaillant avec les autres par des API et des événements publiés. Elle a ses limites. Réorganiser les équipes ne restructure pas une base de code fortement couplée. Et si vous tracez mal les frontières, la loi de Conway reproduira fidèlement l’erreur. La charge cognitive de l’équipe limite ce dont une équipe peut être responsable : le domaine, le code, l’infrastructure et les astreintes. Une équipe responsable de douze services répartis sur quatre domaines est surchargée, aussi propre que soit le code de chaque service. Donnez donc à chaque module, service et stockage de données une seule équipe responsable. En pratique, une responsabilité partagée signifie une absence de responsabilité. Et rappelez-vous : les réorganisations sont des décisions d’architecture.

La section complète présente les recherches en détail, et ce qu’il faut faire quand l’organigramme et l’architecture ne concordent pas. Ensuite, dans la section trois point huit, nous verrons la simplicité et la mesure de la structure. À très vite.

Ce qu’il faut savoir

Ce que Conway a réellement dit

En avril 1968, le magazine Datamation a publié « How Do Committees Invent? » de Melvin Conway, programmeur et consultant en informatique. Sa conclusion est la phrase aujourd’hui connue sous le nom de loi de Conway : les organisations qui conçoivent des systèmes sont contraintes de produire des conceptions qui sont des copies des structures de communication de ces organisations. Le nom est venu plus tard : Fred Brooks a cité l’article dans The Mythical Man-Month (1975) et a appelé l’idée la loi de Conway.

L’argument de Conway est plus précis que le slogan. Un système se compose de sous-systèmes reliés par des interfaces. Pour que deux sous-systèmes se connectent, les personnes qui les conçoivent doivent avoir négocié et convenu de cette interface : elles doivent donc avoir communiqué. Si les concepteurs de deux sous-systèmes ne communiquent pas, il n’y a aucune interface sur laquelle s’entendre. Il existe donc une correspondance qui préserve la structure (Conway employait le terme mathématique d’homomorphisme) entre le graphe du système et le graphe de l’organisation qui l’a conçu. Son exemple : une société de recherche sous contrat disposait de huit personnes pour écrire un compilateur COBOL et un compilateur ALGOL. Cinq ont été affectées au COBOL et trois à l’ALGOL. Le compilateur COBOL fonctionnait en cinq phases ; le compilateur ALGOL en trois.

Deux autres points de l’article sont souvent oubliés. D’abord, Conway précisait explicitement que « système » s’entend au sens large : cela s’applique à tout objet conçu, pas seulement au logiciel. Ensuite, sa conclusion pratique portait sur la flexibilité. Comme la première conception est rarement la meilleure, et comme une organisation tend à figer sa structure tôt (une fois les équipes formées, la conception est déjà en partie décidée), il soutenait que les organisations de conception devaient rester légères et souples, et s’organiser selon la communication dont la conception a réellement besoin.

Le miroir

Loi de Conway : la structure de communication de trois équipes se reflète dans la structure de dépendances du système qu’elles construisentOrganisation : qui parle à quiSystème : qui dépend de quoiÉquipe PaiementÉquipe CatalogueÉquipe DBA(partagée)tout changement deschéma via les DBAService depaiementService ducatalogueBDpartagéelisent/écriventdes tables partagéesreflèteLa structure du système copie la structure de la communication
Quand deux équipes ne peuvent se coordonner que par l’intermédiaire d’une équipe partagée chargée de la base de données, le système qu’elles construisent tend à se coupler par une base de données partagée.

Les données probantes : l’hypothèse du miroir

Pendant des décennies, la loi de Conway s’est surtout appuyée sur des anecdotes. Depuis les années 2000, des chercheurs l’ont mise à l’épreuve, généralement sous le nom d’hypothèse du miroir (mirroring hypothesis) : les dépendances techniques d’un produit correspondront aux liens organisationnels (communication, proximité géographique, appartenance à un même employeur) entre les personnes qui le construisent.

L’étude la plus connue dans le domaine du logiciel est celle d’Alan MacCormack, Carliss Baldwin et John Rusnak, publiée dans Research Policy en 2012 sous le titre « Exploring the duality between product and organizational architectures: a test of the mirroring hypothesis ». Ils ont comparé des paires de produits aux fonctions similaires, l’un construit par une organisation fortement couplée (une entreprise commerciale avec une équipe réunie sur un même site) et l’autre par une organisation faiblement couplée (une communauté open source distribuée) : par exemple deux logiciels de gestion financière, deux traitements de texte, deux bases de données, et Linux comparé à des noyaux de systèmes d’exploitation commerciaux. Ils ont mesuré la modularité par le coût de propagation, c’est-à-dire la part moyenne des fichiers d’un système qu’une modification d’un fichier peut affecter directement ou indirectement. Dans chaque paire, le produit de l’organisation faiblement couplée était plus modulaire et, dans la paire la plus extrême, l’écart était de plusieurs fois. Les auteurs y voient la preuve que des équipes distribuées, qui ne peuvent pas facilement se coordonner, sont poussées vers des conceptions qui exigent moins de coordination.

Une étude de Microsoft Research sur Windows Vista, menée par Nachiappan Nagappan, Brendan Murphy et Victor Basili (2008), a abordé la question sous l’angle de la qualité. Des métriques décrivant l’organisation qui avait construit chaque binaire (combien d’ingénieurs y avaient touché, combien étaient partis, à quelle distance dans la hiérarchie se trouvaient les contributeurs) prédisaient mieux quels binaires étaient sujets aux défaillances que les métriques de code classiques comme le taux de modification (churn), la complexité, la couverture et les dépendances.

Les données ne sont pas unanimes, et un résumé honnête compte. Une revue de 142 études empiriques réalisée en 2016 par Lyra Colfer et Carliss Baldwin a constaté que l’effet miroir était fréquent dans les études portant sur des secteurs et des entreprises, mais pas universel, et que les études de projets collaboratifs ouverts ne le confirmaient souvent pas, sans doute parce que des dépôts de code partagés, des outils de suivi des tickets et des discussions ouvertes permettent à des contributeurs distribués de se coordonner sans les liens organisationnels habituels. L’effet miroir est une tendance forte, pas une loi de la physique, et de bons outils et de bonnes pratiques peuvent en partie le contrer.

Les canaux de communication et l’importance de la taille des équipes

Un groupe de n personnes compte n(n − 1) / 2 canaux de communication possibles entre deux personnes. Ce nombre croît à peu près comme le carré de la taille du groupe : doubler l’équipe quadruple les canaux. Brooks s’est servi du même calcul pour expliquer pourquoi ajouter des personnes à un projet en retard le retarde davantage : chaque nouvel arrivant doit être formé et ajoute de nouveaux canaux que tout le monde doit entretenir.

Sur le plan de l’architecture, ce calcul explique deux choses. D’abord, une équipe unique ne peut pas grandir indéfiniment tout en gardant une compréhension partagée de son code ; au-delà d’une certaine taille, elle se fragmente en sous-groupes informels et, selon la loi de Conway, le code se fragmente selon les mêmes lignes, que quelqu’un ait conçu ces coutures ou non. Ensuite, le nombre de canaux entre les équipes compte autant que le nombre de canaux en leur sein : si chaque équipe doit parler à toutes les autres pour livrer une modification, la structure du système forme en pratique une seule grande unité couplée, quel que soit son nombre de services.

Les canaux croissent bien plus vite que les personnes

Graphes de communication complets pour des groupes de trois, cinq et huit personnes, avec trois, dix et vingt-huit liens3 membres3 canaux5 membres10 canaux8 membres28 canaux
Chaque paire de personnes est un canal de communication potentiel : 3 personnes en ont 3, 5 en ont 10 et 8 en ont 28.

Exemple commenté

Exemple commenté : les canaux de communication dans un groupe produit en croissance

Le produit de commande d’une entreprise de livraison de repas est construit par une seule équipe de 8 ingénieurs. Elle prévoit de passer à 24 ingénieurs. Comparez une grande équipe unique avec trois équipes de 8 aux responsabilités clairement définies.

Une équipe de 88 × 7 / 2 = 28 canaux.
Une équipe de 2424 × 23 / 2 = 276 canaux : environ dix fois plus pour trois fois plus de personnes.
Trois équipes de 8, canaux internes3 × 28 = 84 canaux au sein des équipes.
Trois équipes, canaux entre équipesSi chaque équipe a un interlocuteur unique avec chacune des autres équipes (par exemple la personne responsable technique), cela ajoute 3 × 2 / 2 = 3 canaux entre équipes. Total : environ 87.
Trois équipes, tout le monde se coordonne avec tout le mondeSi les responsabilités sont floues et que chaque modification mobilise tous les ingénieurs, le graphe redevient en pratique celui à 276 canaux.
Ce que cela montreRépartir les personnes en équipes n’aide que si le système est découpé de la même façon, de sorte que la plupart des modifications ne demandent qu’une communication interne à l’équipe. C’est l’architecture qui rend possible le graphe plus petit.

La formule donne des canaux potentiels, pas des conversations réelles ; l’important est la vitesse à laquelle le coût de coordination peut croître, pas une prédiction précise.

Team Topologies (Skelton et Pais) recommande des équipes durables d’environ 5 à 9 personnes, ce qui concorde avec le calcul : assez petites pour que les canaux restent gérables.

La manœuvre de Conway inversée

Si les organisations tendent à produire des systèmes qui reflètent leur structure, vous pouvez utiliser cette tendance délibérément : concevez la structure des équipes et les canaux de communication en fonction de l’architecture que vous voulez, et laissez le système prendre cette forme en grandissant. Jonny LeRoy et Matt Simons ont nommé cette approche la manœuvre de Conway inversée dans un article du Cutter IT Journal en décembre 2010, et elle est depuis devenue une technique courante dans les programmes de microservices et de plateformes.

En pratique, il s’agit de décider d’abord des frontières visées (par exemple les commandes, les paiements, le suivi des livraisons et l’intégration des restaurants comme services distincts), puis de former une équipe durable autour de chacune, de lui confier la responsabilité du code, des données et du pipeline de déploiement, et de faire en sorte que les équipes interagissent principalement par des API et des événements publiés plutôt que par du code ou des bases de données partagés. Là où un contact entre équipes est réellement nécessaire, rendez-le explicite : une équipe plateforme qui propose un produit en libre-service, une équipe facilitatrice qui apporte son aide pour une durée limitée.

La manœuvre a ses limites. Elle n’épouse le grain d’un système existant que lentement : réorganiser les équipes ne restructure pas une base de code fortement couplée, et pendant un temps les nouvelles équipes lutteront contre l’ancienne architecture. Martin Fowler note qu’elle ne peut pas réparer rapidement un système existant rigide. Elle suppose aussi que vous connaissez les bonnes frontières ; si vous les tracez mal puis les figez dans des structures d’équipes, la loi de Conway reproduira fidèlement l’erreur et la rendra coûteuse à corriger. C’est pourquoi les équipes commencent souvent par un monolithe modulaire et déplacent les frontières avant de les inscrire dans l’organisation.

Charge cognitive de l’équipe

La loi de Conway vous dit que les frontières entre équipes deviennent des frontières du système. Une seconde contrainte vous dit quelle taille peut avoir la partie de chaque équipe. La charge cognitive de l’équipe, un concept que Matthew Skelton et Manuel Pais ont introduit dans la conception des organisations logicielles avec Team Topologies (2019 ; deuxième édition en 2025), est la quantité totale qu’une équipe doit avoir en tête pour construire, exploiter et faire évoluer ce dont elle est responsable : le domaine métier, le code, l’infrastructure, les outils, les astreintes.

Ils empruntent à la psychologie la distinction entre la charge intrinsèque (la difficulté inhérente à la tâche, comme comprendre le domaine), la charge extrinsèque (l’effort imposé par l’environnement, comme une procédure de déploiement manuelle ou un build obscur) et la charge pertinente (l’effort d’apprentissage qui améliore le travail futur). L’objectif de conception est de réduire au minimum la charge extrinsèque, par exemple grâce à des plateformes et à l’automatisation, afin que la capacité aille aux charges intrinsèque et pertinente.

Pour les architectes, la conséquence est directe. Une frontière de service ou de composant doit donner à l’équipe qui en est responsable une partie du système qu’elle peut entièrement comprendre. Si une équipe est responsable de douze services répartis sur quatre domaines, elle est surchargée, et la qualité, la vitesse ou la santé des astreintes en pâtira, aussi propre que soit le code de chaque service. À l’inverse, un domaine si compliqué qu’aucune équipe orientée flux ne peut l’absorber (un moteur de tarification à modèles actuariels, un codec vidéo) peut justifier une équipe spécialisée et une frontière claire autour de son sous-système.

Laisser la structure des équipes façonner les frontières

Prises ensemble, ces idées donnent aux architectes un ensemble de règles pratiques :

Alignez les frontières sur la responsabilité des équipes. Chaque module, service, stockage de données et pipeline doit avoir une seule équipe responsable. En pratique, une responsabilité partagée signifie une absence de responsabilité, et le code reflétera ce dont le dernier contributeur avait besoin.

Réduisez au minimum la communication qu’exige chaque modification. Une frontière est bien placée si la plupart des modifications d’une capacité métier peuvent être faites, testées et déployées par une seule équipe. Surveillez les modifications qui exigent régulièrement la coordination de trois équipes : elles montrent que la structure du système et celle des équipes ne concordent pas.

Rendez les interfaces entre équipes explicites et stables. Les interfaces entre équipes méritent un versionnage, une documentation et des tests de contrat ; les interfaces au sein d’une équipe peuvent rester informelles et évoluer librement.

Réexaminez les deux ensemble. Les réorganisations sont des décisions d’architecture ; les décisions d’architecture sont des décisions organisationnelles. Un architecte que l’on ne consulte pas sur les changements d’équipes, ou un manager qui réorganise sans tenir compte du code, ignore une force qui agira quoi qu’il arrive.

Les modèles de types d’équipes et de modes d’interaction, ainsi que la manière de les faire évoluer, sont traités dans Team Topologies et conception sociotechnique.

Quand l’organigramme et l’architecture ne concordent pas

SituationCe que vous voyez dans le systèmeRemède habituel
Équipes organisées par couche technique (frontend, backend, base de données)Chaque fonctionnalité exige trois équipes et trois passages de relais ; les couches développent des interfaces épaisses et génériques ; les mises en production sont coordonnéesÉquipes pluridisciplinaires alignées sur les capacités métier, chacune responsable d’une tranche verticale
Des microservices avec une équipe par service, mais une équipe centrale des données responsable de tous les schémasUn système distribué couplé par une base de données partagée ; les changements de schéma attendent des semainesDonner à chaque équipe de service la responsabilité de ses données ; l’équipe des données fournit une plateforme et des normes
Deux équipes partagent la responsabilité d’un même serviceDes conventions contradictoires dans une même base de code, des conflits de fusion, personne d’astreinte pour les parties difficilesDécouper le service selon les préoccupations des équipes, ou le confier à une seule équipe
Une équipe est responsable de nombreux services sans rapport entre euxDes services négligés, des dépendances obsolètes, une réponse lente aux incidents : une surcharge cognitiveRegrouper des services, en transférer certains à d’autres équipes, ou investir dans l’outillage de plateforme
Un prestataire externe construit un sous-système dans le cadre d’un contrat à prix forfaitaireUne interface rigide, très spécifiée, dont la modification coûte très cherTraiter la frontière comme une porte à sens unique ; la placer là où le changement est le moins probable
Une réorganisation transfère une capacité à une nouvelle équipe, mais le code reste dans le dépôt de l’ancienne équipeLa nouvelle équipe contourne un code dont elle n’est pas responsable ; érosion de la frontière prévueTransférer le code, les pipelines et l’astreinte en même temps que la responsabilité

Vérifiez votre compréhension

Pourquoi, dans l’argument de Conway, la structure du système doit-elle ressembler à la structure de l’organisation ?

Parce que chaque interface entre sous-systèmes doit être négociée par les personnes qui les conçoivent ; là où les personnes ne communiquent pas, aucune interface n’est conçue, si bien que les liens du système suivent les liens entre les personnes.

Combien de canaux de communication une équipe de 12 personnes compte-t-elle ?

12 × 11 / 2 = 66.

Une entreprise se réorganise en une équipe par microservice, mais conserve une seule base de données partagée que toutes les équipes modifient. Que prédit la loi de Conway ?

Les services resteront couplés par la base de données, et les modifications exigeront une coordination entre toutes les équipes, car la structure de communication (tout le monde touche au même schéma) n’a pas changé.

Qu’est-ce que la charge cognitive extrinsèque, et comment l’architecture peut-elle la réduire ?

L’effort imposé par l’environnement plutôt que par le problème, comme des déploiements manuels ou un outillage obscur ; les plateformes, l’automatisation et des frontières claires la réduisent pour que les équipes puissent se concentrer sur leur domaine.

Suivant · 3.8Simplicité et mesureLa complexité essentielle et la complexité accidentelle, KISS, YAGNI, DRY comme principe portant sur la connaissance plutôt que sur le texte, la réversibilité comme option, et comment mesurer la structure avec la complexité cyclomatique, le LCOM, le couplage de changement et les fonctions d’aptitude sans tomber dans le piège de la loi de Goodhart.Continuer →

Sources et lectures complémentaires

Une question sur cette section ? ArchitectBot, l’assistant d’étude IA du cours, répond d’abord à partir du cours.

Demander : « Nous découpons notre monolithe en services et réorganisons aussi nos 40 ingénieurs. Par quoi faut-il commencer, et comment utiliser la loi de Conway pour décider des frontières des équipes ? »