Carte Context Mapping #6 : Separate Ways
📇 Carte #6 : Separate Ways
Vue Rapide
🎯 Objectif : Deux contextes se séparent complètement et se dupliquent
👥 Relation d’équipe : Indépendant
📊 Couplage : Nul (zero integration)
Concept
Les deux contextes abandonnent l’intégration et chacun gère sa propre version.
Team A Team B
(duplique) (duplique)
↓ ↓ ↓ ↓ ↓ ↓
Chemin séparé
La philosophie : “On se sépare, c’est plus simple”
Quand l’Utiliser ? ✅
- ✅ Le coût de l’intégration dépasse les bénéfices
- ✅ Les contextes évoluent différemment et indépendamment
- ✅ La duplication est acceptable (pas critique)
- ✅ Les équipes veulent une autonomie totale
- ✅ Les données peuvent être synchronisées via batch (pas temps-réel)
Exemples
- Legacy System vs. Nouveau Système : on les laisse cohabiter sans parler
- Rapport de gestion vs. Système de facturation : même données, deux lectures
- Analytics vs. Production : duplication OK, latence acceptable
- Deux variantes régionales : chacun son instance
Quand l’Éviter ? ❌
- ❌ L’intégration est vraiment nécessaire
- ❌ Les données doivent être synchronisées en temps-réel
- ❌ La duplication coûte trop cher (complexité, maintenance)
- ❌ Vous devez garder les données cohérentes
- ❌ C’est une fuite d’architecture (vraiment du même domaine)
Questions Clés à se Poser 💭
- Pouvez-vous vraiment vous permettre de dupliquer ?
- Quel est le coût de maintenir 2 versions ?
- Comment gérez-vous la divergence entre les deux ?
- Qu’arrive-t-il quand un changement métier affecte les deux ?
- Comment synchronisez-vous les données critiques ?
Implications pour les Équipes
Chaque Équipe Indépendante
Avantages
- ✓ Autonomie totale : chacun progresse à son rythme
- ✓ Zéro couplage : changements sans impact mutuel
- ✓ Simplicité : pas d’interface complexe
- ✓ Pas de réunions de coordination !
Risques
- ⚠️ Duplication : maintenance coûteuse
- ⚠️ Divergence : à long terme, les deux dérivent
- ⚠️ Incohérence : les données ne correspondent plus
- ⚠️ Coût caché : bug fixes doivent se répéter
Stratégies de Séparation
1. Complète (Clean Break)
Before: Service A ↔ Service B (intégration)
After: Service A Service B (indépendant)
→ Chacun a sa DB, son code, ses workflows
→ Zéro partage
2. Partielle (avec Batch Sync)
Service A (Commandes)
↓ (batch export chaque nuit)
Data Lake
↓ (batch import chaque nuit)
Service B (Analytics)
→ Services indépendants mais données synchronisées
→ Acceptable delay: 24h
3. Avec Archive
Legacy System (ancien)
↓ (migration progressive)
New System (nouveau)
→ Legacy continue de tourner
→ New prend du trafic progressivement
→ Un jour legacy s'éteint
Exemple Concret : Migration Vers Nouveau Système
Avant (Separate Ways Forcés - mauvais)
Legacy Order System (10 ans)
↓ (désuet, lent)
Couplé fortement à:
- Inventory System
- Billing System
- Reporting System
→ Impossible à modifier sans casser tout
→ Vraiment besoin de découpler!
Stratégie de Séparation
Phase 1: Créer New Order System (indépendant)
├── Copier la data du legacy
└── Tester en parallèle
Phase 2: Dual-write (transition)
├── Writes vont aux deux systèmes
├── New System est primary source of truth progressivement
└── Reports lisent à partir du New
Phase 3: Legacy read-only (legacy devient archive)
├── Legacy continue de tourner en read-only
├── Données historiques toujours accessibles
└── Queries récentes pointent vers New
Phase 4: Sunset legacy (éteindre l'ancien)
├── Archive les données du legacy
├── Décommissionner le système
└── Sauvegardes long-term seulement
Co-existence Pendant Transition
Frontend
↓
API Gateway (routing intelligent)
├→ New System (80% du trafic)
└→ Legacy System (20% du trafic, migration progressive)
Batch Job (chaque nuit)
├→ Exporte du New
├→ Importe dans Analytics
└→ Archive du Legacy
Données Critiques: Synchronisation Required
Scenario: Commandes et Facturation
Vous avez décidé de découpler Order ↔ Billing
Mais les données doivent rester cohérentes!
Solution: Event-driven sync
├── Order Service publie "OrderPlaced"
├── Billing Service l'écoute
├── Crée une facture provisoire
└── OK, ils restent cohérents même indépendants
Pas besoin d'une intégration serrée!
Coûts Cachés de Separate Ways
1. Duplication initiale
- Copier le code: 1-2 sprints
2. Maintenance double
- Bug fixe doit se répéter: +50% effort
3. Divergence dans le temps
- Après 12 mois: très difficile de re-coupler
4. Migration/Synchronisation
- Quand tu veux re-coupler: très coûteux
5. Confusion organisationnelle
- "C'est dans quel système ?"
Quand Revenir À L’Intégration ?
Signes d’alerte 🚨
❌ "Pourquoi les données ne correspondent pas ?"
❌ "On doit fixer le même bug dans 2 endroits"
❌ "C'est trop cher de maintenir 2 versions"
❌ "Les équipes veulent fusionner"
Transition Possible:
Separate Ways → Anticorruption Layer
(re-coupler progressivement)
ou
Separate Ways → Shared Kernel
(si vraiment du domaine partagé)
Rôles et Responsabilités
Team A (Contexte A)
- ✓ Possède et maintient sa version
- ✓ Responsable de sa qualité
- ✓ Peut changer son modèle sans concertation
Team B (Contexte B)
- ✓ Possède et maintient sa version
- ✓ Responsable de sa qualité
- ✓ Peut changer son modèle sans concertation
Organisation (governance)
- ✓ Décider quand re-coupler si besoin
- ✓ Gérer la synchronisation critique (si applicable)
- ✓ Monitorer la duplication coûteuse
Checklist de Mise en Place ✓
- Vous avez vraiment décidé de vous séparer
- Le coût de duplication est acceptable
- Vous avez une stratégie de synchronisation (si données critiques)
- Les équipes sont vraiment indépendantes (pas de dépendances cachées)
- Vous avez un plan de sunset (quand éteindre l’ancien)
- La documentation est claire sur quel système utiliser
Ressources et Lectures
- Domain-Driven Design par Eric Evans - Separate Ways
- Microservices Patterns par Chris Richardson - Strangler Pattern
- DDD Crew - Context Mapping
Notes de Facilitation pour l’Atelier
Animation
- Demandez : “Pourquoi vous voulez vous séparer ?”
- Testez : “Que se passe-t-il si les données divergent ?”
- Documentez : “Quel est le coût vrai ?”
Pièges Communs
- ⚠️ Sous-estimer la duplication : “On va juste copier” → très coûteux
- ⚠️ Données incohérentes : personne ne sait quelle version est vraie
- ⚠️ Plan de migration flou : “On verra…”
- ⚠️ Oublier les dépendances : découvrir tard qu’il y a des liens
Questions Provocatrices
- “Et dans 3 ans, si vous devez re-coupler ?”
- “Quel système est source de vérité ?”
- “Combien coûte vraiment la duplication ?”
- “Est-ce vraiment du separate ways ou juste du chaos ?”