Last Friday, I was in London to attend DDD Exchange (DDDx), a 1 day conference on Domain-Driven Design organized by Skills Matter. As usual, the speakers lineup was quite impressive, starting of course with Eric Evans, author of the Blue Book which started everything, the man without whom this conference would not exist. Cyrille Martaire who is a regular and also spoke there last year was present, as well as Scott Wlaschin, F#er and trainer at Skills Matter, or Udi Dahan SOA specialist and creator of NServiceBus.
A full day
As we could expect, we did not avoid the trendy subject of the moment : microservices. Eric Evans started the day with his keynote on how microservices could be seen as a good way to provide boundaries and enforce the notion of Bounded Context. Eric showed particularly how drawing a Context Map could help you understanding the actual dependencies between your services. The notion of Bounded Context is central and largely covered in the book and, according to Eric himself, is probably one of the most important take away.
There is one saying in the DDD community :
Read the Blue Book starting from chapter 7 til the end, then read the beginning.
Once you are done, read the whole book again to actually understand it.
For the record, the notion of Bounded Context appears throughout the book but is only explained in chapter 14. So be patient.
Alberto Brandolini, also one of the key members and early adopters of the DDD community, did not speak this year but instead managed the tour de force of running an open space track in parallel of the more traditional talks track. I am myself a big fan of open spaces, I couldn’t say less as co-organizer of #play14 which uses this exact format, reason why I attended several of these discussions in smaller groups. I found it quite different and very interesting. People with less experience were given the chance to talk directly to some of the experts and people who add something to say about their specific project or experience with DDD were free to share it with the group.
One of the most interesting sessions of the day, as far as I am concerned, was the talk of Scott Wlaschin called Domain Driven Design with the F# type system. What better way to design coherent domain models than to have your language check most of your business rules at compile time ? Well, that’s the strength of the F# type system. The F# syntax makes your domain model code shorter, more expressive and human readable, so much that you might not need to document it anymore. Most of the people who started modelling domains with C# in .NET find it much more efficient to do it in F# now. And the beauty of it is that you can still use you domain from C# code afterwards if you like, since it is compiled as IL code in a standard .NET assembly.
Udi Dahan closed the day with a talk explaining that even though reuse is a good practice of OOP at the class or method level (DRY), it is according to him a very bad idea when it comes to components or services. His take on the subject is that our industry has tried to reach this holy grail through several implementations and technologies over the years, among which we can quote Corba, DCOM, WS*, SOA, but that none of them really achieved their objective of transparent software reuse. Microservices are just the last trend of this everlasting quest, he says, and will probably fail like the rest, unless we stop repeating the same mistakes all over again and learn when to use and especially when not to use such an approach.
After that, pizzas and beers were served, while some attended the Park Bench and others had open discussions on the sidewalk in front of Skills Matter. In the end, everyone started to head home, after a full day. A few of us finished that day on that same sidewalk listening to a discussion between Udi Dahan, Eric Evans and Greg Young, who was there even though he did not speak this year, about the next steps for Greg’s event store and the future of .NET.
My 2 cents
My main take away for this year’s DDDx is that microservices are the new breed of a long series of implementations and technologies aiming at achieving better software design. Call it whatever you like, web services, microservices, remotly callable components, that does not really make any difference. They don’t have any substance on their own. The only thing that matters is the business problem that we want to solve with them. The how we solve it is just anecdotal. The important thing is that we need to solve the right business problem and for that, we need to involve our customers. For me, communication is the major theme of DDD. The rest is mostly plumbing. Microservices are part of our toolbox and we, as an industry, have to learn to use the right tool for a given task. Would you try to do all your home improvement work using only a drill ? Or a sledge hammer ? If yes, then I don’t want to see your home interior.
The next big thing for me is the fact that F# is becoming bigger and bigger. More and more developers who were so keen on using C# before find a great language in F#. Functional programming in general has already been getting a lot of attention in the last few years, especially with languages such as Haskell, Erlang, Closure or Scala. Lately, R is also starting to get some traction. But F# is the de facto functional language for the .NET community and its expressiveness makes me want to dig deeper each time I look at a piece of F# code.
What’s next ?
DDDx will be coming back next year in June, but in the mean time, if you can’t wait to talk Bounded Context, Aggregate Roots, or Generic Sub-Domain, make sure to get your ticket for DDD Europe, a brand new event that will take place in Bussels in January 2016, organized by Mathias Verraes and the Belgian DDD community. I already have mine and I might even propose a talk.
But what about Luxembourg ?
Is there anyone else interested in DDD/CQRS/Event Sourcing in the Grand Duchy ?
Would you participate to a local DDD community and organize meetups and drinks on that subject ?