Introduction to Domain Driven Design
Are your development teams struggling with the complexities of both business and technology? Do misunderstandings between product and development lead to lost time and costly mistakes? Is your systems architecture constraining your teams and limiting ownership, rather than being helpful?
We sometimes play down problems to create simple solutions. In practice, the problem domain turns out to be way more complicated, while other factors like security, privacy, and compliance impact the solution as well. Add technology complexity to the mix, and the overall complexity of our systems grows fast. Delivery becomes slow as a result.
Domain-driven design (DDD) is an approach to software development for complex needs that connects architecture and implementation to an evolving model of the business domain. It embraces essential complexity rather than hiding it and allows for an iterative and incremental approach to software development.
Software development is much about learning and speaking the same (domain) language. Domain Driven Design will help you develop higher quality software products that will be better maintainable in the long run. Quality follows from good boundaries, ownership, and aligning all disciplines and stakeholders.
Domain Driven Design provides practices, patterns, and guidelines for creating a shared understanding of your business domain and designing a systems architecture that fits your business domain. It helps you make better architecture and design decisions.
In this introduction course, you will get an overview of Domain Driven Design and learn the basic modelling concepts, patterns, and practices like subdomains, bounded contexts, aggregates, context mapping, and event storming. This course is not just for developers. To create a shared language, the other disciplines are also necessary: architecture, product, UX, support, and sales.
We offer this workshop in two variants:
- We bring our own case to work on (EdiTrain), where we focus on learning DDD patterns, practices, and heuristics.
- We will make the workshop more tailored to your organisation, by working on your business domain. This also works well for fast onboarding of new employees in the domain.
Benefits
For your organization, this course will help to:
- bridge the gap between development, product, and business by growing a shared understanding;
- improve the quality of architecture decisions;
- achieve better system boundaries, allowing teams to work more autonomously and to take ownership;
- improve software maintainability.
Course outline
- introduction to Domain Driven Design – what and why;
- hands-on modelling: create a domain model collaboratively using Event Storming;
- find Subdomains within the business domain; how to use subdomains for strategic decisions;
- identify Bounded Contexts and create a Context Map to create a systems architecture that facilitates teams;
- use Event Storming to do systems design: identify Commands, Policies, Read Models;
- design change boundaries to create a scalable design, using Aggregates.
We will guide participants through the different techniques and patterns with a bit of theory and a lot of lively, hands-on collaborative modelling exercises. During the exercises we will share many modelling heuristics and guidelines.
This workshop focuses on modelling a domain and doing architecture. Implementation and coding aspects are covered by our Implementing Domain Driven Design workshop.
Learning objectives
After attending this training course, participants will be able to:
- explain what DDD is and what it is not;
- use Event Storming to facilitate a collaborative domain modelling session;
- explain patterns like Subdomains, Bounded Contexts and Aggregates and what they are intended for;
- create a Context Map based on the outcome of an Event Storming session;
- evaluate context and service boundaries using heuristics;
- design Aggregates as units of change and apply heuristics to find good consistency boundaries.
Audience & prerequisites
Software developers, testers, analysts, architects, product owners, agile coaches; this workshop is suitable both for junior participants who want to grow and for senior participants who’d like to sharpen their modelling skills.
Having at least a year of experience in a software development environment is recommended.
Practical information
- Duration: 2 days
- No laptops required