Atelier de Cartographie de Contexte : Mapper les Relations Socio-Techniques
Atelier de Cartographie de Contexte
Étape 6 du DDD Starter Modelling Process : “Organise”
(2h à 3h, idéal 8-20 participants)
Contexte : Où sommes-nous dans le DDD Starter Modelling Process ?
Cet atelier intervient après :
- ✅ EventStorming : Vous avez découvert le domaine collaborativement
- ✅ Décomposition en sous-domaines : Vous avez identifié les délimitations naturelles
- ✅ Analyse stratégique : Vous avez identifié vos core domains
- ✅ Domain Message Flow : Vous avez modélisé les flux end-to-end
Maintenant, il s’agit d’organiser les équipes et de clarifier les patterns d’intégration entre contextes. La cartographie de contexte répond à la question :
“Comment organiser nos équipes et nos relations d’intégration pour que nous travaillions de manière autonome mais coordonnée ?”
Objectifs de l’Atelier
À la fin de cet atelier, vous devez avoir :
- ✅ Une carte visuelle des bounded contexts avec leurs relations explicites
- ✅ La classification des relations (mutuellement dépendants, upstream/downstream, libres)
- ✅ Le sélection de patterns d’intégration pour chaque relation
- ✅ Une identification des anti-patterns à corriger (ex: Big Ball Of Mud)
- ✅ Une vision commune entre toutes les équipes sur la socio-technologie
Design de l’Atelier
1. Introduction (15 min)
Présentation du Domain-Driven Design et des contextes délimités
- Concept de bounded context : frontière explicite autour d’un domaine
- Pourquoi les contextes multiples sont inévitables dans les grands systèmes
- Loi de Conway : l’architecture reflète la structure organisationnelle
Distribution des ressources
- Chaque sous-groupe reçoit un template de carte de contexte
- Exemples visuels des 9 patterns
- Sticky notes et marqueurs pour la cartographie collaborative
2. Phase 1 : Identification des Contextes (30 min)
Brainstorming collectif sur la structure actuelle
- “Quels sont nos services/domaines principaux ?”
- “Quelles sont les responsabilités distinctes ?”
- “Où s’arrête un domaine et où en commence un autre ?”
Première cartographie murale
- Dessiner les bulles (bounded contexts) sur le mur
- Nommer clairement chaque contexte
- Identifier les équipes responsables
Questions de clarification
- “Y a-t-il des zones grises entre les contextes ?”
- “Où voyez-vous du ‘Big Ball Of Mud’ ?”
- “Quels contextes sont isolés vs. interdépendants ?”
3. Phase 2 : Cartographie des Relations (50 min)
Identifier les dépendances réelles
Par paire de contextes, discuter :
- “Ces deux contextes doivent-ils interagir ?”
- “Qui dépend de qui ?”
- “Quelle est l’asymétrie (s’il y en a une) ?”
Type de relation d’équipe
Pour chaque interaction, classifier :
- Mutuellement dépendants : Les deux réussissent ou échouent ensemble
- Upstream/Downstream : Un contexte influence l’autre de manière asymétrique
- Libres : Aucune relation intentionnelle
Sélectionner les patterns d’intégration
Pour chaque relation, choisir parmi les 9 patterns et justifier :
Les 9 Patterns Détaillés
1. Open-host Service
- L’équipe upstream expose une interface (API, événements, etc.) ouverte
- Tous les clients downstream peuvent l’utiliser
- L’interface évolue pour accommoder de nouveaux besoins
- ✅ Quand : Plusieurs clients downstream, peu de besoins idiosyncratiques
- ❌ Pas bon pour : Relations très asymétriques ou besoins très spécifiques
2. Conformist
- L’équipe downstream adopte le modèle et le langage de l’upstream
- Pas de traduction, pas de couche d’adaptation
- Simplifie l’intégration mais limite l’indépendance downstream
- ✅ Quand : Upstream très dominant, pas d’objection sémantique
- ❌ Pas bon pour : Besoins radicalement différents
3. Anticorruption Layer (ACL)
- L’équipe downstream crée une couche de traduction
- Protège son propre domaine du modèle upstream
- Permet une évolution indépendante
- ✅ Quand : Modèles radicalement différents, besoin d’indépendance
- ❌ Pas bon pour : Relations très simples, surcoût de complexité
4. Shared Kernel
- Deux équipes partagent explicitement une partie du modèle de domaine
- Code/base de données commune pour cette partie
- Changements coordonnés pour cette partie
- ✅ Quand : Noyau métier critique commun aux deux
- ❌ Pas bon pour : Nombreuses interactions, besoins divegents
5. Partnership
- Deux équipes collaborent fortement sur l’évolution des interfaces
- Planification coordonnée et jointe
- Dépendances multiples et interdépendantes
- ✅ Quand : Contextes mutuellement dépendants, équipes colocalisées
- ❌ Pas bon pour : Nombreux contextes, overhead de coordination
6. Customer/Supplier Development
- Relation formelle client/fournisseur
- L’équipe downstream a un rôle de “client” dans la planification upstream
- Négociation des besoins, budgétisation des tâches
- ✅ Quand : Upstream peut réussir sans downstream, mais downstream prioritaires pour upstream
- ❌ Pas bon pour : Mutuellement dépendants (voir Partnership)
7. Published Language
- Langage commun, bien documenté, pour exprimer les concepts métier
- Standards partagés (format, ontologie)
- Traductions vers/depuis ce langage
- ✅ Quand : Nombreux contextes, besoin de communication claire
- ❌ Pas bon pour : Relation simple entre deux contextes
8. Separate Ways
- Pas d’intégration intentionnelle
- Chaque contexte évolue indépendamment
- Intégration ad-hoc seulement si nécessaire
- ✅ Quand : Véritablement aucune dépendance
- ❌ Pas bon pour : Il y a de vraies dépendances cachées
9. Big Ball Of Mud
- ⚠️ Anti-pattern : Contexte mal défini, modèles mélangés
- Pas de limites claires
- Impossible de faire évoluer indépendamment
- Stratégie : Isoler progressivement en créant une Anticorruption Layer autour
4. Phase 3 : Validation et Challenge (30 min)
Présentation par équipe
Chaque équipe/groupe présente sa portion de la carte :
- Les contextes qu’ils gèrent
- Les relations avec d’autres contextes
- Les patterns choisis
Questions de challenge croisé
Les autres groupes questionnent :
- “Pourquoi ce pattern plutôt qu’un autre ?”
- “Avez-vous oublié une dépendance ?”
- “Voyez-vous du ‘Big Ball Of Mud’ que vous n’avez pas nommé ?”
- “Est-ce que cette relation reflète la réalité ou l’idéal ?”
Ajustements collectifs
Intégrer les retours dans la carte globale
5. Phase 4 : Analyse de la Carte Complète (25 min)
Identification des hotspots
- Quels contextes sont sur-sollicités ?
- Quels contextes sont isolés alors qu’ils devraient interagir ?
- Où voyez-vous des frictions ?
Analyse socio-technique
- La carte reflète-t-elle la réalité organisationnelle ?
- Y a-t-il des désalignements entre structure d’équipe et structure technique ?
- Comment ces désalignements créent-ils des problèmes ?
Opportunités d’amélioration
- “Quel pattern pourrait améliorer la situation ?”
- “Devrions-nous réorganiser certains contextes ?”
- “Devrions-nous créer une Anticorruption Layer quelque part ?”
6. Conclusion / Prochaines Étapes (10 min)
Résumé de la carte
Présenter la version finale de la cartographie
Prochaines actions
- Valider la carte avec des parties prenantes absentes
- Documenter les patterns et les justifications
- Établir un plan pour éviter/sortir du “Big Ball Of Mud”
- Planifier des reteaming si désalignements importants
Invitation à prolonger
- Blog : articles détaillés sur chaque pattern
- Ateliers de suivi pour affiner la carte
- Implémentation progressive des patterns
Les 9 Cartes en Référence
Relations d’équipes (3 types)
-
Mutuellement Dépendants
- Les deux contextes/équipes doivent réussir ensemble
- Forte coordination nécessaire
- Déploiements souvent couplés
-
Upstream/Downstream
- Relation asymétrique
- L’upstream peut réussir sans le downstream
- Le downstream ne peut pas réussir sans l’upstream
-
Libres
- Aucune dépendance intentionnelle
- Évolutions complètement indépendantes
- Couplage accidentel indésirable
Patterns (9 patterns)
| Pattern | Description | Quand l’utiliser | Risques |
|---|---|---|---|
| Open-host Service | Interface commune exposée | Plusieurs clients, besoins similaires | Peut devenir trop générique |
| Conformist | Downstream adopte le modèle upstream | Upstream très dominant | Perte d’indépendance |
| Anticorruption Layer | Couche d’isolation et traduction | Modèles très différents | Complexité supplémentaire |
| Shared Kernel | Partage explicite d’une partie du domaine | Noyau critique commun | Couplage sémantique |
| Partnership | Collaboration forte sur les interfaces | Mutuellement dépendants | Overhead de coordination |
| Customer/Supplier Development | Relation client/fournisseur formelle | Upstream indépendant mais coopératif | Peut créer de la friction |
| Published Language | Langage commun documenté | Nombreux contextes | Complexité de maintenir le standard |
| Separate Ways | Pas d’intégration intentionnelle | Vraiment aucune dépendance | Risque de dépendances cachées |
| Big Ball Of Mud | Anti-pattern à éviter | Isoler progressivement | Évoluer devient impossible |
Questions pour Animer la Discussion
Phase 1 : Identification des Contextes
- Quels domaines métier distincts identifiez-vous ?
- Comment les équipes sont-elles actuellement organisées ?
- Y a-t-il des zones qui ne sont claires pour personne ?
- Où voyez-vous des zones grises ou du chaos ?
Phase 2 : Cartographie des Relations
- Comment ce contexte communique-t-il avec celui-ci ?
- Qui initie les changements : l’upstream ou le downstream ?
- Quel pattern décrit le mieux cette interaction actuelle ?
- Quel pattern améliorerait cette interaction ?
Phase 3 : Validation
- Ce pattern reflète-t-il la réalité ou l’intention ?
- Voyez-vous des problèmes d’implémentation dans ce pattern ?
- Y a-t-il des dépendances implicites que nous n’avons pas nommées ?
Phase 4 : Analyse
- Où voyez-vous du “Big Ball Of Mud” ?
- Où vois-tu de la friction dans la collaboration ?
- Comment cette carte nous aide-t-elle à prendre de meilleures décisions ?
- Quels changements devraient être prioritaires ?
Artefacts de Sortie
Carte visuelle
- Diagramme affichable des contextes et relations
- Légende des patterns utilisés
- Identification des hotspots
Documentation
- Description de chaque contexte
- Justification du pattern choisi pour chaque relation
- Risques identifiés
- Plan d’action pour les amélirations
Prochaines Étapes
- Ateliers de suivi par zone
- Implémentation progressive des patterns
- Reteaming si nécessaire
Après la Cartographie de Contexte : Continuation du DDD Starter Modelling Process
Une fois que vous avez une Context Map validée, vous êtes prêt pour passer aux étapes suivantes :
Étape 7 : Define - Bounded Context Canvas
Pour chaque bounded context identifié dans votre cartographie :
- Utiliser le Bounded Context Canvas pour détailler les responsabilités
- Clarifier les entrées/sorties (APIs, événements)
- Identifier les dépendances externes explicitement
Outil recommandé : Bounded Context Canvas
Étape 8 : Code - Aggregate Design Canvas
Pour chaque contexte, modéliser les agrégats :
- Utiliser l’Aggregate Design Canvas pour designer les entités racines
- Clarifier les comportements et invariants
- Valider les limites des agrégats avec la Context Map
Outil recommandé : Aggregate Design Canvas
Itération et Feedback
- La Context Map n’est pas figée - elle évolue avec votre compréhension
- Chaque semaine/sprint, revisiter la carte au fur et à mesure que vous codez
- Les insights du code peuvent remettre en question la cartographie
- C’est normal et attendu : c’est comme ça qu’on fait du DDD
Ressources pour Continuer
- DDD Starter Modelling Process - Le processus complet avec toutes les étapes
- DDD Crew Tools - Tous les canvas et outils OpenSource
- Visual Collaboration Tools - Guide pour l’animation collaborative
- Team Topologies - Pour affiner l’organisation des équipes après la cartographie