Carte Context Mapping #3 : Conformist

📇 Carte #3 : Conformist

Vue Rapide

🎯 Objectif : L’équipe downstream adopte le modèle upstream sans traduction

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

📊 Couplage : Haut (adhérence au modèle upstream)


Concept

L’équipe downstream accepte simplement le modèle et les conventions de l’équipe upstream.

Upstream (modèle de référence)
    ↓ (pas de traduction)
Downstream (adopte le même modèle)

La philosophie : “Ce que vous donnez, nous l’utilisons tel quel”


Quand l’Utiliser ? ✅

  • ✅ Le modèle upstream est suffisamment bon pour votre besoin
  • ✅ Créer une ACL serait trop complexe ou non rentable
  • ✅ L’upstream est stable et bien conçu
  • ✅ Vous avez une dépendance forte et c’est acceptable
  • ✅ L’équipe upstream a du poids politique ou est essentielle

Exemples

  • API publique stable : Adopter directement une API bien conçue
  • Plateforme core : Tous les services acceptent le modèle core
  • Standard industrie : Utiliser un standard reconnu (ISO, RFC, etc.)

Quand l’Éviter ? ❌

  • ❌ Le modèle upstream est incompatible avec votre domaine
  • ❌ L’upstream change fréquemment sans coordination
  • ❌ Vous avez besoin de dépendances croisées (Partner pattern est meilleur)
  • ❌ C’est une dépendance temporaire (better: Anticorruption Layer)
  • ❌ Le modèle upstream est mal conçu (Big Ball Of Mud)

Questions Clés à se Poser 💭

  1. Est-ce que le modèle upstream nous convient vraiment ?
  2. Allons-nous devoir le modifier plus tard ?
  3. Quels sont les risques de cette adhérence ?
  4. Comment restons-nous informés des changements ?
  5. Qui décide des évolutions du modèle shared ?

Implications pour l’Équipe Downstream

Responsabilités

  • Accepter le modèle tel qu’il est
  • ✓ Communiquer rapidement si le modèle pose problème
  • Collaborer avec upstream pour améliorations
  • Supporter les changements d’upstream

Avantages

  • Simple : pas de couche de traduction
  • Rapide à intégrer : implémentation directe
  • Couplage intentionnel : c’est du domaine partagé
  • Moins de bugs : une seule source de vérité

Risques

  • ⚠️ Pollina votre modèle : compromis sur votre pureté
  • ⚠️ Couplage fort : difficile à défaire
  • ⚠️ Bloqué par upstream : changements lents
  • ⚠️ Conflit de visions : deux domaines, une structure

Implications pour l’Équipe Upstream

Responsabilités

  • Maintenir une API stable : les downstream dépendent de vous
  • Communicer les changements : informer rapidement
  • Respecter la compatibilité : ou avoir un processus de migration
  • Écouter les besoins downstream

Avantages

  • Influence : votre modèle devient référence
  • Couplage maîtrisé : par design

Risques

  • ⚠️ Responsabilité : you break it, you own all the consequences
  • ⚠️ Évolution lente : devoir négocier avec tous les conformists

Exemples de Conformist Patterns

1. Shared Business Model

Upstream Team (Orders Domain)
    ├── Order { id, customerId, items, status }
    ├── OrderItem { productId, quantity, price }
    └── Status enum

Downstream Team (Invoicing)
    └── Adopte exactement le même modèle
        ├── Invoice utilise Order directement
        ├── InvoiceItem utilise OrderItem
        └── Respecte Status enum

2. API Publique Standard

Upstream: REST API (JSON well-known)
    {
      "id": "...",
      "name": "...",
      "type": "...",
      "metadata": { ... }
    }

Downstream Services:
    └── Tous utilisent exactement cette structure
        Pas de traduction

3. Industrie Standard (XML/JSON Schema)

Standard: UBL Invoice
    Upstream (supplier): génère UBL
    Downstream (customer): consomme UBL
    → Pas de traduction

Exemple Concret : Plateforme E-commerce

Contexte

Vous avez une équipe Product Core qui gère l’essai central.

Modèle Core (Upstream)

class Product {
  sku: string
  name: string
  category: Category
  price: Money
  inventory: Inventory
  status: ProductStatus
  tags: string[]
}

Équipes Downstream Conformistes

// Équipe Pricing
class PriceCalculator {
  calculatePrice(product: Product): Money {
    // Utilise directement product.price
    // Respecte la structure core
  }
}

// Équipe Recommendation
class RecommendationEngine {
  recommend(product: Product): Recommendation {
    // Utilise directement product.tags, category
    // Pas de traduction
  }
}

// Équipe Search
class SearchIndexer {
  index(product: Product): void {
    // Indexe directement les champs product
  }
}

Le Défi

Si Product Core décide de renommer statusproductStatus :

  • ✅ Facile : juste mettre à jour partout
  • ❌ Rigide : tous les services doivent suivre immédiatement

Processus de Conformité

Upstream Decision
    ↓
Communicate to all Conformists
    ↓
All teams implement change
    ↓
Verify all are synchronized

Quand Basculer vers Anticorruption Layer ?

Signes d’alerte 🚨

  • ❌ Le modèle upstream pose problème dans 2+ équipes downstream
  • ❌ Vous avez des " hacks locaux" pour adapter le modèle
  • ❌ L’upstream change sans coordination
  • ❌ Vous envisagez de “contourner” les conventions

Signal : “On devrait créer une ACL”


Intégration avec Context Mapping

Patterns Associés

  • Shared Kernel : Quand c’est du code partagé, pas juste un modèle
  • Anticorruption Layer : Si le conformism devient trop coûteux
  • Partnership : Quand les downstream ont du poids politique

Risques Combinés

Trop de Conformists
    ↓
Upstream devient responsable de l'impact
    ↓
Upstream bloqué par les dépendances
    ↓
Besoin d'une meilleure architecture

Checklist de Mise en Place ✓

  • Le modèle upstream est vraiment applicable à votre contexte
  • Vous êtes d’accord pour être “locked in” à ce modèle
  • Il y a un processus de communication pour les changements
  • Vous avez une stratégie de migration si ça ne fonctionne plus
  • L’équipe upstream accepte la responsabilité

Ressources et Lectures


Notes de Facilitation pour l’Atelier

Animation

  • Demandez : “Pouvez-vous vraiment vivre avec ce modèle ?”
  • Testez : “Et dans 2 ans, quand ça aura changé ?”
  • Documentez : “Pourquoi avez-vous choisi Conformist ?”

Pièges Communs

  • ⚠️ Pas de vraie raison : “Conformist par défaut”
  • ⚠️ Trop de Conformists : Upstream devient goulot
  • ⚠️ Pas de communication : Les changements surprennent
  • ⚠️ Mauvaise raison : “On n’a pas le choix” = power imbalance

Questions Provocatrices

  • “Et si vous deviez contourner ce modèle ? Qu’est-ce que ça veut dire ?”
  • “Est-ce que cette adhérence est une force ou une faiblesse ?”
  • “Qui a le poids politique pour décider des changements ?”
  • “Quand allez-vous basculer vers une ACL ?”