Skip to content

Latest commit

 

History

History
207 lines (134 loc) · 25.7 KB

File metadata and controls

207 lines (134 loc) · 25.7 KB

REUSE status

Curated Resources for Domain-Driven Design (DDD)

About this project

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 🤠.

Requirements

There are no prerequisites needed.

🤷 What is DDD all about?

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 in Mathias Verraes' article What is Domain-Driven Design?.

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.

🧑‍🎓 DDD & Event Storming 101 - Let's get things started

Not yet sure what DDD and Event Storming is all about and you want to get an overview on the topic? We've got you covered. In this section we present 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 the topics that are of specific interest to you in more detail.

🧑‍💻 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.

Videos

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) -

🧑‍🔬 DDD & Event Storming 201 - Give me more

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.

Books and Articles

Link Our 2 cents (where applicable)
Domain-Driven Design Distilled Domain-Driven Design Distilled is a concise and practical guide to the basics of DDD, a software modeling approach that delivers powerful results in real-world situations. The author, Vaughn Vernon, explains the core techniques and benefits of DDD, using clear examples and real-world scenarios. Whether you are a developer, architect, analyst, consultant, or customer, this book will help you understand and apply DDD to build better software.
DDD Core Concepts A quick summary of the core concepts of DDD from our community
Learning Domain-Driven Design Gives a clear road through the journey how to use Domain-Driven Design based upon practical examples.

Videos

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

🦸 DDD & Event Storming 301 and beyond - Going all in

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.

DDD

Books and Articles

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.
Architecture Modernization Architecture Modernization: Socio-technical alignment of software, strategy, and structure is a comprehensive and practical book that shows you how to align your software architecture with your business goals, organizational design, and team structure. The book covers various techniques and practices, such as Domain-Driven Design, Event Storming, Wardley Mapping, and Team Topologies, to help you design, modernize, and evolve your software architecture. The book is full of real-world examples, stories, and tips from the authors, who are experts in the field of software architecture. The book is suitable for anyone who makes decisions about software architecture or organization design, such as architects, CTOs, principal engineers, and tech leads.
Team Topologies Team Topologies is a book that shows you how to design and evolve effective software teams based on four team types and three interaction patterns. The book explains how to align your team organization with your business goals, culture, and needs, and how to use teams as the main delivery mechanism. The book also shares insights and examples from the authors’ experience as IT consultants, and how to use team topologies to create a clear and sustainable software architecture. Team Topologies is a must-read for anyone who wants to improve their software team performance and collaboration.
Accelerate This book is based on four years of research on software delivery performance, using data from the State of DevOps Reports and statistical methods. The authors, Dr. Nicole Forsgren, Jez Humble, and Gene Kim, reveal the key factors that influence software delivery performance and how to improve it. The book is a valuable resource for anyone who wants to apply technology to drive business value, from practitioners to managers.

Videos

🥺 Nothing here yet - maybe you have something for us see "How to contribute".

Event Storming

Books and Articles

Link Our 2 cents (where applicable)
Introducing EventStorming Our Community take how to run an EventStorming Workshop
Introducing EventStorming - An act of Deliberate Collective Learning EventStorming is a simple and effective way to model complex problems using coloured sticky notes on a long paper roll. The book shows how EventStorming can help you improve your business processes, software architectures, learning, and interactions. The author, a leading expert in the field, shares his insights and experiences from applying EventStorming in various contexts. The book is still a work in progress, but it already offers valuable guidance and examples for anyone interested in EventStorming.

Videos

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 -

Courses

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 -

DDD and Legacy

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

Books and Articles

Link Our 2 cents (where applicable)
Getting Started with DDD When Surrounded by Legacy Systems -

Videos

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

Templates and Samples

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

DDD Community

Maybe you want to touch base with the DDD community or visit a conference. Then this section is the right place for you.

Meetups

Conferences

Link Our 2 cents (where applicable)
Domain Driven Design Europe The DDD conference in Europe, highly recommended
KanDDDinsky Annual Berlin-based DDD conference

Further DDD Goodies

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.

Books and Articles

🥺 Nothing here yet - maybe you have something for us see "How to contribute".

Videos

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

DDD Kata

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!

Support, Feedback, Contributing

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 😎

Blog

  1. An Introduction to Domain-Driven Design
  2. The Core Concepts of Domain-Driven Design
  3. How to model Aggregates
  4. How to develop Aggregates

Code of Conduct

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.

Licensing

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.