Cartographie

📇 Carte Context Mapping #8 : Customer/Supplier Development

Vue Rapide

🎯 Objectif : Upstream co-concevoir des interfaces avec downstream

👥 Relation d’équipe : Upstream/Downstream (avec engagement)

📊 Couplage : Moyen (interface négociée)


Concept

L’équipe upstream et l’équipe downstream collaborent pour concevoir une interface optimale pour les deux.

Upstream Team          Downstream Team
(Supplier)    ↔       (Customer)
       ↓ Négociation ↓
   Interface optimale

La philosophie : “Je fournisseur, tu es client. Parlons de ce que tu as besoin.”


Quand l’Utiliser ? ✅

  • ✅ Vous avez un vrai client/fournisseur (asymétrique)
  • ✅ Le downstream a des besoins spécifiques (pas un “molten mass”)
  • ✅ L’upstream veut servir et écoute le downstream
  • Communication régulière entre les deux teams
  • ✅ L’interface peut évoluer progressivement ensemble

Exemples

  • Backend ↔ Frontend : designer l’API ensemble
  • Platform ↔ Tenant : customiser la plateforme pour tenants
  • Library Publisher ↔ Library User : design API avec des usagers
  • Data Provider ↔ Data Consumer : ajuster le format d’export

Quand l’Éviter ? ❌

  • ❌ L’upstream a trop de downstream : pas de scalabilité
  • ❌ Les downstream ne peuvent pas communiquer
  • ❌ L’upstream ne veut pas investir dans la relation
  • ❌ C’est une relation transactionnelle : plutôt Published Language
  • ❌ Le downstream n’a pas de besoins particuliers

Questions Clés à se Poser 💭

  1. Avez-vous vraiment entendu les besoins du downstream ?
  2. À quelle fréquence vous collaborez sur l’interface ?
  3. Qui arbitre si les besoins entrent en conflit ?
  4. Comment mesurez-vous que l’interface répond aux besoins ?
  5. Comment évoluez-vous l’interface ensemble ?

Implications pour Upstream

Responsabilités

  • Écouter les besoins du downstream
  • Co-concevoir les solutions
  • ✓ Fournir support et training au downstream
  • ✓ Investir dans la relation

Avantages

  • Client heureux : vous livrez exactement ce qu’il faut
  • Feedback rapide : vous voyez les problèmes tôt
  • Innovation ensemble : meilleures solutions
  • Loyalty : downstream vous fait confiance

Risques

  • ⚠️ Consommateur de temps : beaucoup de réunions
  • ⚠️ Customization : interface devient complexe
  • ⚠️ Dépendance : difficile de changer l’interface
  • ⚠️ Expectations : si tu écoutes, les demandes augmentent

Implications pour Downstream

Responsabilités

  • Articuler clairement vos besoins
  • Participer activement à la conception
  • ✓ Tester et valider rapidement
  • ✓ Donner feedback constructif

Avantages

  • Interface taillée pour vous : pas de Anticorruption Layer
  • Influence : vos besoins façonnent l’interface
  • Support : upstream veut vous aider réussir
  • Alignement : you’re not a second-class citizen

Risques

  • ⚠️ Dépendance : customization = tied to this supplier
  • ⚠️ Complexité : interface devient complexe pour te servir
  • ⚠️ Bloqué : si upstream dit non

Patterns de Collaboration

1. Sprint Collaboration

Sprint Planning: 
  ├─ Upstream team
  ├─ Downstream team  
  └─ Planifier ensemble ce sprint

Sprint Execution:
  ├─ Upstream implémente feature
  ├─ Downstream testes dans son contexte
  └─ Feedback

Sprint Review:
  ├─ Demo ensemble
  ├─ Validation
  └─ Plannifier prochain sprint

2. Feature Request Process

Downstream has need:
  "Je veux faire X, tu peux m'aider ?"
    ↓
Upstream analyzes:
  "Voici 3 options"
    ↓
Co-decision:
  "On fait option 2"
    ↓
Co-implementation:
  "Voici le draft, test-le"
    ↓
Validation:
  "Perfect ! merge"

3. Design Partnership

Upstream proposes interface:
  "Voici mon design pour Feature X"
    ↓
