4 ms·
I’m on my fourth enterprise project. DDD is a combination of communication and implementation and I teach it now. In my experience, the biggest hurdles are get
by ChicagoDave 5y ago
I’m on my fourth enterprise project. DDD is a combination of communication and implementation and I teach it now.
In my experience, the biggest hurdles are getting the business and engineers to follow the process.
Model->Validate with scenarios->Code Probe
Repeat as needed.
DDD lends itself to serverless and event-driven architectures and this is also a struggle.
Context mapping is important. Focusing on behavior is important. Identifying language is important.
Learning about Event Storming is also important.
But DDD is overkill for a straight data maintenance system (CRUD). The goal is to reduce complexity. Not create it.
Oh and the hard part. In DDD, abstractions and relational databases are bad starting points. You may end up with relational data stores, but the bound context should drive that. More often than not, a document data store is cheaper and more efficient. Abstractions are bad because we often see similarities in multiple boundaries and have an urge to combine things. But that’s a path to monolithic spaghetti.
I’m a huge advocate for DDD and believe many architects are stuck in PaaS. I think it’s critical to unwind that thinking.
A good example is how much greater would Salesforce be if they’d used DDD principles to design it? Clear boundaries. Clear modularization. As it is, it’s a tangled mess of monolithic code.
- stepbeek 5y agoI don't think I understand why DDD and PaaS are mutually exclusive. Can you elaborate please?
- ChicagoDave 5y agoThe behavior of a business should dictate the technology and architecture. It’s very possible to start with products in mind and handcuff or cripple your modeling. You’ll often see architects constrain models based on acceptable technology, like only using SQL Server or always using RESTful apis. REST has nothing to do with business behavior. Using POST and GET exclusively and ubiquitous language exposes a more maintainable system. If you’re forced to only use one kind of data store, just make sure you keep your boundaries clean.