Partnership
In Domain-Driven Design (DDD), a Partnership represents the highest level of cooperation and synchronization between two teams. It is a strategic relationship where the failure of one Bounded Context means the failure of the other.
Unlike the Customer-Supplier relationship, where the Upstream has some obligation to the Downstream, in a Partnership, both teams are equals. They succeed or fail together.
1. What is a Partnership?
A Partnership is characterized by a "hand-in-hand" working style. If one team discovers a bug or a missing feature in the other's context, they don't just file a ticket; they coordinate immediately to solve it.
- Coordinated Planning: Release cycles, sprint goals, and architectural changes are planned together.
- High Communication: There is a high frequency of meetings and shared documentation.
- Mutual Commitment: Neither team can make a significant change to their internal model without first consulting the other team to ensure no breaking changes occur.
2. Cinema Example: Booking & Theater Management
Imagine the Booking Context and the Theater Management Context (which manages physical salon hardware, lighting, and projectors).
- The Problem: The Theater Management team needs to perform maintenance on Projector 4.
- The Partnership Action: They don't just "shut it down." Because they are partners with the Booking team, they check the live reservation schedule together. They decide on a time window for maintenance that minimizes revenue loss, and the Booking team simultaneously updates the seat map to block that specific salon. They deploy these changes in a synchronized release.
3. Technical Implementation Strategy
In a Partnership, technical boundaries are often maintained through Continuous Integration (CI) and Shared Integration Tests.
A. Synchronized CI/CD Pipelines
Since the contexts are so tightly coupled, the build of one often triggers the test suite of the other.
B. Joint Architectural Reviews
Partnership teams often have a "Shared Design Council" where they discuss changes to the Published Language or Shared Kernel (if they are also using one).