Skip to main content

CDD vs Alternatives

How does Communication-Driven Development (CDD) compare to other popular approaches?

This section highlights how CDD differs from:

  • Layered Architecture
  • Object-Oriented Design (OOD)
  • Event-Driven Architecture (EDA)
  • Domain-Driven Design (DDD)
  • Behavior-Driven Development (BDD)

1. CDD vs Layered Architecture

AspectLayered ArchitectureCDD
StructureStrict, hierarchical layersCommunication-driven contexts with loose coupling
DependenciesDownward-only dependenciesDecoupled via message contracts
FlexibilityChanges ripple through layersModules evolve independently if messages stay consistent

Layered Architecture enforces strict dependency direction, which can cause tight coupling and ripple effects.
CDD flips the focus to communication contracts, enabling independent evolution and easier scaling.


2. CDD vs Object-Oriented Design (OOD)

AspectOODCDD
FocusData structures & interfacesCommunication semantics (messages)
CompositionClass inheritance, polymorphismEvent emission, subscription
Change strategyEncapsulate behavior inside objectsDecouple behavior through observable streams
ProblemTends to hide intentSurfaces intent via clear message contracts

OOD encourages encapsulation but can obscure the intent behind changes.
CDD makes intent explicit via messages, aiding debugging, tooling, and collaboration.


3. CDD vs Event-Driven Architecture (EDA)

AspectEDACDD
ScaleSystem-wide eventsContext-level communication
MessagingInfrastructure-focused (e.g., Kafka)Semantic and domain-level messages
ToolingHeavyweight (brokers, queues)Lightweight (RxJS, observers, CRDTs)

Both focus on events, but CDD emphasizes meaningful, scoped conversations rather than global messaging infrastructure.


4. CDD vs Domain-Driven Design (DDD)

AspectDDDCDD
FocusModeling domain logicModeling system communication
Unit of designAggregates, entities, value objectsContexts and message flows
CoordinationDomain servicesReactive messaging

CDD and DDD complement each other:
DDD models what the domain means,
CDD models how parts of the system communicate.


5. CDD vs Behavior-Driven Development (BDD)

AspectBDDCDD
FocusBehavior specification & testingCommunication design and system structure
OutputHuman-readable tests and scenariosMessage contracts and module interactions
GoalShared understanding of requirementsRobust, extensible software architecture

BDD defines expected behaviors to improve collaboration and ensure requirements clarity.
CDD designs the communication paths that implement those behaviors at runtime.


Summary

CDD is not a replacement for other approaches, but a shift in emphasis:

  • It improves on Layered Architecture by breaking strict dependency directions.
  • It reveals intent more clearly than OOD.
  • It scopes communication more meaningfully than EDA.
  • It complements DDD’s domain focus with communication design.
  • It supports BDD’s behavioral clarity with a robust communication architecture.

CDD focuses on communication as the core contract between parts of a system — and between humans and software.