Downstream reviews:
  "J'aime A et B, mais C c'est pas bon"
    ↓
Iterate:
  "Et si on faisait C comme ça ?"
    ↓
Agree et Implement

Exemple Concret : E-commerce Platform (Upstream) ↔ Merchant (Downstream)

Contexte

  • Platform : e-commerce host
  • Merchant : seller using the platform
  • Merchant a besoin de custom inventory management

Phase 1: Listen to Customer

Merchant says:

📇 Carte Context Mapping #9 : Big Ball Of Mud (BBOM)

Vue Rapide

🎯 Objectif : Reconnaître et documenter une zone chaotique sans structure claire

👥 Relation d’équipe : Sans structure (amorphe)

📊 Couplage : Extrêmement haut (tout touche à tout)


Concept

Une partie du système où les limites sont floues, les responsabilités mélangées, et les dépendances partout.

🌀 BBOM 🌀
├─ Code legacy sans structure
├─ Domaines entrelacés
├─ "Je sais pas comment ça marche"
├─ "Peur de toucher"
└─ Tout change partout

La philosophie : “C’est pas un pattern, c’est un symptôme d’absence de pattern”

📇Carte Context Mapping #1 : Open-host Service

Vue Rapide

🎯 Objectif : Un contexte expose une interface commune à plusieurs clients

👥 Relation d’équipe : Upstream/Downstream (asymétrique)

📊 Couplage : Moyen → Bas (dépend de la stabilité de l’interface)


Concept

L’équipe upstream expose une interface (API, événements, etc.) ouverte et publique que tous les clients downstream peuvent utiliser.

L’interface évolue pour accommoder de nouveaux besoins mais reste cohérente et documentée.

Upstream (Open-host Service)
        ↓ (API publique stable)
    Downstream 1
    Downstream 2
    Downstream 3 (clients multiples)

Quand l’Utiliser ? ✅

  • Plusieurs clients downstream avec des besoins similaires
  • ✅ L’upstream peut réussir indépendamment des clients
  • ✅ Vous avez une équipe dédiée pour maintenir l’interface
  • ✅ Les besoins des clients sont génériques et prévisibles
  • ✅ Vous voulez une approche scalable (ajouter de nouveaux clients facilement)

Exemples

  • Stripe API : Interface publique pour les paiements
  • Système de catalogue : Expose une API de consultation
  • Service d’authentification : Interface standardisée pour login

Quand l’Éviter ? ❌

  • ❌ Besoin très spécifique d’un seul client
  • ❌ L’interface change constamment (domaine trop exploratoire)
  • ❌ Les besoins des clients sont radicalement différents
  • ❌ Pas de ressource pour maintenir l’interface

Questions Clés à se Poser 💭

  1. Y a-t-il plusieurs clients qui consomment ce service ?
  2. L’interface peut-elle être stable et générique ?
  3. L’upstream peut-il investir dans la maintenance de l’interface ?
  4. Les clients acceptent-ils de se conformer à l’interface publique ?
  5. Comment versionnez-vous l’API pour ne pas casser les clients ?

Implications pour l’Équipe Upstream

Responsabilités

  • ✓ Concevoir une interface générique et réutilisable
  • Documenter l’interface publique clairement
  • Maintenir la compatibilité (versioning, backward compatibility)
  • Supporter les clients : comprendre leurs besoins
  • Évoluer l’interface pour accueillir de nouveaux cas

Avantages

  • Scale facilement : ajouter de nouveaux clients sans recoder
  • Faible coupling : les clients n’impactent pas la logique upstream
  • Autonomie des clients : ils peuvent évoluer indépendamment

Risques

  • ⚠️ L’interface devient un goulot d’étranglement
  • ⚠️ Les besoins des clients créent une interface trop générique ou trop complexe
  • ⚠️ Maintenance : gérer plusieurs versions de l’API
  • ⚠️ Les clients sont limités à ce que l’interface propose

Implications pour l’Équipe Downstream

Responsabilités

  • Utiliser l’interface telle qu’elle est (pas de négociation)
  • Adapter votre domaine à l’interface upstream
  • Respecter les contrats (versioning, breaking changes)

