Domain-Driven Services - Just the Right Size
Microservices were too small, SOA was too big. DDS is juuuuust right.
I never really bought into the MS hype. It has always looked like adding too much complexity related to benefits. Don't get me wrong, breaking large blocks of deployed code into small, independent services makes a lot of sense—in very select cases (like strangler fig) or in simple business models with massive scale (netfilx). But in general they were too small for complex domain level coupling seen in complex business concepts. As more complicated systems scaled, what should’ve been a dream architecture became a nightmare of tangled dependencies, slow performance, and operational headaches.
I’ve been involved with a lot of microservices programs with software architects, and let me tell you, there’s a lot they don’t warn you about in those sleek conference talks. What starts as a neat collection of independent services quickly becomes an unmanageable mesh of APIs, database inconsistencies, and teams struggling to sync changes without breaking everything. And then there’s the distributed monolith—where your microservices are technically separate but so interdependent they might as well be glued together.
That’s why I started rethinking the approach. Instead of structuring services around arbitrary technical functions (users, orders, payments), why not build them around business domains that actually make sense? That’s how I arrived at Domain-Driven Services (DDS)—an approach that takes the best parts of Domain-Driven Design (DDD) and applies them at the service level.
Building Better Integration Architecture
This work and work like it is being done in the Integration Architectures group led by @Brice Ominski and more. This group (which will soon have its own community and forum) is coallating and bringing together best of breed working integration architecture techniques. If you would like to learn this and more join our community in Mighty Network (Integration Architecture) and signup for the latest Integration Architecture CITA-A course: https://www.iasaglobal.org/integration-architecture/.
What’s Wrong with Microservices, Really?
Before I discuss Domain-Driven Services, let’s look at the problems with microservices:
1. Service-to-Service Chatter Gets Out of Control
Splitting everything into separate services sounds nice until you realize every action requires multiple network calls. Want to show an order summary? That’s a request to the order service, then a request to the user service, then inventory, then shipping… and so on. The latency adds up fast. But even worse is the interdependence. And when this is a transactional change happening over a period of time you end up with event hell.
2. Data Is a Mess
Each service owning its own database sounds great—until you need consistent data across services. Distributed transactions? Eventual consistency? Hope you like debugging weird race conditions at 2 AM.
3. Too Much Overhead
Managing 50+ services means maintaining 50+ deployments, 50+ monitoring setups, and 50+ failures to diagnose. Oh, and now your ops team hates you.
4. The Boundaries Are All Wrong
Microservices tend to get split based on technical concerns (e.g., “this handles users,” “this handles orders”), but that’s not how real-world businesses work. The result? Services that don’t actually reflect the domain and just make life harder.
What Are Domain-Driven Services (DDS)?
So, here’s my alternative: Domain-Driven Services. Instead of breaking things up by technical function, you structure services around real business domains—areas that naturally exist in the business.
Principles of DDS:
DDS in Action
Let’s take an example. Imagine an e-commerce system with traditional microservices:
At first glance, it looks fine. But in reality, every order involves multiple service calls: checking inventory, reserving stock, charging payments, and scheduling shipments. It’s brittle, slow, and hard to maintain.
How DDS Would Restructure It
Instead of organizing by function, we organize by business domains:
Each domain fully owns its data and business logic. Instead of constantly calling each other, they communicate through domain events (when necessary) and straightforward APIs in most cases:
No constant polling. No unnecessary API calls. Just autonomous services reacting to business events.
Why This Works Better
Making the Switch from Microservices to DDS
If you’re thinking, Great, but how do I transition?, here’s what I’d recommend:
I’m not saying Domain-Driven Services are a silver bullet. No architecture is perfect. But after wrestling with microservices for years, I can say with confidence that aligning services with real business domains makes everything easier—from development to maintenance to scaling.
If you’re dealing with microservices chaos, maybe it’s time to rethink the approach. DDS might just be the way forward.
Enterprise Architect at CGI
6 天前Nice article Paul and I like the thinking. I find an approach which organised services and applications closer to the business domain facilitates alignment with business goals. I also think that organising services and applications into domains also provides clear boundaries so we can make changes within the domains, for example information structures, without breaking stuff outside the domain. A good way to avoid spider web integrations across the enterprise.
Technology Executive | Board-Ready | Digital Transformation Leader | AI Champion | Chief Architect | TOGAF, AWS, Azure, Generative AI, Cloud Security(CCSK) Certified
6 天前Great article, Paul Preiss ! Very timely, as it aligns exactly with my thoughts on integration services based on data domains. Shifting towards an event-driven architecture alongside this approach will help reduce the complexity often associated with microservices. In the era of AI/GenAI, I believe microservices will continue to shrink even further.
Global Chief Technology Officer @DeepDive World
1 周Integration moves beyond connecting systems and towards unifying business capabilities, domain-driven design, and data-driven decision-making into a seamless, scalable architecture.?Once confined to strategy, business capability modelling now shapes service boundaries, while domain-driven design ensures these services align with real-world complexity. Meanwhile, data-driven decision-making refines how services communicate, reducing unnecessary interdependencies. The real problem? Most architects consider integration an afterthought, leading to API sprawl, brittle dependencies, and slow, inefficient systems. Modern integration isn’t just about tech—it’s about mastering the intersection of business strategy, service autonomy, and event-driven architecture.
Leading in architecture thinking & digital strategy | Outcomes & Impact | Enterprise Architecture@ISS
1 周Thanks for this article, Paul Preiss. I agree with you that the hype surrounding microservices is clearly flattening out and too much has been promised. In respect to DDD, I have to disagree on a few things you have outlined. Domain-Driven Design is essentially about real business domains. All the principles you write about are principles of DDD. Technology should enable the business (domains) and should not serve as an end in itself. Many correlate DDD with the implementation of Microservices. However, DDD does not specify to implement Microservices. So, I would vote to apply actual Domain-Driven Design, starting with the strategic pillar. It is not easy and it remains a complex undertaking. This is probably also the reason why a false understanding prevails in some cases.
Vipul Mistry