03. Découper mon monolithe

🧩 Cet article fait partie d’une série sur l’EventStorming

Description de l’approche

La décomposition d’un grand système en composants plus petits, modulaires et faciles à maintenir est une question fréquemment soulevée dans les projets de transformation.

EventStorming est une mĂ©thode visuelle largement considĂ©rĂ©e comme idĂ©ale pour identifier les bounded contexts et dĂ©finir des microservices. Toutefois, lorsqu’il s’agit de dĂ©couper un monolithe, une notion clĂ© doit ĂŞtre prise en compte : l’architecture loosely coupled. En effet, si le dĂ©coupage d’un monolithe ne permet pas d’éviter une complexitĂ© excessive au niveau de l’intĂ©gration et du dĂ©ploiement (par exemple, l’obligation de dĂ©ployer l’ensemble du système simultanĂ©ment), alors la transformation n’aura pas apportĂ© les bĂ©nĂ©fices attendus.

C’est pourquoi il est essentiel d’aller au-delà d’EventStorming en introduisant une modélisation plus approfondie, afin de traiter spécifiquement les aspects d’intégration et de communication entre les microservices.

Nick Tune nous livre sa méthode, article qui a inspiré la démarche décrite ci-dessous.

Les étapes du Workshop

Le workshop se déroule en 4 étapes :

  1. Créer une EventStorming Big Picture pour comprendre le processus complet.
  2. Analyser rapidement la Big Picture pour faire émerger les grands domaines fonctionnels (à défaut de trouver les bounded contexts).
  3. Analyser des scĂ©narios (ou use cases) stratĂ©giques Ă  l’aide de Message Flow Modeling. C’est lors de cette phase que nous allons trouver les candidats pour les bounded contexts.
  4. Faire une carte d’identitĂ© de chaque bounded context grâce aux Bounded Context Canvas.

problem vs solution spaces

01. Big Picture EventStorming

đź’ˇ L’Ă©tape - Le but de cette Ă©tape est crĂ©er une EventStorming Big Picture opur comprendre le processus mĂ©tier dans sa globalitĂ©.

Participants : Il est essentiel d’avoir des représentants du métier ou des experts métier, ainsi que des développeurs et des personnes capables de concevoir des systèmes informatiques (architectes, tech leads, etc.).

On ne peut pas modĂ©liser la solution qui rĂ©pond Ă  un mĂ©tier qu’on ne comprend pas. La première Ă©tape consiste donc Ă  comprendre le processus mĂ©tier. On choisit un ou plusieurs scĂ©narios reprĂ©sentatifs d’un processus de bout en bout (end-to-end) ou d’un parcours client (customer journey). L’objectif est d’obtenir une vue globale du système et de faire Ă©merger les premiers bounded contexts ou, au minimum, les grands domaines fonctionnels.

Plus de dĂ©tails sur la technique de modĂ©lisation pour rĂ©aliser un EventStorming de type Big Picture. Si nĂ©cessaire, on peut approfondir certains processus en rĂ©alisant un EventStorming de type Process Modelling (qui est le second type d’EventStorming).

02. Identifier les Bounded Contexts

đź’ˇ L’Ă©tape - Le but de cette Ă©tape est d’analyser rapidement la Big Picture pour faire Ă©merger les grands domaines fonctionnels

Bounded Context ou microservices ?

Concevoir une architecture revient souvent à découper une structure complexe en sous-systèmes plus petits. Les bounded contexts permettent d’identifier et de définir des frontières claires au sein d’un système.

Le lient entre bounded contexts et microservices fluctuent. Pour certains, un microservice est un bounded context à part entière. Le sujet suscite évidemment des opinions bien tranchées, et de nombreux articles de blog lui ont été consacrés.

Emergent Bounded Context - La théorie

À ce stade, il est déjà possible en théorie de faire émerger des bounded contexts potentiels, en observant dans la Big Picture les zones de rupture, les vocabulaires distincts ou les responsabilités clairement délimitées. Ce sont les grosses patates sur ce schéma.

