Un mythe a la vie dure en ingénierie logicielle : l’architecture se concevrait au début, une fois pour toutes, et il suffirait ensuite de la maintenir.
La réalité est différente. Tout système logiciel qui dure plus de deux ans doit évoluer. Le métier change, le marché change, les technologies changent, l’équipe grandit. Une architecture conçue pour les besoins d’aujourd’hui devient une contrainte en douze à dix-huit mois.
Face à la réécriture complète, risquée et coûteuse, il existe une alternative : l’architecture évolutive. Une approche où les décisions architecturales se prennent de façon incrémentale, se valident en continu, et où le système évolue avec le métier sans jamais arrêter la livraison.
Le concept vient des travaux de Neal Ford et Rebecca Parsons chez Thoughtworks, formalisés dans l’ouvrage Building Evolutionary Architectures (O’Reilly). Cet article le rend concret pour qui dirige une équipe de développement dans une PME ou une scale-up et veut savoir comment l’appliquer.
Qu’est-ce que l’architecture évolutive ?
L’architecture évolutive est une approche où le système logiciel évolue de façon incrémentale, guidé par les contraintes du métier et validé en continu par des indicateurs automatisés.
C’est décider au bon moment, avec les bonnes informations, et vérifier que chaque décision tient dans la durée.
Elle repose sur trois principes :
- Changement incrémental piloté : chaque modification de l’architecture est petite, réversible, mesurable, et s’inscrit dans une évolution continue
- Dimensions architecturales multiples : l’architecture n’est pas que le code. Elle comprend la structure des données, les frontières entre modules, les dépendances entre équipes, les délais de mise en production. Chaque dimension doit évoluer de façon coordonnée
- Fitness functions comme garde-fous : des indicateurs automatisés qui valident les propriétés architecturales dans le temps. Si une modification dégrade une propriété importante, la fitness function l’intercepte avant qu’elle n’arrive en production
L’effet concret : le système reste en production, la livraison ne s’arrête jamais, et l’architecture s’améliore en continu, sans jamais se dégrader.
Pourquoi l’architecture traditionnelle ne tient pas
L’architecture conçue en amont, le fameux « big design up front », fonctionne quand les besoins sont stables et prévisibles. Dans le logiciel moderne, c’est rarement le cas.
Le problème, c’est que l’architecture initiale, juste au départ, devient fausse avec le temps :
- Le produit évolue dans des directions imprévues
- L’équipe grandit et les dépendances entre composants se transforment en goulots d’étranglement
- Les technologies choisies trois ans plus tôt deviennent une contrainte
- Le coût de chaque modification augmente parce que le système est rigide
C’est le phénomène du coût du changement : dans un système à l’architecture rigide, le coût de chaque modification croît de façon exponentielle. Ajouter une fonctionnalité qui prenait deux jours il y a trois ans en prend trois semaines aujourd’hui, avec la même équipe, parce que personne n’a fait évoluer l’architecture.
Qui ne fait pas évoluer son architecture accumule des contraintes. Ces contraintes se paient en vitesse de mise en production, en qualité du produit et en capacité à garder les bonnes personnes dans l’équipe. C’est un problème qui touche directement le métier : des roadmaps peu fiables, des occasions de marché manquées, des coûts qui grimpent sans que la valeur suive le même rythme.

