Carte Context Mapping #5 : Partnership

📇 Carte #5 : Partnership

Vue Rapide

🎯 Objectif : Deux équipes avec besoin mutuel s’engagent à se coordonner

👥 Relation d’équipe : Mutuellement Dépendant

📊 Couplage : Élevé (interfaces négociées)


Concept

Deux contextes aussi importants l’un que l’autre s’engagent à :

  • Collaborer sur les interfaces
  • Se consulter avant changements majeurs
  • Synchroniser leurs efforts
Team A (contexte équivalent)
    ↔ Partnership ↔
Team B (contexte équivalent)

La philosophie : “Nous avons besoin l’un de l’autre, donc on se coordonne”


Quand l’Utiliser ? ✅

  • ✅ Deux équipes avec poids politique équivalent
  • Interdépendances mutuelles et inévitables
  • ✅ Aucune des deux ne veut être dominée par l’autre
  • ✅ Les équipes se font confiance et veulent collaborer
  • ✅ Les interfaces changent ensemble

Exemples

  • Deux microservices qui s’appellent beaucoup
  • Équipes au même niveau hiérarchique
  • Frontend/Backend d’un même produit
  • Deux domaines interconnectés (Commande ↔ Facturation)

Quand l’Éviter ? ❌

  • ❌ Une équipe est clairement upstream
  • ❌ Une équipe peut fonctionner indépendamment
  • ❌ Les équipes ne se font pas confiance
  • ❌ C’est une dépendance temporaire (plutôt: Anticorruption)
  • ❌ Les équipes ne sont pas au même niveau (plutôt: Upstream/Downstream)

Questions Clés à se Poser 💭

  1. Est-ce vraiment un besoin mutuel ou une équipe dépend juste de l’autre ?
  2. Les équipes peuvent-elles se consulter facilement ?
  3. Qu’est-ce qui se passe si les besoins divergent ?
  4. Qui décide des changements aux interfaces ?
  5. Quels sont les coûts de cette coordination ?

Implications pour les Deux Équipes

Responsabilités Communes

  • Communiquer régulièrement : changements, blocages
  • Négocier les interfaces ensemble
  • Plannifier ensemble les changements majeurs
  • Tester les intégrations continuellement

Avantages

  • Flexibilité : vous pouvez évoluer ensemble
  • Évolutivité : pas de couche de traduction
  • Ownership partagé : responsabilité mutuelle
  • Collaboration : force la communication

Risques

  • ⚠️ Couplage fort : changements coordonnés nécessaires
  • ⚠️ Synchronisation : les deux équipes doivent être “prêtes”
  • ⚠️ Conflits : même poids = risque d’impasse
  • ⚠️ Lenteur : besoin de consensus

Implied Governance

Comité de Coordination

Chaque sprint (ou bi-weekly):
├── Rep Team A
├── Rep Team B
└── Agenda: futures changes, blockers, alignment

Process de Changement

1. Proposition d'une équipe
2. Feedback de l'autre équipe
3. Négociation et décision mutuelle
4. Communication à toutes les autres équipes affectées
5. Implémentation coordonnée

Escalade en Cas de Conflit

Désaccord sur interface?
    ↓
Essayer de négocier (1-2 jours)
    ↓
Si pas de consensus, escalader au management
    ↓
Mais garder la bonne volonté de partnership

Exemple Concret : Commande ↔ Facturation

Contexte

  • Order Context : gère les commandes, confirmations
  • Billing Context : gère la facturation, paiements
  • Interdépendance mutuelle et au même niveau

Interfaces Négociées

// Ordre → Facturation
interface OrderPlacedEvent {
  orderId: string
  customerId: string
  items: OrderItem[]
  totalAmount: Money
  placedAt: Timestamp
}

// Facturation → Ordre
interface BillingStatusUpdated {
  orderId: string
  status: "pending" | "paid" | "failed"
  receipt: Receipt
}

Processus Partnership

Jour 1: Équipe Facturation propose:
  "On voudrait aussi le shippingAddress"

Jour 2: Équipe Commande répond:
  "OK mais on peut pas faire OrderItem.weight ?"

Jour 3: Réunion, accord:
  "Oui aux deux, avec impact timing sur sprint N+1"

Jour 4: Les deux équipes mettent à jour leurs interfaces

Co-evolution

Sprint N
├── Order Service v1.3
└── Billing Service v2.1 (compatible avec Order v1.3)

Sprint N+1 (ensemble)
├── Order Service v2.0 (breaking change!)
└── Billing Service v3.0 (adapté à Order v2.0)

Coordination: Merge au même moment!

Signes de Partition Saine vs. Malsaine

Partnership Sain ✅

✓ Réunions régulières (bi-weekly)
✓ PRs revue par l'autre équipe avant merge
✓ Changements planifiés avec au minimum 2 sprints d'avance
✓ Communication proactive sur les blocages
✓ Respect mutuel des contraintes

Partnership Malsain ❌

❌ Changements unilatéraux sans discuter
❌ "On fait et on verra"
❌ Une équipe attend l'autre (bloquée)
❌ Conflits non résolus, escalade fréquente
❌ Dépendances cachées découvertes après

Gouvernance: De Partnership à Upstream/Downstream

Quand ça change:

Si une équipe devient dominante dans les décisions
    ↓
Partnership → Upstream/Downstream (avec ACL)

Si une équipe veut l'indépendance
    ↓
Partnership → Anticorruption Layer (séparation)

Si collaboration cesse
    ↓
Partnership → Separate Ways (duplication)

Outils de Coordination

Communication

  • Sprint planning partagé (30 min)
  • Bi-weekly sync sur l’architecture
  • Shared Kanban ou dashboard des dépendances

Code

  • Tests d’intégration automatisés
  • Contract testing (tu changes quoi, je teste)
  • Version management clair

Checklist de Mise en Place ✓

  • Les deux équipes sont vraiment au même niveau
  • Il existe un processus de communication régulier
  • Les interfaces sont documentées clairement
  • Vous avez une stratégie de changement
  • Un escalade process pour les conflits
  • Des tests d’intégration automatisés

Ressources et Lectures

  • Domain-Driven Design par Eric Evans - Partnership
  • Team Topologies par Matthew Skelton - Team Interaction Modes
  • DDD Crew - Context Mapping

Notes de Facilitation pour l’Atelier

Animation

  • Demandez : “Vous dépendez vraiment l’un de l’autre ?”
  • Testez : “À quel point communiquez-vous ?”
  • Documentez : “Comment vous gérez les changements ?”

Pièges Communs

  • ⚠️ Une équipe domine : pas vraiment du partnership
  • ⚠️ Pas de communication : découvrir les changements par surprise
  • ⚠️ Trop de réunions : coordination qui ralentit
  • ⚠️ Pas de consensus : conflits permanents

Questions Provocatrices

  • “Vous vous faites vraiment confiance ? Prouvez-le.”
  • “Combien de temps vous passez à vous synchroniser ?”
  • “Et si une équipe voulait partir ?”
  • “Qui arbitre quand vous n’êtes pas d’accord ?”