ADSD – Resources & Further Reading

A curated collection of resources aligned with the concepts and paradigms taught in Udi Dahan’s Advanced Distributed Systems Design course. Organized by topic area for easy reference and deeper exploration. Each section includes external resources and related articles from milestone.topics.it.


The Course Itself


1. Fallacies of Distributed Computing

The ADSD course opens with the fallacies of distributed and enterprise computing — the false assumptions developers make about networks, latency, bandwidth, and system maintainability.

Fallacies of Distributed Computing series – Particular Software:


2. Coupling: Platform, Temporal & Spatial

Understanding the multiple dimensions of coupling is fundamental to ADSD. Udi identifies five dimensions and shows how reducing one may require accepting more of another.

From milestone.topics.it


3. Messaging: Bus vs. Broker

The distinction between Bus and Broker architectural styles, and why “smart endpoints, dumb pipes” matters for autonomous services.

From milestone.topics.it


4. Service-Oriented Architecture (SOA)

The core of ADSD: services as “the technical authority for a specific business capability.” Services own all their data, business rules, and UI from top to bottom.

From milestone.topics.it


5. Finding Service Boundaries

One of the hardest and most valuable skills taught in ADSD: identifying the correct service boundaries by looking at data volatility, business capabilities, and what changes together.

From milestone.topics.it


6. UI Composition

In ADSD, each service owns its slice of the UI. Screens are composed from multiple services, each contributing their own data and widgets.

From milestone.topics.it — ViewModel Composition Series (in reading order)

From milestone.topics.it — ServiceComposer (the framework)


7. CQRS (Command Query Responsibility Segregation)

ADSD connects CQRS to collaborative domains, task-based UIs, and the saga pattern. CQRS isn’t about separate databases — it’s about recognizing that reads and writes have fundamentally different needs.

  • Race Conditions Don’t Exist – Udi Dahan — The foundational blog post arguing that apparent race conditions are symptoms of insufficient domain understanding. If you think you have a race condition, go back to the business.
  • Clarified CQRS – Udi Dahan — Udi’s clarification of CQRS, separating it from event sourcing and explaining when and why it’s appropriate.
  • CQRS Documents – Greg Young — Greg Young’s seminal document on CQRS, covering commands, events, and the relationship between CQRS and event sourcing.

From milestone.topics.it


8. Long-Running Processes & Sagas

Sagas in ADSD are not just a database pattern — they are the domain model. Business processes that span time are modeled as sagas (or “policies”) rather than traditional aggregates.

From milestone.topics.it


9. Domain Modeling in SOA Context

ADSD reframes domain modeling: model processes, not entities. Find the smallest possible consistency boundaries and let behaviors define how data is grouped.

From milestone.topics.it


10. Evolving from a Big Ball of Mud

ADSD devotes significant time to the practical transition from a monolithic “big ball of mud” to SOA, using a phased approach.

From milestone.topics.it — Distributed Systems Evolution Series


11. Cross-Cutting: Observability & Governance

These resources relate to operational concerns discussed across the ADSD course.

From milestone.topics.it


12. NServiceBus Tooling & Implementation

Practical resources on the NServiceBus stack that support ADSD concepts in code.

From milestone.topics.it


13. Foundational Papers & Books

These complement the ADSD curriculum and are frequently referenced by Udi and the distributed systems community.

Papers

Books

  • Enterprise Integration Patterns – Gregor Hohpe & Bobby Woolf — enterpriseintegrationpatterns.com — The definitive reference for messaging patterns. Many ADSD concepts map directly to patterns in this book.
  • Domain-Driven Design – Eric Evans — domainlanguage.com/ddd — Strategic DDD concepts (bounded contexts, context mapping) are foundational to ADSD’s approach to service boundaries.
  • Implementing Domain-Driven Design – Vaughn Vernon — Provides practical implementation guidance that bridges DDD and messaging/event-driven architectures.
  • Designing Data-Intensive Applications – Martin Kleppmann — Covers distributed systems fundamentals (replication, partitioning, consistency, transactions) with exceptional clarity. Excellent technical companion to ADSD’s more architectural focus.

14. Talks, Webinars & Videos

Udi Dahan

Mauro Servienti

Adam Ralph

  • Finding Your Service Boundaries: A Practical Guide — Practical advice on discovering hidden boundaries in your systems. Adam teases out the natural separation of concerns in a sample business domain, covering fat events, what a service is (and isn’t), and how to avoid the path to “the big rewrite.” (See also §5.)
  • Finding Your Service Boundaries: A Practical Guide (Webinar) — Particular Software webinar version of the same topic with live Q&A, hosted by Mauro Servienti. Includes audience questions on UI composition, team organization, and adopting ADSD concepts incrementally.

Dennis van der Stelt

  • Death of the Batch Job — How NServiceBus sagas replace fragile nightly batch jobs with event-driven, saga-based workflows using durable timeouts, compensation, and the saga pattern for preferred-customer-status scenarios. (See also §8.)
  • Autonomous Microservices Don’t Share Data. Period. (NDC Porto 2023) — A journey through the evolution of software architecture — from procedural to SOA to microservices — landing on why data ownership and clear service boundaries are non-negotiable. Covers composite UIs, event-driven communication, and vertical service pillars. (See also §4 and §5.)
  • Autonomous Microservices Don’t Share Data. Period. (Øredev 2023) — Conference version of the same talk at Øredev, with Dennis’s signature Lessig-style 400+ slide presentation.
  • DSDF Course Q&A (Particular Software) — Follow-up Q&A for the free Distributed Systems Design Fundamentals course, covering practical questions on messaging, sagas, priority queues, and adoption strategies.

Tomer Gabel

  • Microservices: A Retrospective (Øredev 2019) — Now that the microservices hype has settled, what have we actually learned? Tomer analyzes the lessons hammered into us through adoption, and takes a hard look at the challenges we still struggle with as an industry. A thoughtful complement to the ADSD perspective on service decomposition. (See also §4.)

Laila Bougria

Caitie McCaffrey

  • Applying the Saga Pattern — Fundamentals of the saga pattern for long-lived transactions and distributed coordination without 2PC. Includes how Halo 4 services used sagas for processing game statistics in production. A highly recommended complement to the 1987 Sagas paper (§13). (See also §8.)

General


15. Course Reviews & Community Notes

These provide different perspectives on the ADSD material and can help reinforce or clarify concepts.


  • Udi Dahan’s blog — The full blog archive from the ADSD course creator. Key posts include topics on service boundaries, entity ownership, the problems with layered architectures, and why services are not remotely callable components.
  • Daniel Marbach’s blog — Daniel Marbach (Particular Software) writes in-depth technical content focused on Azure Service Bus and NServiceBus internals. His standout series is the Azure Service Bus .NET SDK Deep Dive, covering topics like message deduplication, sessions, dead-letter queues, send-via transactions, sender-side batching, atomic sends, pub/sub with topics, forwarding, topologies, and runtime information. Earlier posts explored NServiceBus transport comparisons (MSMQ vs. RabbitMQ vs. ActiveMQ), dependency injection integration (Ninject), unit of work patterns, and high-throughput message processing optimizations. The blog is particularly valuable for understanding the low-level mechanics of Azure Service Bus and how NServiceBus leverages them.
  • Dennis van der Stelt’s blog — Dennis van der Stelt (Particular Software) blogs about distributed systems, messaging, and software architecture. Recent posts include an explanation of the Two Generals’ Problem using a Star Wars analogy, a piece on why shared databases are problematic with microservices, and thoughts on AI pair programming. Earlier content includes NServiceBus tutorials on publish/subscribe, an explanation of what a service bus is, message priority handling strategies, and his Death of the Batch Job saga presentation. The blog has been active since 2004 (originally a community blogging platform) and blends practical NServiceBus guidance with architectural thinking and the occasional fun cultural tangent.

17. Samples & Demos

  • distributed-systems-101 — A progressive, hands-on workshop that teaches distributed systems fundamentals using RabbitMQ. It walks through 12 incremental demos in a Dev Container environment: basic send, request/response, request with multiple responses, basic pub/sub, pub/sub with multiple subscribers, commands and events, recoverability, sagas, timeouts, composition, decomposition, and a shopping cart lifecycle. Also includes JavaScript versions of the demos. (See also §3 and §8.)
  • all-our-aggregates-are-wrong-demos — Companion demos for the “All Our Aggregates Are Wrong” talk. Implements a microservices-powered e-commerce shopping cart built on SOA principles, demonstrating how traditional aggregate design leads to coupling and how proper service boundary decomposition results in each service owning its slice of the data independently. (See also §5 and §14.)
  • welcome-to-the-state-machine-demos — Companion demos for the “Welcome to the (State) Machine” talk. Demonstrates how to model long-running business processes using sagas as state machines, including timeout handling, compensating actions, and coordination across service boundaries without introducing coupling. (See also §8 and §14.)
  • designing-a-ui-for-microservices-demos — Companion demos for the “Designing a UI for Microservices” talk. Shows how to build composite UIs where each service owns its piece of the user interface, using ViewModel Composition to assemble data from multiple autonomous services into a single view without creating a shared API or monolithic frontend. (See also §6 and §14.)

18. Dynamic Consistency Boundaries (DCB)

Dynamic Consistency Boundary (DCB) is a pattern introduced by Sara Pellegrini (during her time @ AxonIQ, later she joined Particular Software) in her “Kill Aggregate!” talk and blog series. The core idea is to move away from fixed aggregate-to-stream mappings in event-sourced systems. Instead, each command handler dynamically selects only the events it needs (via tagging/filtering) to enforce its invariants, making consistency boundaries flexible and per-operation rather than per-entity. While DCB originates in the event sourcing community, its thinking about consistency, boundaries, and aggregate design connects directly to ADSD themes around service decomposition and data ownership.

Talks

  • Kill Aggregate! — Sara Pellegrini (Avanscoperta, April 2023) — The original presentation introducing DCB, in Italian with English subtitles starting at 2:38. Sara and Milan Savic subsequently presented English variations at DDD FR, JAX Mainz, Spring I/O Barcelona, Voxxed Days Brussels, AxonIQ Conference 2023, and KanDDDinsky.

Blog posts & articles

Specification & community

  • dcb.events — The official DCB hub maintained by Bastian Waidelich and Sara Pellegrini. Includes the specification, examples (course subscriptions, unique username, sequential invoice numbering, idempotency), and a FAQ.

Implementations

  • bwaidelich/dcb-eventstore — PHP implementation of a DCB-compliant event store, with a course subscription example.
  • umadb-io/umadb — High-performance open-source event store built to the DCB specification (co-authored by Bastian Waidelich, Sara Pellegrini, and Paul Grimshaw).
  • Disintegrate — A Rust library inspired by Kill Aggregate! for building event-sourced applications with flexible consistency boundaries.

Last updated: February 2026