Que sont les fitness functions ?
Les fitness functions sont le cœur opérationnel de l’architecture évolutive : des indicateurs automatisés qui valident les propriétés architecturales dans le temps et empêchent le système de se dégrader pendant que l’équipe ajoute des fonctionnalités.
Elles n’ont rien à voir avec les tests fonctionnels. Les tests vérifient que le code fait ce qu’il doit faire ; les fitness functions vérifient que le système garde les propriétés architecturales qui comptent.
Trois exemples concrets :
- Capacité à livrer : le temps entre une modification et sa mise en production reste sous les 30 minutes. Au-delà, quelque chose dans l’architecture devient un goulot d’étranglement
- Modularité : aucun module n’a plus de 3 dépendances directes. Au-delà, un module devient un point de couplage qui finira par bloquer l’équipe
- Performance : la latence des API principales reste sous les 200 millisecondes au 95e percentile. Si elle se dégrade, soit l’architecture ne tient plus la charge, soit elle a accumulé de la complexité inutile
Les fitness functions tournent dans la pipeline d’intégration continue, comme les tests, et vérifient la santé du système.
Un exemple concret pour une PME : une fitness function qui mesure combien de modules il faut toucher pour ajouter un nouveau moyen de paiement. Si la réponse dépasse deux, la frontière entre les modules n’est pas au bon endroit ; le savoir avant de commencer le travail change tout.
Un test qui tourne en CI et échoue quand un seuil est dépassé est déjà une fitness function, sans avoir besoin d’outils sophistiqués.
Comment se prennent les décisions architecturales
Dans l’architecture évolutive, les décisions ne se prennent pas toutes au départ. Elles sont différées jusqu’au moment où l’on dispose de plus d’information, et documentées pour que n’importe qui puisse encore les comprendre six mois plus tard.
L’outil pour cela, ce sont les ADR (Architecture Decision Records) : des documents légers, en texte brut, qui enregistrent chaque choix architectural autour de trois éléments.
- Contexte : quelle était la situation, quelles contraintes existaient
- Décision : ce qu’on a choisi, et pourquoi
- Conséquences : ce qui change, ce qu’on y gagne, ce qu’on y perd
Un exemple réel :
ADR-007 : séparation du module paiements
Contexte : le module paiements est couplé au module commandes. Chaque modification des paiements exige de tester tout le flux commandes (4 heures). L’équipe paiements est bloquée par l’équipe commandes sur 3 mises en production sur 5.
Décision : extraire le module paiements derrière sa propre interface API. Communication asynchrone par événements avec le module commandes.
Conséquences : l’équipe paiements peut livrer en autonomie. Le flux commandes → paiements exige un test d’intégration dédié. Complexité opérationnelle accrue (deux services à maintenir en parallèle).
Statut : accepté, mars 2026.
Les ADR pèsent très peu dans le travail quotidien : ils sont la mémoire des décisions. Quand quelqu’un demande six mois plus tard « pourquoi a-t-on choisi des événements ici, sans passer par un appel direct ? », la réponse est déjà écrite, avec le contexte qui l’a produite.
La pratique se résume à un fichier Markdown par décision, numéroté dans l’ordre, dans un dossier du dépôt. Zéro outil supplémentaire.

