Greg Young’s Advanced Class
Last week, from Wednesday to Friday I attended Greg Young’s new advanced class. The event took place in Pod Wawelem hotel, 50 meters away from the Castle. I haven’t been to Greg’s previous training but I heard it was about Domain-Driven Design and CQRS. I was expecting something similar, but more in-depth. It turned out I was wrong but for sure not disappointed. The new content is great! Here’s a brief summary.
Day 1 – Alarm clock
We spend almost whole day discussing one topic — time. We learnt how hard it is to unit test time-dependent logic. Those who tried putting
ManualResetEvent in a test know how painful it is. Then we discovered that every time-dependant piece of logic (e.g. if cook does not respond in 5 minutes then…) can be transformed into order-of-messages problem. Instead of waiting for some period of time, we send a message to our future selves that will inform us we should take some action. I don’t have to convince you that sending and receiving messages is super easy to test, right?
To prove it, we spent some time doing one of well-known katas. I won’t tell which one to not spoil a surprise.
The last assignment of the day was a modelling task. We were modelling a business process of a restaurant. The funny/new/inspiring part of this assignment was that we were doing it by trying to figure out how would a Word template for document describing an order look like and how it would be passed between various people in a restaurant. We analysed what parts of the document are filled by each person and in what order.
Day 2 – Restaurant
We spent whole day implementing the solution for the restaurant according to the model we created a day before. We went through quite a few patterns from Enterprise Integration Patterns:
- document message – that’s how we represented our order
- adapter – waiter
- enricher – cook and assistant manager, adding, respecively, preparation time and prices
- competing consumer – when we have more then one cook
- message dispatcher – a better (does not require locks) solution for load balancing cooks
- message broker – centralize setup of queues
Day 3- More restaurant & Event Store
Before lunch we managed to cover some more advanced messaging patterns, namely:
- correlation id – how we trace orders
- routing slip – move responsibility for order flow from broker to a dedicated entity to add flexibility (e.g. normal flow & dodgy customer flow)
- process manager – when routing slip is not enough (e.g. smart failure handling)
- publish-subscribe – how to distribute information about changes in order state
- event message – as above
- wire tap – centralize diagnostics
The cost of the training for early birds was just 300 euros. In exchange we got
- three days of super high quality workshops with over 60 percent of coding time
- gorgeus view of Wawel Castle during coffee breaks
- three course lunches every day
- after-party & beer
If this was not enough, Greg managed to give away three free tickets for CS students. Kudos man, you rock!