This repository contains curated resources on the topic of Domain Driven Design (DDD) and Event Storming that we recommend internally at SAP and love to share with the community.
Besides providing a collection of great resources we also tried to structure the learning path from a first introduction to deep dives and content specializing on certain aspects. Where we think it adds value, we are giving some hints how to work with the material and what to keep in mind.
Having said that, enjoy the ride π€ .
There are no prerequisites needed.
DDD is fundamentally hard to explain in 10 minutes. At its core, DDD says that your problem/business domain is what should first and foremost drive the design of your software system. Technology comes later. DDD offers principles, patterns and tools that help you collaboratively explore your domain, develop a common understanding and express this common understanding in useful models. Last but not least it provides guidance on how to express these models in code, architecture and organization.
You can find a bit more extensive but still brief description of what DDD is about here.
Note: In DDD, people often distinguish between strategic design and tactical design. Broadly speaking, strategic design is about understanding the problem domain and splitting it into so-called bounded contexts (think of them as modules for now β separate things with a distinct boundary between them), while tactical design is about modelling bounded contexts in more detail and diving into actual implementation details. While both are important and together form a holistic design toolkit, we believe strategic design to be the better starting point for newcomers. Strategic design has many touch points with other important aspects of software development, such as architecture and organization β which is exactly what makes it so valuable. It's also the pool to draw techniques and principles from when being tasked with understanding a new problem domain.
That being said, there's no wrong way to approach DDD. We hope that this gives you the ability to better judge which resource is helpful for you at the moment.
Not yet sure what DDD and Event Storming is all about and you want to get an overview on the topic? We got you covered. In this section we some material that should hook you up on the topic and at the same time give you a good explanation and overview. This is a perfect starting point for your DDD journey. From there you can dive deeper into DDD and investigate more detailed on the topics that are of specific interest to you.
π§βπ» Recommendation Although you can specialize on aspects of DDD we recommend to approach DDD with a broader perspective and not to hyper-focus on just one aspect.
Link | Our 2 cents (where applicable) |
---|---|
What is DDD - Eric Evans - DDD Europe 2019 (~1h) | - |
Event Storming - Alberto Brandolini - DDD Europe 2019 (~0:30h) | - |
50.000 Orange Stickies Later - Alberto Brandolini - GOTO 2018 (~0:50h) | - |
The following resources should be seen as good summary of important aspects of DDD and Event Storming. It is in their nature that they will not necessarily give you the appreciation of the topic as a whole.
Link | Our 2 cents (where applicable) |
---|---|
Domain Driven Design Quickly | - |
Domain-Driven Design Distilled | - |
Link | Our 2 cents (where applicable) |
---|---|
1st Event Storming Session - Agnieszka Pawlicka | Doesn't elaborate too much on the why |
100,000 Orange Stickies Later - Alberto Brandolini - Γredev 2019 | Good follow-up on the "50.000 Orange Stickies Later" talk referenced in the 101 section |
So you really want to dive deep into DDD and event storming, then the following resources are the right ones. To give you a better overview we distinguish between DDD and event storming in the following sections.
π§βπ» Recommendation we don't recommend these resources to get started with the topic. Working through the resources is worth it, but require some dedicated (reading) time.
Link | Our 2 cents (where applicable) |
---|---|
Domain-Driven Design: Tackling Complexity at the Heart of Software | The famous "Blue Book" from the inventor of DDD. Still the definitive resource, but we recommend reading the intro, then reading "Part 4: Strategic Design", and only then reading the rest of the book |
Implementing Domain-Driven Design | The "Red Book". A more practical help when it comes to implementing DDD. |
Learning Domain-Driven Design | Gives a clear road through the journey how to use Domain-Driven Design based upon practical examples. |
π₯Ί Nothing here yet - maybe you have something for us see "How to contribute".
Link | Our 2 cents (where applicable) |
---|---|
Introducing EventStorming | It is work in progress for some years now, so take it with a grain of salt |
Link | Our 2 cents (where applicable) |
---|---|
What is Event Storming by Paul Rayner | - |
Event Storming Workshop @Bucharest Software Craftsmanship Community | - |
Event Storming demo & discussion | - |
Remote EventStorming: Redesigning Everything | This is mostly relevant for moderators. Additionally, at 49:55, Alberto explains how to extract backlog items from the board. |
Trying out online EventStorming | This is rather long, but includes some interesting meta discussions. Can be interesting for moderators. |
Event Storming - How to deal with complexity and improve your domain design | - |
Event Storming - Alberto Brandolini - DDD Europe 2019 | - |
Of course there are also dedicated courses and learning paths available. They are usually paid offerings (maybe your company has a subscription) and go into the details quite quickly. They therefore are recommendations especially for more advanced learners who want to broaden and deepen their knowledge:
Link | Our 2 cents (where applicable) |
---|---|
Pluralsight Learning Path: Domain-Driven Design | - |
The application of DDD on legacy software is a special topic, but of importance as most of us will not start on a green field. This section is dedicated to resources that cover this aspect
Link | Our 2 cents (where applicable) |
---|---|
Getting Started with DDD When Surrounded by Legacy Systems | - |
Link | Our 2 cents (where applicable) |
---|---|
Eric Evans "Getting Started with DDD When Surrounded by Legacy Systems" | in German; walk through the paper by Eberhard Wolff |
If you want to facilitate a DDD or Event Storming workshop and are looking for templates and sample, you find useful resources here:
Link | Our 2 cents (where applicable) |
---|---|
Domain-Driven Design Starter Modelling Process | Super valuable resource with tons of templates for an end-to-end DDD modeling process |
Maybe you want to touch base with the DDD community or visit a conference. Then this section is the right place for you.
Link | Our 2 cents (where applicable) |
---|---|
Domain Driven Design Europe | The DDD conference in Europe, highly recommended |
KanDDDinsky | Annual Berlin-based DDD conference |
As in every collection there might be some resources that are worth to mention, but do not perfectly fit into the structure. They are collected here as additional goodies
π§βπ» Recommendation The content here is not related to a "learning path" for DDD but complements it with further aspects and discussions.
π₯Ί Nothing here yet - maybe you have something for us see "How to contribute".
Link | Our 2 cents (where applicable) |
---|---|
Is Domain-Driven Design Overrated? (Stefan Tilkov at GOTO 2021) | interesting talk around the sometimes maybe too evangelistic application of DDD in the wild |
We believe DDD is something that you must practice yourself to properly understand. If you want to try out DDD in your team, we came up with a DDD Kata that allows you to get hands-on experience. Give it a shot!
Of course this list is open to contributions:
- If you find a bug π like a typo, missing link etc., please open a bug
- If you like to have a resource added to the list π, please open a feature request. We will review the contribution and add it.
In addition, we are alo leveraging GitHub Discussions to foster the exchange. In case you want to ask questions youβre wondering about, share ideas or engage with other community members, this is the place to go.
Your friendly DDD crew from the SAP neighborhood π
- An Introduction to Domain-Driven Design
- The Core Concepts of Domain-Driven Design
- How to model Aggregates
- How to develop Aggregates
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone. By participating in this project, you agree to abide by its Code of Conduct at all times.
Copyright 2022 SAP SE or an SAP affiliate company and "Curated Resources for Domain-Driven Design (DDD)" contributors. Please see our LICENSE for copyright and license information. Detailed information including third-party components and their licensing/copyright information is available.