skip to content

In DDD's Customer-Supplier context relationship, the downstream team is called the 'customer.' What power does that give them over the upstream 'supplier' team, and how does this differ from a Conformist relationship?

level: middleimportance: must knowfreq 60%

answer

  1. downstream has a real voice
  2. priority slot in upstream's backlog
  3. consumer-driven contract tests as enforcement
  4. Conformist = no leverage, adopt as-is
  5. relationship is per context pair, not global

basics

~20 s

In Customer-Supplier, the downstream team has a real say - they can ask the upstream team to build things for them and get prioritized. In Conformist, downstream has no leverage and just accepts whatever upstream provides.

solid answer

~40 s

Customer-Supplier is a negotiated upstream-downstream relationship: the downstream 'customer' team has real organizational standing to request features, get their needs factored into the upstream team's roadmap and prioritized in their backlog, and often have their requirements captured as automated contract tests the upstream team promises not to break. Conformist is the degenerate case of the same upstream-downstream shape: downstream has essentially zero influence, usually because upstream is external, indifferent, or too powerful to negotiate with, such as a large cloud vendor's API - so downstream simply adopts the upstream model as-is rather than translating it, accepting the tight coupling because building translation machinery against an unresponsive upstream buys nothing.

go deeper

for a junior

Can describe in plain words that Customer-Supplier means downstream gets a say in what upstream builds, and Conformist means downstream doesn't.

for a middle

Names the governance mechanisms - planning cadence, contract tests - and can give a realistic example scenario for each pattern.

for a senior

Diagnoses relationship drift, where a nominal Customer-Supplier arrangement has degraded into de facto Conformist, and recommends the appropriate corrective action.

for a principal

Discusses this as an organizational-design lever - how team topology, funding structures, and political leverage determine which relationship is actually achievable, not merely which one looks best on a diagram.

## Same topology, different power dynamic Both Customer-Supplier and Conformist describe the same underlying topology: one context is upstream, feeding a model or data to a downstream context that depends on it. What distinguishes the two patterns is entirely about the power dynamic and communication channel between the two teams, not the technical shape of the integration. | Pattern | The downstream team's standing | |---|---| | **Customer-Supplier** | the downstream team has genuine standing as a paying customer of the upstream team's output, even if no money changes hands - they get a seat in planning, their feature requests are prioritized alongside the upstream team's own roadmap items, and there's typically a concrete governance mechanism that makes the arrangement durable rather than just a friendly verbal promise | | **Conformist** | that standing simply doesn't exist: the downstream team has no meaningful way to influence what upstream builds or when, so rather than fighting an uphill battle to negotiate a custom contract or building expensive translation machinery that upstream might invalidate at any time, the downstream team accepts upstream's model wholesale and adapts its own code to match it directly | ## What makes the agreement enforceable The mechanism that operationalizes Customer-Supplier in practice is usually a combination of: 1. **a regular planning cadence** - joint sprint planning, a shared backlog, or scheduled roadmap-alignment meetings; 2. **automated consumer-driven contract tests**, a technique where the downstream team writes tests expressing exactly what they need from the upstream API, and the upstream team runs those tests as part of their own continuous-integration pipeline before shipping any change. This turns an informal promise ('we won't break you') into a mechanically enforced one: if an upstream change would violate a downstream expectation, the upstream team's own build fails before the change ever ships, rather than the break being discovered by the downstream team in production. Conformist has no equivalent machinery, because there's no negotiated contract to enforce in the first place - downstream simply builds against whatever upstream currently does, and absorbs the impact of any change upstream makes on its own schedule. ## Why they are two patterns, not one The reason DDD names these as two separate patterns rather than treating Customer-Supplier as simply 'good Conformist' is that the choice between them is often not really a choice at all - it's a reflection of organizational reality. - **Where Conformist is the honest label.** A downstream team integrating with a large public cloud vendor's billing API has essentially no path to Customer-Supplier standing: the vendor won't reprioritize their roadmap for one customer among millions, so Conformist is the honest, appropriate label, and fighting that reality by pretending you have negotiating power wastes energy. - **Where Customer-Supplier standing is real.** Conversely, two internal teams within the same organization, especially where the downstream team's success is important to the company, usually can and should establish real Customer-Supplier standing, because the organizational structure supports it and the alternative - either forcing Conformist onto an internal team that could otherwise get real influence, or building an unnecessary Anti-Corruption Layer against a cooperative partner - wastes coordination effort that a negotiated relationship would have avoided. ## Relationship drift A common failure mode is relationship drift: a pairing that's nominally labeled Customer-Supplier on an architecture diagram, with joint planning meetings still notionally scheduled, but where the upstream team consistently deprioritizes the downstream team's requests sprint after sprint regardless of what was agreed. At that point the relationship has silently degraded into Conformist in practice, even though everyone still calls it Customer-Supplier - the label without enforced influence is meaningless, and continuing to plan as if real negotiating power exists leads to repeated missed expectations and downstream teams building fragile workarounds around promises that never actually materialize. The corrective action is either escalating for a genuine prioritization commitment, or explicitly re-labeling the relationship as Conformist and building the appropriate defenses, such as an Anti-Corruption Layer, since the downstream team can no longer safely assume upstream will accommodate its needs. ## Defined per context pair It's also worth noting the relationship type is defined per context pair, not as a global property of a team. A platform team providing a core pricing service might sit in weekly Customer-Supplier planning with one important internal consumer while a lower-priority internal team, or an external partner with no negotiating leverage, simply has to conform to whatever the platform team ships, with no seat at the table at all. The same upstream context can be in genuinely different relationships with different downstream contexts simultaneously, and correctly identifying which relationship actually exists - rather than which one is aspirational - is what lets a downstream team make sound architectural decisions about how much to invest in defensive translation versus how much to rely on negotiated stability.

  • What concrete artifact typically encodes the Customer-Supplier agreement so it doesn't quietly erode over time?
    Automated consumer-driven contract tests - tests the downstream team writes expressing exactly what they need, run by the upstream team in their own CI pipeline, so a change violating the downstream team's needs fails the upstream build before it ships. This turns an informal promise into a mechanically enforced one, catching regressions before they ever reach production instead of relying purely on goodwill and communication.
  • If a downstream team nominally has Customer-Supplier standing but the upstream team keeps deprioritizing their requests sprint after sprint, what's actually going on?
    The relationship has silently degraded into Conformist in practice, regardless of what label is on the architecture diagram - a nominal agreement without enforced influence provides no real protection. The downstream team should either escalate for genuine prioritization commitments from leadership, or accept the reality and build defenses like an Anti-Corruption Layer, since they can no longer safely plan around upstream accommodating their needs.
  • Can one upstream context be Customer-Supplier with one downstream context and Conformist with another at the same time?
    Yes - the relationship type is a property of a specific context pair, not a global stance the upstream team takes toward everyone. A core platform team might negotiate real roadmap priority with an important internal customer while a lower-priority internal team, or an external partner with no leverage, simply has to accept whatever gets shipped with no seat in planning at all.

Customer-Supplier is like being a paying client who can request custom features from a vendor and expects delivery on an agreed schedule; Conformist is like using a free public API with no support contract, where you simply adapt to whatever the provider ships on their own timetable.

saying these in an interview costs you the question

  • Thinks Customer-Supplier means the downstream team literally pays money
  • Believes Conformist always implies bad design rather than a pragmatic response to a real power imbalance
  • Cannot name a concrete mechanism, such as contract tests or a planning cadence, that operationalizes the negotiation
  • Assumes the relationship type is a fixed property of an entire team rather than being defined per context pair

context