Review of Advanced Distributed Systems Design using SOA & DDD on Video

As my team was getting ready to embark on a significant new project built around asynchronous messaging and NServiceBus, I would have really liked to send the entire team to Udi Dahan‘s  five-day Advanced Distributed Systems Design using SOA & DDD course. Distributed, service-oriented systems have many advantages over traditional centralized solutions. However, the change in thinking that the development team must go through is daunting. However, sending the entire team offer a week would’ve been a challenge. As an alternative, I purchased the course videos and we work through them together over the course of three weeks. This is my review of that course (on video).

Why should you even care?

Before getting into the review, why would you want to build a distributed, service-oriented system? In a word, scale.

Scaling the software: Asynchronous messaging and eventual consistency allows the system to scale out to redundant, cheap hardware. Brewer’s CAP theorem shows, centralized systems that rely on two-phase commits for all updates sacrifice reliability/availability in favor of an immediate consistency that isn’t always necessary.

Scaling the development team: A well-factored service-oriented system avoids the problem of a single monolithic system that becomes increasingly difficult to enhance and maintain and requires scale up of a single development team and resists scale out to multiple teams.


Advanced_Distributed_Systems_Design_-_Day_1_Session_1The production quality leaves a lot to be desired. There is an annoying amount of background noise through all of the videos. The video is shot with a single camera that pans inconsistently between Udi, the whiteboard, and the projector screen. Honestly, you have to really want the content to make it through all 40 hours. However, you will be well rewarded.

The best way to describe the course is to think of it as a five day walk through all of the factors that led Udi to develop NServiceBus. I’ve followed Udi since way before NServiceBus. I listened to the Ask Udi podcast and attempted to grasp the essence of SOA. No matter how hard I tried, I was never able to implement the tenants of SOA with the traditional Microsoft tools and WCF. It wasn’t until I built a system with NServiceBus that I started to make the mental transition. Every time something I was trying to do was difficult and I was feeling that NServiceBus was overly constraining, I eventually realized it’s not you, it’s me. When you are doing it right, NServiceBus feels natural. When you violate good design for distributed, service-oriented systems, NServiceBus nudges you back by becoming difficult, causing you to go looking for a work-around, and eventually finding a post by Udi that gently explains why what you are trying to do would eventually bite you in the rear end and what you should be doing instead. This course lays the groundwork that will help you avoid the wrong turns and false starts you are bound to make otherwise if you are moving from the familiar world of centralized, monolithic systems.

He spends a significant portion of the course methodically and deliberately dislodging ideas that most of us have held for so long that we no longer question. He also works to temper and ground some of the techniques that have caught on with a small but vocal minority developers, such as CQRS and event sourcing.

I recommend this course if any of these apply to you:

  • I don’t know how to model autonomous services. Everything is related to everything else. My domain is too hard to tease apart into independent components. (Hint: this is hard at first, but Udi will take you through enough examples to get you headed in the right direction. Oh… and your domain is not too hard to do this.)
  • I love Domain-Driven Design, but I don’t know how to model the domain and application layers. I recognize that I have fallen into the anemic domain model and all of my logic is in procedural application layer functions. (Hint: There is a place for simple CRUD and the rest cannot be modeled without sagas.)
  • I like the idea of CQRS, but I don’t know how to approach it, or I tried and it didn’t work out as well as I expected. (Hint: Event sourcing is not the silver bullet of CQRS.)
  • I am using NServiceBus, but I don’t understand sagas; so, I’m not using them. (Hint: you’re doing it wrong.)

All of these were true for me at some level. Getting these issues addressed made the course extremely valuable to me.


The entire team feels the course was a great investment and is entering this new project with anticipation and confidence that we will avoid many mistakes that we would have otherwise made if we had not taken the virtual course. I believe we will save the money we spent on the course and the time away from coding many times over on this project and beyond. If you are building a moderately complex collaborative system, you owe it to yourself to check out this course. If you can attend a live offering, I recommend that. But if you cannot, then the videos are well worth the investment as the next best thing.

11 thoughts on “Review of Advanced Distributed Systems Design using SOA & DDD on Video

  1. Pingback: Who Needs Vision? | The Farr Side

  2. Thanks for the post. I was wondering if you also attended his 5 days course and could comment on which was of greater benefit to you, the videos or the live course?

  3. Tino, I have not attended the live course, but I am sure the live course would be of more benefit. The only advantage of the videos was the reduced cost and the ability to get my whole team exposed to the course.

  4. Hi Eric, excellent write up on the course.
    I was hoping my company would follow your lead but unfortunately they cannot see the big picture :(. Looks like I will have to make the investment. I was wondering if your team has completed the whole 40 hrs and with the background noise on the recording they could follow all of it?

  5. Five of us made it through all 40 hours. The background noise and general production quality makes that challenging, but it helps if you do it as a team. Good luck!

  6. Toni, may i know where did you purchased the video? you purchased it and the whole team was able to watch, do they have restrictions on the # of users who can view the video?

    are there any exercises included in the video package you bought?

  7. fbm, I would contact the NServiceBus directly. They seem to have removed the link to the videos. There was no restriction on how many people could watch.

  8. The class looks great. Would it be good for Java developers, or is it a bad fit for a Java team?

    (And what portion would likely be confusing, distracting or irrelevant?)

  9. Bob, most of the course would apply equally well for Java programmers because Udi focuses mostly on the concepts. As long as you have the technology available in Java to implement a message bus, sagas, event stores and such, I don’t think you’d find it too distracting or irrelevant. That said, the course is geared around NSerivceBus. Or perhaps better said… the course and NSB are both built around UDI’s approach to SOA.

Leave a Reply

Your email address will not be published. Required fields are marked *