Domain Driven Design Context Mapping Created: 10 Jan 2026 Updated: 10 Jan 2026

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.

  1. Coordinated Planning: Release cycles, sprint goals, and architectural changes are planned together.
  2. High Communication: There is a high frequency of meetings and shared documentation.
  3. 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).

  1. The Problem: The Theater Management team needs to perform maintenance on Projector 4.
  2. 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.

// In the Booking.Tests project
[Fact]
public async Task Booking_Should_Sync_With_Theater_Hardware_Status()
{
// This test ensures that if Theater Management marks a room as 'Offline',
// the Booking API immediately returns 'Unavailable'.
var roomStatus = await _theaterService.GetRoomStatus(RoomId);
var bookingResult = await _bookingService.AttemptReservation(RoomId);
if(roomStatus.IsOffline)
Assert.False(bookingResult.IsSuccess);
}

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).

Share this lesson: