Choisir entre monolithe ou microservices n’est pas une décision de style architectural. Pour une application web critique, c’est un arbitrage entre continuité de service, capacité d’évolution, maîtrise de la dette technique, compétences disponibles et gouvernance du système d’information. La réponse la plus robuste est rarement de « tout découper » d’emblée. Dans beaucoup de contextes, la bonne trajectoire consiste d’abord à stabiliser l’existant, rendre visibles les dépendances, modulariser les domaines métier, exposer des API maîtrisées, puis extraire certains services lorsque le découpage apporte un bénéfice supérieur à sa complexité.
Un CTO ou une DSI ne cherche pas seulement une architecture élégante. Il faut une cible réaliste, finançable, maintenable, compréhensible par les équipes et compatible avec les contraintes opérationnelles. Une application de commande, un extranet client, une plateforme de gestion interne ou un portail transactionnel ne se modernisent pas comme un produit numérique neuf. Les utilisateurs continuent à travailler, les données doivent rester cohérentes, les intégrations avec l’ERP, le CRM ou les outils métiers ne peuvent pas être interrompues sans impact.
L’enjeu n’est donc pas de choisir un camp entre monolithe et microservices, mais de définir le bon niveau de découplage au bon moment. C’est ce qui permet de moderniser une application web sur mesure sans fragiliser les processus qu’elle porte.
Pourquoi le débat monolithe ou microservices est souvent mal posé
Le monolithe souffre d’une mauvaise réputation parce qu’il est souvent associé à des applications anciennes, difficiles à maintenir, peu testées et fortement couplées. Pourtant, un monolithe n’est pas forcément un problème. Une application monolithique bien structurée, avec des modules clairs, une base de code maîtrisée, des tests automatisés et des processus de déploiement fiables, peut rester pertinente pendant longtemps. Elle peut même être plus simple à exploiter qu’un ensemble de services distribués mal gouvernés.
À l’inverse, les microservices ne sont pas une garantie d’agilité. Ils déplacent une partie de la complexité du code vers l’infrastructure, les réseaux, l’observabilité, la sécurité, les déploiements, la gestion des versions d’API et la cohérence des données. Une organisation qui peine déjà à maintenir un monolithe peut se retrouver avec un système plus difficile encore à diagnostiquer si elle découpe trop tôt ou trop finement.
La vraie question est donc : quelle architecture permet à l’entreprise de faire évoluer son application critique avec le moins de friction, tout en maîtrisant les risques ? Pour y répondre, il faut sortir d’une opposition binaire. Entre le monolithe historique et les microservices complets, plusieurs options intermédiaires existent : monolithe modulaire, architecture orientée services, exposition progressive d’API, extraction de composants spécifiques, ou coexistence temporaire entre ancien et nouveau socle.
Cette approche est particulièrement importante lorsque l’application web est au cœur d’un processus métier. Par exemple, imaginons une plateforme B2B qui centralise les commandes, les tarifs contractuels, la disponibilité produit et les validations commerciales. Le découpage en microservices peut sembler attractif pour isoler les prix, les stocks ou les commandes. Mais si les règles de tarification sont imbriquées avec les règles de validation, les historiques clients et les remises négociées, extraire un service de pricing sans compréhension fine du domaine peut créer des incohérences fonctionnelles.
Les critères d’arbitrage avant de choisir une architecture cible
Avant de décider si l’avenir passe par un monolithe modernisé, une modularisation progressive ou des microservices, il faut analyser les contraintes réelles. L’architecture cible ne doit pas être définie uniquement par les limites techniques actuelles. Elle doit aussi prendre en compte les objectifs métier, les capacités de l’organisation et le niveau de risque acceptable.
Un bon arbitrage croise plusieurs dimensions. Certaines relèvent du code, d’autres des données, d’autres encore de l’exploitation ou de la gouvernance. C’est souvent là que les projets échouent : on découpe le code sans découper les responsabilités, on crée des API sans clarifier les contrats d’usage, ou l’on multiplie les services sans adapter la supervision et les pratiques de déploiement.
- Criticité métier : plus l’application porte des opérations sensibles, plus la trajectoire doit préserver la continuité, la réversibilité et la capacité à diagnostiquer rapidement les incidents.
- Domaines fonctionnels : un découpage pertinent suit les responsabilités métier réelles, pas seulement les écrans ou les tables de base de données.
- Dépendances de données : si plusieurs modules modifient les mêmes données avec des règles implicites, un découpage prématuré peut créer des problèmes de cohérence.
- Fréquence d’évolution : les parties qui changent souvent et de manière indépendante sont de meilleurs candidats à l’extraction que les fonctions stables.
- Contraintes de performance : certaines transactions gagnent à rester proches dans le même processus, tandis que d’autres peuvent être isolées ou asynchrones.
- Maturité DevOps : des microservices exigent des pratiques solides de CI/CD, monitoring, logs centralisés, gestion des secrets et automatisation des déploiements.
Ces critères évitent un piège fréquent : confondre scalabilité technique et évolutivité métier. Une application peut avoir besoin d’être plus évolutive sans nécessiter une architecture microservices complète. Inversement, un domaine soumis à des pics de charge, à des cycles de release indépendants ou à des intégrations externes multiples peut justifier un découpage ciblé.
Moderniser un monolithe par la modularisation progressive
La modularisation progressive consiste à rendre le monolithe plus lisible, plus testable et moins couplé sans le transformer immédiatement en système distribué. C’est souvent la première étape rationnelle pour une application critique. Elle permet de reprendre le contrôle sur le code, d’identifier les frontières métier et de préparer des extractions futures si elles deviennent nécessaires.
Concrètement, il s’agit de séparer les responsabilités dans l’application : gestion des utilisateurs, règles de commande, facturation, notifications, recherche, administration, reporting, etc. Chaque module doit exposer des interfaces internes claires et limiter ses dépendances directes aux autres modules. L’objectif n’est pas de déplacer les fichiers dans des dossiers plus propres, mais de réduire les effets de bord lorsqu’une évolution est développée.
Cette approche présente un avantage important : elle permet de créer de la valeur sans multiplier immédiatement les briques techniques. Les équipes peuvent améliorer la couverture de tests, documenter les règles métier, clarifier les modèles de données et supprimer progressivement les dépendances les plus risquées. Le monolithe devient alors un monolithe modulaire, c’est-à-dire une application unique mais organisée autour de blocs cohérents.
Pour une DSI, cette étape peut aussi servir de révélateur. Si les équipes n’arrivent pas à définir des frontières fonctionnelles à l’intérieur du monolithe, elles auront encore plus de difficulté à les maintenir sous forme de microservices indépendants. La modularisation est donc à la fois une modernisation et un test de maturité architecturale.
Elle n’exclut pas les microservices. Au contraire, elle les prépare. Lorsqu’un module devient suffisamment autonome, bien testé et doté d’interfaces explicites, son extraction devient plus maîtrisable. Le choix n’est plus théorique : il repose sur une compréhension réelle du comportement applicatif.
Exposer des API sans transformer toute l’application
Entre conserver un monolithe fermé et découper toute l’application en microservices, l’exposition d’API constitue souvent un levier puissant. Une API permet à d’autres applications, portails, outils internes ou partenaires de consommer certaines fonctionnalités ou données sans accéder directement au cœur applicatif. Elle crée une couche de contrat entre l’existant et le reste du SI.
Cette étape est particulièrement utile lorsqu’une application critique doit s’ouvrir à de nouveaux usages : application mobile, portail client, automatisation de processus, synchronisation avec un ERP, exploitation de données par des outils décisionnels ou intégration de services d’intelligence artificielle. L’API évite de multiplier les accès directs à la base de données ou les exports manuels, qui deviennent vite difficiles à sécuriser et à maintenir.
Mais exposer une API ne consiste pas à publier toutes les fonctions existantes telles quelles. Une API doit être pensée comme un produit technique : contrats stables, gestion des erreurs, authentification, droits d’accès, journalisation, versioning, documentation et limites d’usage. Sans ces éléments, l’API peut devenir une nouvelle dette technique, simplement placée à l’extérieur du monolithe.
Un scénario courant consiste à placer une couche API devant une partie du monolithe, puis à extraire progressivement certaines fonctions derrière cette façade. Les consommateurs externes continuent d’appeler le même contrat, tandis que l’implémentation interne évolue. Cette logique facilite les transitions, car elle limite l’impact des changements sur les applications clientes.
Pour approfondir cet angle d’interopérabilité, l’article sur l’optimisation des APIs dans le système d’information détaille les enjeux de gouvernance, de performance et d’intégration. Dans une modernisation critique, ces sujets doivent être abordés dès la conception, pas ajoutés après les premiers incidents d’usage.
Quand les microservices deviennent réellement pertinents
Les microservices deviennent pertinents lorsque certains domaines doivent évoluer, être déployés, dimensionnés ou sécurisés indépendamment du reste de l’application. Ce n’est pas seulement une question de taille de code. C’est une question d’autonomie fonctionnelle et opérationnelle.
Un service candidat doit idéalement représenter une responsabilité métier claire. Par exemple, dans une application web de gestion commerciale, le module de notification, le moteur de recherche, le calcul de disponibilité, la génération documentaire ou certaines intégrations externes peuvent parfois être isolés plus facilement que le cœur transactionnel. À l’inverse, découper une transaction centrale qui repose sur de nombreuses règles imbriquées peut exiger un travail préalable important sur le modèle de données et les processus.
Les microservices apportent des bénéfices lorsque les équipes peuvent assumer leurs contreparties. Chaque service doit être déployé, supervisé, sécurisé et maintenu. Les échanges réseau peuvent échouer. Les données sont parfois répliquées ou synchronisées de manière asynchrone. Les incidents ne se lisent plus dans une seule pile applicative, mais dans une chaîne d’événements répartis. Sans observabilité adaptée, le diagnostic devient plus long et plus incertain.
Le découpage doit donc rester pragmatique. Un bon microservice n’est pas le plus petit composant possible, mais celui qui possède une frontière stable, un cycle de vie autonome et un coût d’exploitation justifié. La granularité excessive peut créer un effet inverse à celui recherché : davantage de coordination, davantage de dépendances, davantage de versions à maintenir.
La question de la sécurité doit aussi être traitée avec prudence. Les microservices augmentent le nombre de points de communication et donc les surfaces à gouverner : authentification entre services, chiffrement des échanges, gestion des autorisations, secrets techniques, logs, traçabilité. Cela ne signifie pas qu’ils sont moins sûrs par nature, mais qu’ils exigent une discipline plus élevée. Les contraintes réglementaires, notamment lorsqu’il y a des données personnelles ou sensibles, doivent être analysées avec les équipes compétentes et, si nécessaire, avec les interlocuteurs juridiques de l’entreprise.
Une trajectoire de modernisation qui limite les ruptures
Pour une application web critique, la trajectoire compte autant que la cible. Une architecture pertinente sur le papier peut échouer si elle impose un tunnel projet trop long, une migration brutale ou une perte de maîtrise temporaire. L’objectif est de réduire l’incertitude par étapes, avec des points de validation techniques et métier.
La première étape consiste généralement à réaliser un diagnostic de l’existant : architecture applicative, qualité du code, cartographie des flux, dépendances de données, performance, sécurité, modes de déploiement, incidents récurrents et contraintes métier. Ce diagnostic permet de distinguer les symptômes des causes. Une lenteur peut venir d’une requête mal optimisée, d’un modèle de données inadapté, d’une architecture insuffisamment scalable ou d’un processus métier trop synchrone.
Ensuite, la modernisation peut avancer par périmètres maîtrisés. Le principe est d’éviter de remplacer tout le système d’un coup. Une stratégie possible consiste à maintenir le cœur existant tout en développant de nouvelles capacités autour de lui. Certaines équipes parlent de pattern d’étranglement progressif : les nouveaux usages passent peu à peu par des composants modernisés, pendant que l’ancien périmètre se réduit ou se stabilise.
- Cartographier les domaines métier : identifier les blocs fonctionnels, leurs données, leurs dépendances et leurs responsables côté métier.
- Stabiliser le socle : renforcer tests, monitoring, sauvegardes, procédures de déploiement et documentation avant les changements profonds.
- Créer une couche d’accès maîtrisée : exposer des API ou interfaces internes pour éviter les dépendances directes au code ou à la base.
- Extraire les composants à faible risque relatif : commencer par des fonctions bien délimitées, observables et réversibles.
- Mesurer l’exploitation réelle : suivre incidents, temps de diagnostic, complexité de déploiement et satisfaction des équipes avant d’étendre le modèle.
Cette progression aide à arbitrer en continu. Si la modularisation suffit à réduire la dette et à accélérer les évolutions, il n’est pas nécessaire de forcer une migration microservices globale. Si certains composants montrent un besoin clair d’autonomie, leur extraction peut être planifiée avec un risque mieux maîtrisé.
Un audit des choix techniques et de l’architecture peut être utile à ce stade pour objectiver la décision. L’objectif n’est pas de produire un schéma cible abstrait, mais de relier les choix techniques aux contraintes concrètes : charge, disponibilité, maintenabilité, compétences, coûts d’exploitation, sécurité et intégration au SI.
Gouvernance, coûts et exploitation : les sujets à ne pas sous-estimer
Le coût d’une modernisation ne se limite pas au développement. Il inclut la compréhension de l’existant, les tests, la reprise ou la synchronisation de données, l’adaptation des processus de déploiement, la formation des équipes, la documentation, la supervision et la maintenance. Les microservices peuvent améliorer l’autonomie, mais ils introduisent aussi des coûts d’exploitation et de coordination. Un monolithe modulaire peut réduire la complexité, mais il peut atteindre ses limites si plusieurs équipes doivent intervenir en parallèle sur des domaines fortement sollicités.
Pour un CTO ou une DSI, l’arbitrage doit donc intégrer le modèle d’organisation. Qui est responsable de chaque domaine ? Les équipes sont-elles capables de déployer indépendamment ? Les incidents sont-ils traités par une équipe centralisée ou par des équipes produit ? Existe-t-il une chaîne CI/CD fiable ? Les environnements de test reflètent-ils suffisamment la production ? Les logs permettent-ils de reconstituer un parcours utilisateur ou une transaction métier ?
Ces questions sont déterminantes. Une architecture distribuée sans gouvernance peut ralentir les équipes au lieu de les libérer. À l’inverse, une architecture plus centralisée mais bien outillée peut rester efficace si les frontières internes sont claires et si les cycles de livraison sont maîtrisés.
La maintenance doit également être pensée dès le départ. Moderniser une application critique ne s’arrête pas à la mise en production d’une nouvelle brique. Les choix d’architecture doivent être compatibles avec la maintenance corrective, évolutive et préventive. Une organisation qui prévoit l’exploitation, l’observabilité et la dette technique dans la durée évite de recréer rapidement les conditions du legacy qu’elle cherchait à dépasser. Sur ce point, la maintenance applicative n’est pas un sujet secondaire, mais un élément de l’architecture cible.
Questions fréquentes avant de trancher
Faut-il abandonner le monolithe dès qu’une application devient critique ?
Non. Une application critique a d’abord besoin de fiabilité, de lisibilité et de maîtrise opérationnelle. Si le monolithe est bien structuré ou peut le devenir, il peut rester une base pertinente. Le problème n’est pas le monolithe en lui-même, mais le couplage excessif, l’absence de tests, la difficulté à déployer et la méconnaissance des règles métier.
Peut-on commencer par des API avant de décider le découpage final ?
Oui, et c’est souvent une approche prudente. Une couche API bien conçue permet d’isoler les consommateurs du fonctionnement interne de l’application. Elle donne de la flexibilité pour remplacer ou extraire certaines fonctions plus tard, à condition de gouverner les contrats, les versions et la sécurité.
Comment savoir si un module est un bon candidat microservice ?
Un bon candidat possède une responsabilité métier claire, des données relativement autonomes, un besoin d’évolution ou de scalabilité indépendant, et un coût d’exploitation justifiable. S’il nécessite des échanges permanents avec le reste du système pour chaque opération, il faut souvent retravailler les frontières avant de l’extraire.
La décision entre monolithe ou microservices doit être traitée comme une démarche d’architecture progressive, pas comme un choix idéologique. Pour une application web critique, la bonne cible est celle qui protège l’activité tout en ouvrant des marges d’évolution. Scripters accompagne les entreprises dans la conception, le développement et l’évolution de solutions digitales sur mesure, avec une attention particulière portée à la compréhension métier, à l’architecture applicative et à la maintenabilité. Si vous préparez la modernisation d’une application web existante, un échange peut aider à qualifier le bon scénario : modularisation, API, extraction ciblée de services ou refonte partielle maîtrisée.