Avantages

  • Simple d’intégration : pas de traduction complexe
  • Fiabilité : interface bien documentée et stable
  • Pas de dépendance forte : vous pouvez changer sans affecter l’upstream

Risques

  • ⚠️ L’interface ne vous convient pas parfaitement
  • ⚠️ Adapter votre logique à l’interface plutôt que l’inverse
  • ⚠️ Si l’API change, vous devez vous adapter rapidement

Exemple Concret : Système de Paiement

Contexte Upstream : Payment Service

Interface publique (API REST) :
- POST /payments → créer un paiement
- GET /payments/{id} → récupérer le statut
- POST /refunds → effectuer un remboursement
- Events : PaymentCreated, PaymentSucceeded, PaymentFailed

Contextes Downstream

  • Order Service : Utilise l’API de paiement
  • Subscription Service : Utilise l’API de paiement
  • Invoicing Service : Reçoit les événements PaymentSucceeded

Décisions

  • Une seule interface pour tous les cas
  • Versionning : /v1/payments, /v2/payments si breaking change
  • Documentation : Swagger/OpenAPI pour chaque version

Intégration avec Context Mapping

Relations d’Équipe

Payment Team (Upstream - Open-host Service)
        ↓ (API publique)
    Order Team (Downstream - Conformist)
    Subscription Team (Downstream - Conformist)
    Invoicing Team (Downstream - Conformist)

Patterns Downstream Associés

  • Conformist : Les clients adoptent l’interface telle qu’elle
  • Anticorruption Layer : Un client crée une couche de traduction (optionnel)

Checklist de Mise en Place ✓

  • Vous avez identifié plusieurs clients potentiels
  • L’interface est générique et peut servir plusieurs cas
  • Vous avez une équipe dédiée pour la maintenir
  • L’interface est documentée (Swagger, wiki, etc.)
  • Vous avez une stratégie de versioning claire
  • Les clients savent à quoi s’attendre

Ressources et Lectures


Notes de Facilitation pour l’Atelier

Animation

  • Demandez : “Combien de clients potentiels avez-vous ?”
  • Explorez : “L’interface peut-elle rester stable ?”
  • Validez : “Quelqu’un d’autre que vous peut-il la comprendre et l’utiliser ?”

Pièges Communs

  • ⚠️ Penser que tout est OpenAPI → certains domaines n’y sont pas adaptés
  • ⚠️ Négliger la maintenance → les interfaces dégénèrent
  • ⚠️ Trop générique → personne ne la comprend

Questions Provocatrices

  • “Et si vous aviez 10 clients ? 100 clients ?”
  • “Comment réagiriez-vous si un client dit ‘Votre API ne me convient pas’ ?”

📇Carte Context Mapping #10 : Mutually Dependent Teams (Team Relationship)

Vue Rapide

🎯 Objectif : Deux équipes ont besoin l’une de l’autre - même poids politique

💼 Type de relation : Équipes au même niveau hiérarchique

🔗 Nature : Interdépendance inévitable


Concept

Deux équipes où ni l’une ne peut progresser indépendamment de l’autre.

Team A ←→ Team B
  Equal weight
  Mutual need
  Symmetric relationship

Caractéristiques

Ce qui les Définit

  • Même niveau hiérarchique : pas de subordination
  • Codépendance : l’une ne peut pas avancer sans l’autre
  • Poids politique équivalent : les deux ont du poids
  • Besoin mutuel : pas d’asymétrie

Ce qui les Différencie des Autres

VS. Upstream/Downstream:
  → Upstream/Downstream = asymétrique
  → Mutually Dependent = symétrique

VS. Independent:
  → Independent = zéro dépendance
  → Mutually Dependent = dépendance totale

Exemplesmonde réel

Frontend Team ↔ Backend Team (pour un même produit)
Catalog Service ↔ Inventory Service (interconnectés)
Platform ↔ Billing (même valeur critique)
Client Support ↔ Product Management (input/output)

Implications Organisationnelles

Coordination Nécessaire

  • 📅 Sprint planning ensemble
  • 🤝 Dailies synchronisées
  • 🎯 OKRs alignés
  • 📋 Dépendance tracking

Processus de Synchronisation

Decision/Change needed
    ↓
Both teams discuss
    ↓
Agree on approach
    ↓
Implement together
    ↓