Évolution incrémentale contre réécriture complète
Cette tentation revient sans cesse : « on jette tout et on repart de zéro ».
C’est une tentation compréhensible. L’ancien système déborde de complexité accidentelle, de choix que plus personne ne se rappelle, de code que « personne ne veut toucher ». L’idée d’une page blanche séduit.
Les réécritures complètes échouent pourtant à une fréquence impressionnante. En cause, l’ancien système, qui porte des années de logique métier codée, des cas limites, des exceptions, des règles que personne n’a documentées mais que le code gère. Réécrire, c’est réimplémenter tout cela depuis zéro, souvent sans même savoir que cela existe. Pendant ce temps, l’ancien système continue d’évoluer, parce que le métier ne s’arrête pas.
En général, la réécriture dure deux fois plus longtemps que prévu et coûte trois fois plus cher.
L’alternative, c’est l’évolution incrémentale. Le pattern le plus efficace est le Strangler Fig (du nom de la plante qui pousse autour d’un arbre jusqu’à le remplacer) :
- Identifier le module avec le plus de friction : celui qui ralentit l’équipe, génère le plus de bugs, bloque la livraison
- Définir une frontière claire entre ce module et le reste du système (le fameux anti-corruption layer)
- Construire la nouvelle version du module derrière cette frontière
- Migrer le trafic progressivement de l’ancienne vers la nouvelle implémentation
- Une fois la migration terminée, retirer l’ancien module
Le système reste en production pendant toute l’opération. La livraison ne s’arrête jamais. Le risque reste contenu, car on travaille un module à la fois.
Pour aller plus loin sur ce sujet dans le contexte de l’architecture : microservices ou monolithe, c’est-à-dire quand il est pertinent d’extraire un service et quand mieux vaut rester sur un monolithe bien structuré.
L’architecture contraint l’organisation (et réciproquement)
La loi de Conway dit que la structure du logiciel reflète la structure de l’organisation qui le produit : une observation empirique que des décennies de pratique confirment.
Si les équipes sont organisées par technologie (une équipe front-end, une équipe back-end, une équipe base de données), le logiciel se retrouvera avec trois couches couplées, incapables d’évoluer indépendamment. Si les équipes sont organisées par domaine métier (une équipe paiements, une équipe catalogue, une équipe logistique), le logiciel tendra naturellement vers des modules indépendants.
Faire évoluer l’architecture sans toucher à l’organisation ne fonctionne pas.
C’est le point que la plupart des initiatives de modernisation sous-estiment. On investit des mois dans la refonte architecturale, mais les équipes restent organisées comme avant ; le logiciel recommence à refléter l’ancienne structure en quelques sprints.
L’architecture évolutive exige que l’organisation évolue avec le logiciel :
- Des équipes avec une responsabilité claire : chaque module a une équipe responsable, avec une autonomie de décision sur les frontières de son propre domaine
- Des frontières organisationnelles alignées sur les frontières architecturales : si le logiciel est découpé en modules, les équipes doivent l’être de la même façon
- Une communication entre équipes gérée comme une communication entre modules : des interfaces claires, des contrats explicites, aucune dépendance implicite
La conduite du changement dans le logiciel est un projet organisationnel mené par des personnes aux compétences techniques profondes : les choix architecturaux contraignent les choix organisationnels, et réciproquement. C’est exactement ce que nous faisons avec notre service d’Équipes intégrées.
Comment évaluer si votre architecture a besoin d’évoluer
Cinq questions simples suffisent pour savoir si votre architecture est devenue une contrainte, sans audit formel :
- Ajouter une fonctionnalité exige-t-il de modifier plus de 3 composants ? Si oui, les frontières entre les modules ne sont pas au bon endroit.
- Le délai moyen de mise en production dépasse-t-il deux semaines ? Si oui, le processus de mise en production est trop couplé, ou la pipeline est un goulot d’étranglement architectural.
- Les équipes se bloquent-elles mutuellement à cause de dépendances ? Si oui, l’architecture ne permet pas l’autonomie nécessaire. (Pour aller plus loin sur les dépendances entre équipes)
- Existe-t-il du code que « personne ne veut toucher » ? Si oui, il y a un module critique sans responsabilité claire : le point le plus fragile du système.
- Les estimations sont-elles systématiquement fausses ? Si oui, la complexité accidentelle de l’architecture rend le coût de chaque modification imprévisible.
Si la réponse est oui à trois questions ou plus, l’architecture est devenue une contrainte active qui ralentit le métier, et a cessé de le soutenir.
Pour mesurer l’impact concret, vous pouvez utiliser notre Consistency Impact Calculator : il estime combien de temps et d’argent la friction architecturale absorbe dans votre organisation.
Ce qu’il faut faire concrètement
Trois pas concrets suffisent : pas besoin de grand plan.
Sur nos missions d’Intervention ciblée, l’architecture la plus difficile à faire évoluer est presque toujours celle dont les décisions n’existent que dans la tête de deux ou trois personnes ; sa complexité technique compte moins. Introduire les ADR (Architecture Decision Records) dans une équipe qui ne les a jamais pratiqués prend moins d’une semaine de travail, à condition que quelqu’un facilite les trois premières décisions : le format est simple, mais l’habitude de documenter les choix architecturaux se construit. Et l’effet le plus utile des ADR, c’est que l’équipe arrête de rejouer les mêmes débats tous les six mois.
1. Définissez 2 à 3 fitness functions. Choisissez les propriétés architecturales qui comptent le plus pour votre métier : temps de mise en production, couplage entre modules, performance. Écrivez un test qui tourne en CI et échoue quand le seuil est dépassé. Un simple script qui mesure et compare suffit.
2. Consignez les 5 prochaines décisions en ADR. Chaque fois que l’équipe prend une décision architecturale dans les deux prochaines semaines, notez-la. Contexte, décision, conséquences, statut. Cinq ADR suffisent à créer l’habitude. Au bout d’un mois, vous ne pourrez plus vous en passer.
3. Identifiez le module avec le plus de friction et isolez ses frontières. Quel module génère le plus de ralentissement, de bugs, de blocages entre équipes ? C’est le premier candidat pour une évolution incrémentale. Définissez une frontière claire (une interface, un contrat API) entre ce module et le reste du système. L’isoler est le premier pas pour pouvoir le faire évoluer ; la réécriture peut attendre.
Si vous avez besoin d’aide pour savoir par où commencer, identifier le module critique, définir les bonnes fitness functions ou concevoir les frontières : c’est exactement le type de travail que nous faisons avec l’Intervention ciblée et les Équipes intégrées. Si votre système a besoin d’évoluer ainsi, à petits pas et sur plusieurs zones à la fois, c’est le travail du refactoring du code legacy.
L’architecture évolutive n’est pas une méthodologie à adopter d’un bloc. C’est un changement de perspective : arrêter de concevoir des systèmes parfaits et commencer à construire des systèmes qui savent changer. Les organisations qui le font n’ont jamais besoin de se moderniser, parce qu’elles n’arrêtent jamais d’évoluer.
Pour aller plus loin : Building Evolutionary Architectures de Neal Ford et Rebecca Parsons (O’Reilly, 2e éd. 2023), Team Topologies de Matthew Skelton et Manuel Pais (IT Revolution, 2019), et le Technology Radar de Thoughtworks. Sur notre site : le hub consacré à l’évolution architecturale, le coût du changement dans le logiciel et pourquoi la roadmap est toujours en retard.
