Submitted by Sean Farmar
Software design is hard, maybe the hardest part of building software systems... When designing distributed systems things get even more challenging. Now that Microservices are so popular, we all want to decompose our monoliths to smaller units of independent components. If we don't want to end up with a distributed monolith, we need to have a toolbox of design concepts so we can achieve well-defined boundaries between our components groups described as "Services" and "Service Boundaries" in the Service Oriented Architecture or SOA paradigm. The traditional way of designing systems based on a domain data model with very complex relationships and dependencies may kind of work when building a monolith, but just breaks apart when you building distributed systems. One of the pillars of distributed system design is to solve the coupling problem. If we look at the tenants of SOA they all address coupling:
Sean Farmar holds the world record for answering the most NServiceBus questions - even more than Udi :-). With over 20 years of experience, he specializes in providing simple solutions for complex business requirements using NServiceBus and applying SOA principles inspired by Udi Dahan. As a solution architect with Particular Software, the creators of NServiceBus, Sean provides support, training and consulting for customers using NServiceBus and the Particular Platform.