Presentation: PracticalDDD: Bounded Contexts + Events => Microservices
This presentation is now available to view on InfoQ.com
Watch video with transcriptWhat You’ll Learn
- Listen about DDD, what it is good for and what problems it solves.
- Hear about three elements to create a good architecture for scalable and autonomous systems: collaboration, messaging and event-driven design.
Abstract
Domain Driven Design and Messaging go hand in hand, like a warm chocolate brownie paired with vanilla ice-cream! DDD is a software discipline that allows you to move faster and write high-quality code. The whole point is to align the software you write to be flexible with the business changes. When you start to use the technology of messaging to communicate between clean and well-defined bounded contexts you get to remove temporal coupling. And voila, you now have microservices that are built for autonomy from the ground up. Sounds perfect? In this talk, discover this intersection of DDD as a software discipline with messaging as a technology counterpart. Build reliable systems that can scale with the business changes.
What is the focus of your work today?
I'm currently working as a software architect at Particular Software, the makers of NServiceBus. As an architect, I guide clients to help review their design or proof of concept to see how they can build loosely coupled systems using both event-driven architecture and domain-driven design (DDD).
What is the motivation for this talk?
When I first learned about event-driven architecture, it completely changed how I think of designing systems. It was as if there was a whole new world out there. With DDD, I started to see the discipline of modeling and design to use the correct language and also to model the behavior more than the structure of things. When you start combining the discipline of DDD, and then use messaging or events as a way of communication, the systems that you design tend to be reliable and autonomous. I want to share this knowledge. Speaking at conferences is my way of contributing back to tech. I think hearing my experiences could help other people when they’re designing their systems.
How would you describe the persona and level of the target audience?
Architects, team leads and senior developers. I’d say anyone that's passionate about trying to design reliable software. This is not a technology-centric talk but more focused on architecture. Use of c# in some slides is just to drive a point on the design disciplines.
What do you want this persona to walk away with from your talk?
Three things:
- As George Box expertly said, “All models are wrong, but some are useful”. When you're trying to solve a problem, your first go of the design or the model is going to be wrong and there's nothing wrong with that. It's how we evolve after that.
- The importance of collaboration with your domain experts. It's the constant learning from the domain experts and refactoring your current model to evolve that’s going to produce a design that’s flexible with the business needs.
- Strive to use events and messages as a way of communicating between your services. This style of architecture leads to autonomy, asynchrony and reliability. What you want is autonomous microservices.
From your experience with domain-driven design, what has been the biggest challenge to adoption, getting people to come on board?
The biggest challenge is getting the right people (domain experts, software experts, key stakeholders) in the same room to collaborate. There are techniques for collaboration with the domain experts, for example, event storming. Without proper collaboration, it becomes hard to try and understand the behavior of the business and the various constraints. If the constraints are not modeled well, then it has an effect on the software. Modeling software using post-it notes is cheap, building software and writing code is expensive. In order to truly understand the interesting behaviour bits you're going to have to talk to the business people.
But it doesn't have to be hard. There are conferences like exploreddd.com and dddeurope.com that are focused exclusively on DDD principles and teach you how to incorporate all of this, both the tactical side and the strategic side of DDD in your software systems to get value immediately. There are several user groups as well run by people that are passionate about DDD. If you’re passionate about DDD and don’t have a local meetup, you can start one. Ping me I’ll be more than happy to help you get started.
Similar Talks
Scaling DB Access for Billions of Queries Per Day @PayPal
Software Engineer @PayPal
Petrica Voicu
Psychologically Safe Process Evolution in a Flat Structure
Director of Software Development @Hunter_Ind
Christopher Lucian
Not Sold Yet, GraphQL: A Humble Tale From Skeptic to Enthusiast
Software Engineer @Netflix
Garrett Heinlen
Let's talk locks!
Software Engineer @Samsara
Kavya Joshi
PID Loops and the Art of Keeping Systems Stable
Senior Principal Engineer @awscloud
Colm MacCárthaigh
Are We Really Cloud-Native?
Director of Technology @Luminis_eu
Bert Ertman
The Trouble With Learning in Complex Systems
Senior Cloud Advocate @Microsoft
Jason Hand
How Did Things Go Right? Learning More From Incidents
Site Reliability Engineering @Netflix
Ryan Kitchens
Graceful Degradation as a Feature
Director of Product @GremlinInc