Verify integration

Escalation

Désaccord?
    ↓
Try to negotiate (48h)
    ↓
If stuck: escalate to common manager
    ↓
Manager arbitrates

Patterns Associés aux Mutual Dependency

La plupart des patterns requièrent cette relation:

  1. Partnership → Mutually Dependent teams

📇Carte Context Mapping #13 : Matrice de Sélection des Patterns

Vue Rapide

🎯 Objectif : Choisir le bon pattern selon votre situation

📊 Type : Guide de décision


Arbre de Décision

Q1: Les deux contextes dépendent-ils l'un de l'autre?

├─ NON, zéro dépendance
│  └─ SEPARATE WAYS ✓ (ou Independent Teams)
│
└─ OUI, il y a dépendance
   │
   ├─ Q2: Est-ce une dépendance mutuelle (symétrique)?
   │  │
   │  ├─ OUI, mutuelle
   │  │  │
   │  │  ├─ Q3: Vous voulez partager du code?
   │  │  │  ├─ OUI → SHARED KERNEL ✓
   │  │  │  └─ NON → PARTNERSHIP ✓
   │  │  │
   │  │  └─ (Relation d'équipe: Mutually Dependent)
   │  │
   │  └─ NON, asymétrique (Upstream/Downstream)
   │     │
   │     ├─ Q3: Combien de downstream?
   │     │  │
   │     │  ├─ Beaucoup (3+)
   │     │  │  └─ PUBLISHED LANGUAGE ✓
   │     │  │
   │     │  └─ Peu (1-2)
   │     │     │
   │     │     ├─ Q4: Collaborer sur l'interface?
   │     │     │  ├─ OUI → CUSTOMER/SUPPLIER DEVELOPMENT ✓
   │     │     │  └─ NON
   │     │     │     │
   │     │     │     ├─ Q5: Le modèle upstream convient?
   │     │     │     │  ├─ OUI → CONFORMIST ✓
   │     │     │     │  └─ NON → ANTICORRUPTION LAYER ✓
   │     │     │
   │     │     └─ (Relation d'équipe: Upstream/Downstream)
   │
   └─ SPÉCIAL: Découvrir un Big Ball Of Mud?
      └─ BIG BALL OF MUD = symptôme (stratégie: Strangler)
         Puis appliquer les patterns au nouveau code

Matrice Décisionnelle

Par Type de Relation d’Équipe

Relation Patterns Possibles Couplage Avantages Risques
Independent Separate Ways Aucun Vitesse, Autonomie Duplication
Mutually Dependent Shared Kernel, Partnership Haut/Moyen Collaboration, Cohésion Synchronisation lente
Upstream/Downstream Published Language, Customer/Supplier, Conformist, ACL Moyen-Bas Clarté, Scalabilité Blocking sur upstream

Par Situation

Situation 1: Legacy System + Nouveau Projet

Q: Pouvez-vous modifier le legacy?
├─ NON, intouchable
│  └─ ANTICORRUPTION LAYER
│     (Bubble Context protégeant le nouveau)
│
└─ OUI, progressif
   └─ SEPARATE WAYS + Strangler Pattern
      (Extraire nouveau, laisser legacy coexister)

Situation 2: Plateforme Core + Multiples Services

Q: Core tient-il le poids?
├─ NON, trop changements
│  └─ SEPARATE WAYS
│     (Chacun sa version)
│
└─ OUI, stable et bon
   ├─ Peu de consumers
   │  └─ CUSTOMER/SUPPLIER DEVELOPMENT
   │
   └─ Beaucoup de consumers
      └─ PUBLISHED LANGUAGE
         (Spec stable, chacun sa traduction)

Situation 3: Deux Équipes, Même Produit (Frontend/Backend)

Q: Avez-vous du code réellement partagé?
├─ OUI (domain models, value objects)
│  └─ SHARED KERNEL + PARTNERSHIP
│
└─ NON, juste interfaces
   └─ PARTNERSHIP
      (API négociée, chacun son code)

Situation 4: Données Critiques Partagées

Q: Temps-réel synchronisation requise?
├─ OUI, toujours sync
│  ├─ Même équipe/code
│  │  └─ SHARED KERNEL (literal)
│  │
│  └─ Équipes différentes
│     └─ PARTNERSHIP + synchrone
│        (Risque: tightly coupled)
│
└─ NON, batch/async OK
   └─ SEPARATE WAYS + Events
      (Broadcast events, each reacts asynchronously)

Par Critères Techniques

Critère: Modèle Upstream Compatible?

Compatible?
├─ OUI, parfait fit
│  └─ CONFORMIST
│
└─ NON, beaucoup diffère
   └─ ANTICORRUPTION LAYER

Critère: Interface Complexité

Traduction simple?
├─ OUI (champs directs)
│  └─ CONFORMIST ou ACL simple
│
└─ NON (calculs, agrégation)
   └─ ACL complexe
      ou chercher alternative (Published Language?)

Critère: Scalabilité

Combien de consumers?
├─ 1-2
│  └─ Upstream/Downstream simple OK
│
├─ 3-5
│  └─ Published Language commence
│
└─ 5+ ou communauté
   └─ Published Language obligatoire
      (ou découpler vers Independent)

Par Coût d’Intégration

Coût TRÈS haut?
├─ OUI (complexe, risqué)
│  └─ Réévaluer dépendance
│  └─ Considérer SEPARATE WAYS
│  └─ Ou créer ACL (isolation)
│
└─ NON, acceptable
   └─ Choisir selon la relation d'équipe

Anti-patterns à Éviter

❌ Anti-pattern 1: Partnership Sans Communication

"On va faire de la partnership!"
→ Pas de réunions régulières
→ Changements unilatéraux
→ Dépendances cassées

Correction: Ajouter governance (réunions, process)
Ou revenir à Upstream/Downstream plus clair

❌ Anti-pattern 2: Shared Kernel Sans Propriétaire

"On partage le code!"
→ Personne ne le maintient
→ Divergence progessive
→ Chacun ajoute ses trucs

Correction: Nommer responsables du kernel
Ou réduire à vraiment partagé

❌ Anti-pattern 3: Trop d’Upstream/Downstream

"Platform est upstream de 50 services"
→ Platform bottleneck
→ Trop lent, trop tendu

Correction: Migrer vers Published Language
Ou découpler (services Independent)

❌ Anti-pattern 4: Oublier la Team Relationship

"On applique Shared Kernel"
→ Mais équipes ne communiquent jamais
→ Chaos prévisible

Correction: Pattern compatible avec relation d'équipe!

Feuille de Décision Rapide

Remplissez:

Question 1: Dépendance mutuelle ou asymétrique?

📇Carte Context Mapping #4 : Shared Kernel

Vue Rapide

🎯 Objectif : Deux équipes partagent du code et un modèle commun

👥 Relation d’équipe : Mutuellement Dépendant

📊 Couplage : Très haut (code partagé)


Concept

Deux contextes partagent du code source et un modèle de domaine commun.

Shared Kernel (Code + Model)
    ↙         ↘
Team A      Team B

Le noyau partagé n’appartient à aucun contexte, il est gardé par les deux.


Quand l’Utiliser ? ✅

  • ✅ Deux équipes très dépendantes l’une de l’autre
  • ✅ Créer une interface prendrait plus de temps qu’un code partagé
  • ✅ Les équipes veulent vraiment collaborer
  • ✅ Le code partagé est stable et bien défini
  • ✅ C’est une zone de frontière claire (pas du fouilli)

Exemples

  • Domain Entities partagées : Customer, Product (tous les services en ont besoin)
  • Value Objects : Money, EmailAddress (immuables, réutilisables)
  • Shared Policies : Règles métier communes
  • Shared Algorithms : Calculs complexes partagés

Quand l’Éviter ? ❌

  • ❌ Les équipes ne se font pas confiance
  • ❌ Le code partagé change fréquemment
  • ❌ Vous pouvez le dupliquer (plus simple)
  • ❌ Le code partagé n’est pas vraiment partagé (distinct par contexte)
  • ❌ Les équipes sont géographiquement éloignées (communication difficile)

Questions Clés à se Poser 💭

  1. Qu’est-ce qui est vraiment partagé ? (vs. similaire)
  2. Comment gérons-nous les changements du noyau ?
  3. Qui est responsable de maintenir le Shared Kernel ?
  4. Qu’arrive-t-il si les équipes divergent dans leurs besoins ?
  5. Comment versionnons-nous ce code partagé ?

Implications pour les Deux Équipes

Responsabilités Communes

  • Maintenir ensemble le Shared Kernel
  • Tester à fond : les changements affectent tous les contextes
  • Documenter clairement : quoi et pourquoi c’est partagé
  • Communiquer avant changement

Avantages

  • Efficacité : pas de duplication ou traduction
  • Cohérence : une seule source de vérité
  • Collaboration : force les équipes à travailler ensemble
  • Évolution facile : tout le monde évolue en même temps

Risques

  • ⚠️ Couplage très fort : changement = impacte les 2 contextes
  • ⚠️ Synchronisation lente : besoin de coordination
  • ⚠️ Conflits : si les besoins divergent
  • ⚠️ Cycles de dépendance : chaque équipe attend l’autre

Structure du Shared Kernel

Option 1 : Bibliothèque Partagée

shared-kernel/ (repository/package dédié)
├── domain-entities/
│   ├── Customer.ts
│   └── Product.ts
├── value-objects/
│   ├── Money.ts
│   └── EmailAddress.ts
└── policies/
    └── PricingPolicy.ts

Team A → imports shared-kernel
Team B → imports shared-kernel

Option 2 : Code Partagé dans Sous-Dossier

monorepo/
├── services/team-a/
│   ├── src/
│   └── shared/ (lien vers shared-kernel)
├── services/team-b/
│   ├── src/
│   └── shared/ (lien vers shared-kernel)
└── shared-kernel/
    ├── entities/
    ├── value-objects/
    └── policies/

Exemple Concret : E-commerce Shared Entities

Contexte

Deux équipes : Catalog et Inventory

📇Carte Context Mapping #7 : Published Language

Vue Rapide

🎯 Objectif : Upstream publie un langage standard pour tous les downstream

👥 Relation d’équipe : Upstream/Downstream (nombreux downstream)

📊 Couplage : Bas (via langage public)


Concept

L’équipe upstream publie un langage commun (formats, événements, API) que tous les downstream adopent.

Upstream Service
    ↓
Published Language (JSON Schema, Events, OpenAPI)
    ↓ ↓ ↓ ↓ ↓
Downstream 1, 2, 3, 4, 5... (nombreux)

La philosophie : “Voici notre langage public. Si vous le respectez, ça fonctionne.”

🔗 Dependency Breakers

Identifier et Briser les Dépendances Problématiques

Introduction

Toute architecture complexe accumule des dépendances. Mais pas toutes les dépendances sont bonnes. Certaines deviennent problématiques : elles ralentissent, bloquent, créent du risque, ou violent l’autonomie des équipes.

Ce guide vous aide à :

  1. Identifier les dépendances problématiques
  2. Comprendre pourquoi elles posent problème
  3. Appliquer des patterns pour les “briser” (dependency breakers)

Partie 1: Diagnostiquer les Dépendances Problématiques

Qu’est-ce qu’une Dépendance Problématique?

Une dépendance est problématique si elle a une ou plusieurs de ces caractéristiques:

Atelier Cartographie des Paris Produit

Design de l’atelier “Paris Produit” / “Product Bets”

Pourquoi un atelier ?

Les Product Bets ne sont pas un simple exercice académique. C’est un processus de collaboration intense entre :

  • Les responsables produit
  • Les leaders techniques
  • Les sponsors métier
  • Les stakeholders clés

L’Atelier Paris Produits

Cet atelier de 2 à 3 heures (6-20 participants) est structuré pour :

  1. Introduire le concept des Product Bets et leurs bénéfices
  2. Identifier collectivement les opportunités métier réelles
  3. Construire collaborativement les cartes de chaque pari (hypothèses, risques, ressources, métriques)
  4. Confronter les idées à travers des challenges croisés entre équipes
  5. Prioriser visuellement les paris selon leur valeur estimée vs. leur risque
  6. Capturer l’énergie et engager tous les participants dans l’ownership du résultat

Les 7 cartes en référence

L’atelier utilise 7 zones principales à renseigner pour structurer la réflexion sur chaque Product Bet :

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 :