I just went to a training class, the first formal training class that I’ve gone to in years. Advanced Distributed Systems Design using SOA & DDD

To say my mind was blown is an understatement.  It’s the entire contents for a semester long class in system architecture condensed into a five day span.  It was the equivalent of trying to drink from the fire hose, far to much, far too fast to really take it all in.

That said, Udi is a remarkable presenter.  He is extremely polished, skilled and patient.  I would love it if he would put together a course on presenting for technical people, it would really raise the standards  in the technology industry.

Before I got to the class, I was kind of expecting it to be, “here is a problem. This is why it’s complex.  And now, this is how nServiceBus can solve it for you.”  The class was nothing like that.

There were only a few modules that were nServiceBus specific, the module talking about integration and configuration of nServiceBus in visual studio, and the module about long running processes. I got the impression that the only reason we were using sagas to talk about long running processes is that they are just a simple way of encapsulating a lot of very complex concepts.

On the whole, the course was very platform and tool agnostic, it was truly a course on architecture rather than tooling. Since I came to the class with a background in message based systems, I understood a   lot of the messaging concepts that might have been new to people.

The big thing that I took away from the class were the sections on coupling and domain models. Both of these were areas that I thought I understood, but thinking about them in terms of an asynchronous distributed system was eye opening.

The lesson that I learned about coupling was in the sense of temporal coupling. Basically, when you have a request that you need response data for, you should be asking yourself “why?” Even if it turns out that you need it, you should be asking “Do I need it right now, or just eventually?”

For me those two questions permanently changed the way I think of asynchronous communication.  I think that we tie things together too often because we don’t want to think about how to do it any other way.

The domain modeling sessions were just as eye opening. I thought I understood domain driven design pretty well. however, being forced to think about it in terms of a distributed system was really eye opening for me.

In the final analysis, It was an incredibly valuable course.  You couldn’t have convinced me that it was worth the money before hand, but afterwards I can say I would have happily paid for it myself if the company hadn’t paid for it.