alt text

Source : https://github.com/ddd-crew/eventstorming-glossary-cheat-sheet

Les Bounded Contexts - La pratique

En rĂ©alitĂ©, cela n’est que rarement aussi simple.

Souvent, des Ă©vĂ©nements liĂ©s Ă  un mĂŞme bounded context apparaissent Ă  plusieurs endroits sur le tableau. Un mĂŞme bounded context peut se manifester au dĂ©but d’un processus, puis rĂ©apparaĂ®tre Ă  la fin. C’est pourquoi Alberto Brandolini, le crĂ©ateur de l’EventStorming, les qualifie de bounded contexts Ă©mergents. Ils Ă©mergent du processus, mais ils ne sont pas stabilisĂ©s ni dĂ©finitifs.

Dans ce workshop de modĂ©lisation, Nick Tune dĂ©crit le cycle de vie d’un bank account : un utilisateur crĂ©e un compte, il peut dĂ©poser ou retirer de l’argent, et mĂŞme fermer son compte. Ces activitĂ©s ne se dĂ©roulent pas toujours dans un ordre bien dĂ©fini, et elles sont souvent entrecoupĂ©es d’autres processus, comme la demande d’un prĂŞt ou l’ouverture d’un compte Ă©pargne.

alt text

Bounded Contexts vs. Domaines Fonctionnels

Ă€ dĂ©faut d’avoir les bounded contexts dans la Big Picture, que pouvons-nous attendre de cette première phase en termes de dĂ©coupe en microservices ?

Il est souvent plus réaliste de commencer par identifier des domaines fonctionnels plutôt que de chercher directement des bounded contexts complets et bien délimités.

Ces domaines fonctionnels représentent des zones d’activité métier cohérentes, comme la gestion des commandes, la relation client, la facturation ou la logistique.

Ils ne sont pas encore des bounded contexts au sens DDD - il manque encore un modèle de domaine, des frontières techniques - mais ils servent de boussoles pour organiser la suite de l’exploration. Repérer ces grands ensembles permet de structurer la complexité du système en blocs compréhensibles par tous.

alt text

03. Message Flow Modelling

đź’ˇ L’Ă©tape - L’objectif de cette Ă©tape est de proposer des candidats pour les bounded contexts, d’analyser leur utilisation ainsi que les modes de communication entre eux, afin de valider la lĂ©gitimitĂ© de ces candidats.

EventStorming vs Message Flow Modelling

Concevoir des systèmes faiblement couplĂ©s nĂ©cessite plus que de simples frontières bien dĂ©finies. Il est tout aussi important de dĂ©finir prĂ©cisĂ©ment les interactions entre les bounded contexts. C’est pour cette raison qu’un EventStorming de type Software Design ne suffit pas toujours. Nick Tune propose d’utiliser un autre outil appelĂ© Message Flow Modelling.

Le Message Flow Modelling est centrĂ© sur l’échange de messages entre les composants du système. C’est un outil plus adaptĂ© pour explorer ou valider la communication entre bounded contexts, et donc valider la dĂ©coupe en microservices. Avec Message Flow Modelling, les bounded contexts deviennent les acteurs principaux de l’histoire.

Modéliser les flux stratégiques du domaine permet d’obtenir un retour sur la qualité des bounded contexts proposés. Cela met en évidence comment ils collaborent et dépendent les uns des autres pour réaliser des use cases métier complets.

Message Flow Modelling

Message Flow Modelling - En pratique

Dans la pratique :

  • On part des domaines fonctionnels identifiĂ©s lors de la phase prĂ©cèdente comme bounded contexte
  • On sĂ©lectionne les flux stratĂ©giques, qu’on considère comme des scĂ©narios ou des use cases, en s’inspirant de la Big Picture, mais aussi de la connaissance mĂ©tier et technique des participants ;
  • Pour chaque scĂ©nario, on dessine le message flow correspondant

