Essay - Published: 2024.01.16 | create | domain-driven-design | observe | research | software-architecture | software-engineering | tech |
DISCLOSURE: If you buy through affiliate links, I may earn a small commission. (disclosures)
Domain Driven Design (DDD) is a highly-praised software design practice for effectively architecting software at scale. The idea is to model the real-world domain as close as possible so that you eliminate "unnecessary complexity" - complexity that is not inherent to the problem you're solving but exists due to how you chose to implement the solution.
Unfortunately a lot of books, videos, and blog posts teach DDD through the use of "software patterns". By definition these concepts do not actually exist in the real-world and are thus "unnecessary complexity". This leads to a lot of confusion as they're adding that which we're trying to remove.
I've read and attended dozens of books, blog posts, and tech talks and one book stands head and shoulders above the rest for clearly explaining effective DDD in a way that is easy to understand and implement.
The best book on DDD I've ever read is Domain Modeling Made Functional by Scott Wlaschin (who also creates some great resources for learning F#).
I love this book and think it does an excellent job at explaining DDD because:
BONUS: It uses F# which is my favorite language and top-tier for modeling domains without unnecessary complexity.
The main reason I like F# is that it allows you to model your domain and processes as close to reality as possible with minimal "unnecessary complexity".
— Hamilton Greene 🚢 (@SIRHAMY) January 5, 2024
This means there's less surface area for error so more time is spent on TheThing vs overhead. #fsharp https://t.co/v9fBHwroF7
If you're interested in DDD and particularly if you've been struggling to productionalize DDD in your software practice, I can't recommend this book enough.
If you liked this post you might also like:
The best way to support my work is to like / comment / share for the algorithm and subscribe for future updates.