Question clé : « Est-ce que la description de chaque bounded context est alignée avec le rôle qu’il joue dans le use case décrit par le Message Flow Modelling ? ». Si ce n’est pas le cas, il est probable que le nommage ou les frontières du bounded context nécessitent une refonte.

D’accord, mais comment trouver les bon bounded contexts ?

Il n’existe malheureusement pas de méthode magique pour identifier les bounded contexts dans un système.

Dans ce workshop, Nick Tune se livre Ă  un exercice de modĂ©lisation d’un système d’Adaptive Cruise Control. Après une première phase consacrĂ©e Ă  l’exploration de l’espace du problème - Ă  travers un EventStorming de type Big Picture - il engage, avec son co-animateur jouant le rĂ´le d’expert mĂ©tier, une dĂ©marche de dĂ©couverte des bounded contexts. Ensemble, ils construisent progressivement une vision partagĂ©e du système en identifiant (devinant) les contours contextuels pertinents.

La réussite de cette découpe en bounded contexts, et donc en microservices, repose sur une connaissance approfondie du métier, une compréhension fine des enjeux fonctionnels, des compétences en conception logicielle et une capacité à modéliser de manière collaborative.

Il faut se lancer, oser une première découpe. Et surtout, itérer.

04. Bounded Context Canvas

đź’ˇ L’Ă©tape - L’objectif de cette Ă©tape est d’affiner les premiers bounded contexts ou microservices, en consolidant pour chacun d’eux les informations dispersĂ©es dans les diffĂ©rents MessagesFlow.

L’Ă©tape suivante du processus de conception consiste Ă  modĂ©liser chaque bounded context candidat en dĂ©taillant des critères de design clĂ©s. Pour cela, le Bounded Context Canvas fournit un support structurant, particulièrement utile pour faire Ă©merger une comprĂ©hension partagĂ©e du rĂ´le, des capacitĂ©s et des contraintes d’un contexte donnĂ©.

Exemple extrait de cet article : Bounded Context Canvas

Ce canevas est un outil itératif. Remplissez-le pour un contexte, puis recommencez pour les autres. L’idée n’est pas d’être parfait dès le départ, mais de progresser par cycles jusqu’à une modélisation claire et stable.

Définition du Contexte

Commencez par nommer le bounded context et décrire sa finalité dans le domaine métier. La description doit porter sur son rôle fonctionnel dans le système, pas sur des aspects techniques ou d’implémentation.

Un manque de clarté sur le nom, la description ou le vocabulaire partagé peut indiquer des frontières mal définies. Ce sont des opportunités de refactorisation.

Extraction des Règles Métier et du Ubiquitous Language

Appuyez-vous sur les résultats d’un EventStorming pour identifier les règles métier principales associées à ce contexte. Sélectionnez-en trois qui capturent l’essence du domaine et reportez-les sur le canvas.

Identifiez également les termes métier clés - mots ou expressions spécifiques - et placez-les dans la section Ubiquitous Language. Cette partie est évolutive : elle s’enrichira tout au long du processus de modélisation.

Capabilities

Listez les principales capabilities du contexte : que peut-il faire ? Que propose-t-il aux autres contextes ? Incluez aussi les tâches internes s’il y en a. Cela vous aidera à clarifier les responsabilités, à identifier les éventuels regroupements logiques et repérer les incohérences à corriger.

Workshop et itérations

Comme dans beaucoup de workshops liés à DDD ou à EventStorming, on appliquera les principes du Modeling Whirlpool

Dans ce workshop d’EventStorming visant Ă  dĂ©couper un monolithe, on devra :

  • Travailler dans l’espace du problème, pour comprendre ce qu’il faut modĂ©liser et aligner tous les participants autour d’une comprĂ©hension partagĂ©e.
  • Travailler dans l’espace de la solution, pour faire Ă©merger les microservices qui remplaceront le monolithe.
  • Retourner dans l’espace du problème quand des incohĂ©rences ou des manques d’explications apparaissent.

problem vs solution spaces

Last modified June 3, 2025: rewording (0729560)