Domain-Driven Design of Large Software Systems (DDD), WS24
Domain-Driven Design of Large Software Systems (DDD) enables students to architect complex software systems from the ground up, using the DDD paradigm for designing loosely coupled software systems. The course focuses on the domain exploration, subdomain specification, and a prototypical “scaffold” implementation. Aspects of a technical architecture are not covered in this course.
- Study Program and Module Description
-
Master Digital Sciences (specialization Software Architecture)
(see also module description in the study program web site)
- Begin/End and Scheduling
-
04.10.2024 - 24.01.2025. Organized as 7 (usually full-day) workshops plus self-organized work; specific dates and agenda see below.
- Location
- The module takes place in presence. In exceptional cases (but only if explicitly communicated for the day) we'll switch to a remote option (video conference). If more than one location is listed here, please look at the respective time slot or workshop day (see bottom of this page), which location is used on which day. If there are no details given on this page, please check the other communication channels (e.g. Discord).
-
-
Room:
0505 (Building LC6, opposite main entrance of Schwalbe Arena), see also
detailed directions
-
Video conference link:
https://th-koeln.zoom-x.de/j/62835437755?pwd=tkkFTJLuuDlb1l8TSXwxtm9R5kZm0s.1
(only in exceptional cases and if explicitly communicated in advance for the day)
- ILIAS/ILU Course for the Module
- https://ilu.th-koeln.de/ilias.php?baseClass=ilrepositorygui&ref_id=433463
-
Registration
for the Module
-
Please join
this ILIAS/ILU course.
Deadline is 04.10.2024.
Please remember that you must additionally register for the exam via PSSO. The registration deadlines for this can be found on the F10 information pages of the TH Köln.
- Maximum / Minimum Number of Participants
-
The maximum number of participants is
15.
If there are less than
3
participants, the course cannot take place.
- Miro Board used for documenting the EventStorming results, and the subsequent domain modelling results
-
During the module, you can
use this Miro Board.
- Discord Server for fast Communication
-
Discord has been proven as a very effective platform for information sharing, discussions, and consultations. Therefore, please join the ArchiLab Discord Server at
https://discord.gg/YYNYb5whU8.
Navigate to channel
#rollenzuweisung
and click on
ddd
.
Then you automatically get access to the channel(s) relevant for this module.
Learning Outcome
This module attempts to walk you through the design process for a relatively complex software system, by creating a domain-specific design for the problem. Modern software architecture means that you are close to coding. Therefore, we will have a real software development case study in this module.
As a experienced programmer, architect, or business analyst I can design a reasonably complex greenfield application for a multi-team development setup, using the domain-driven design paradigm,
by me ...
- conducting an EventStorming workshop, in order to capture the business domain,
- evaluating the domain flows and defining appropriate bounded contexts for the teams,
- creating a domain model, using the appropriate design elements,
- defining a high-level C4 model, using the C4 modelling approach,
- documenting the results of the design process,
- implementing a prototype of the design, using Spring Modulith,
- reflecting the pros and cons of that particular design method,
so that I can make sure that I have a sound, sustainable high-level architecture for my business domain.
Methodology
Domain-Driven Design (DDD) is a concept framework rather than a design method. In order to give this
course a practical, hands-on approach, we will use the DDD Starter Modelling Process as a process model.
This is a multi-phase process, which we will divide in the three parts listed below.
The list also contains the artifacts that we will create in this course (as indented bullet points).
- EventStorming
- Workshop concept
- EventStorming result documentation
- Bounded Contexts
- Core Domain Chart
- Domain Message Flow Modelling
- Context Map
- C4 Model
- C4 Level 1 system diagram
- C4 Level 2 container diagram
- Implementation
- Spring Modulith implementation of the case study
- Documentation of the implementation
Course Structure
You will basically work in two subteams in this course.
- As part of a workshop team, you will prepare and conduct the workshop for one of the phases 1 - 3 above.
The subteams will perform an in-depth study of the the artifacts they are responsible for. They will then
prepare and conduct the workshop for their phase, so that all participants of this course can get a
hands-on experience of the method. I will coach and support the subteams.
- After the Event Storming workshop, you will take ownership for one of the bounded contexts identified in
the workshop. For that purpose, you will be part of a bounded context team. This team will work on the detailed
design, and implement it in phase 4. I will coach and support the bounded context teams.
The case study will be a restaurant management system, as described in
the case study description.
Documentation
(tbd - there will be repository for code and documentation)
Grading (Based on a Points Scale Between 0 and 3)
(tbd - detailed grading scheme)
The grading will be based on the following aspects:
- 20%: Workshop preparation and moderation, and documentation of the retrospective
- 40%: Specification of the bounded contexts (artefacts from phases 1 - 3)
- 40%: Implementation of the bounded context (artefacts from phase 4)
Individual Contribution
As a default, I assume that each team member contributes an equal share to the team project. However, if I have indications
that this is not the case, I reserve the right to adjust the individual grades accordingly. In such a case, I will modify
the team points for the individual score according to the following table.
Individual Contribution |
< 30% |
30 … 80% |
80 … 100% |
> 100% |
Level of individual contribution to team efforts |
The student was hardly involved in any interactions at all within the team. |
The student was only involved in team interactions on a few occasions. |
The student has been visible to an average degree in the team (guiding others, leadership tasks, providing assistance, contributing to professional discussions, etc). |
The student has been exceptionally visible in the team through guidance of others, leadership roles, assistance, contributions to professional discussions, and the like. |
This concerns the following the workshop and the final presentation aspects, which are group grades. The case study
grade points are based on individual contributions, as per effort matrix.
Workshops
Fri 04.10.2024, 10:00 - 14:30: Kickoff
We discuss the goals, structure, organizational details, and grading for this module. In addition, you get an introduction to the preconditions for this course and pre-courses, where applicable.
Workshop Location
Room:
0505 (Building LC6, opposite main entrance of Schwalbe Arena), see also
detailed directions.
Goal of the day
You can start with this module.
Please watch the following video(s) beforehand
Agenda
-
10:00 - 10:30:
Introduction Round
- Every participant introduces her/himself
- What is your knowledge level wrt. coding and DDD concepts?
- What are your expectations?
-
10:30 - 11:30:
The DDD journey in a nutshell
- Motivation for this module - why DDD? Here are the slides
- Sketching the road ahead
- Brief introduction into the sequence of the design elements
-
11:30 - 12:00:
Organisation of the module
- Goal of this module
- Structure
- Organizational details
- Grading
- Case study briefly explained
-
12:00 - 13:00:
Lunch Break
-
13:00 - 13:15:
Introduction to Coding Pre-Task
- We will use Spring Modulith for the implementation of the prototype.
- Therefore, you will get a pre-task to get familiar with jMolecules, Spring Modulith and DDD concepts in (Spring-based Java) code in general.
- The pre-task consists of an individual repository for each of you, with predefined tests that need to be "green".
- The pre-task is due until the 2nd workshop.
- It is not graded, but a precondition to participate in the module.
-
13:15 - 13:45:
Team formation and next steps
- Task details for each subteam
- Team formation - please give your vote here
- green means "I want to be in this team"
- yellow means "I can live with being in this team"
- red means "I don't want to be in this team, if possible"
- Questions, next steps
-
13:45 - 14:00:
Preparation for the Event Storming Workshop (Event Storming Team only)
- We use the opportunity to discuss your preparations for the Event Storming workshop next week.
Fri 11.10.2024, 10:00 - 17:00: EventStorming "Big Picture" Workshop
We use the EventStorming method in a workshop, and reflect on the results. The goal is to explore our case study domain in a "typical" DDD way. This workshop will be prepared and moderated by a dedicated "EventStorming" subteam. I will coach and support the moderators.
Workshop Location
Room:
0505 (Building LC6, opposite main entrance of Schwalbe Arena), see also
detailed directions.
Goal of the day
You have the "big picture" ingredients for the case study (events, subdomain boundaries). And you have an understanding how this method works, of its strengths and limitations.
Fri 15.11.2024, 10:00 - 17:00: DDD Crew Workshop
We evaluate the EventStorming results and derive bounded contexts (the blueprints for service boundaries) from them. We apply selected elements of the "DDD Crew" toolset, prepared and facilitated by a dedicated "DDD Crew" subteam. I will coach and support the moderators.
Workshop Location
Room:
0505 (Building LC6, opposite main entrance of Schwalbe Arena), see also
detailed directions.
Goal of the day
You have an detailed understanding of our domain, and how to derive it from the EventStorming results.
Fri 29.11.2024, 10:00 - 17:00: C4 Model Workshop
Based on the bounded contexts, we will now create a high-level C4 model. This workshop is prepared and facilitated by a dedicated "C4 model" subteam. I will coach and support the moderators.
Workshop Location
Room:
0505 (Building LC6, opposite main entrance of Schwalbe Arena), see also
detailed directions.
Goal of the day
You have a technical model of a modulith architecture for our domain. And you understand how aggregates are a key to design service components, and how to create a high-level C4 model from the bounded contexts and their aggregates.
Fri 13.12.2024, 10:00 - 17:00: Implementation Workshop
We will start implementing a prototype for our case study using Spring Modulith. The workshop will give you an in-depth introduction to the framework and the conceptual ideas behind it.
Workshop Location
Room:
0505 (Building LC6, opposite main entrance of Schwalbe Arena), see also
detailed directions.
Goal of the day
You have a good understanding how Spring Modulith works, and how to use it to implement a DDD-based architecture. You have organized yourself in subteams, and have a plan how to proceed with the implementation.
Fri 10.01.2025, 10:00 - 17:00: Status Implemention
We will review the status of the implementation, and discuss obstacles and the next steps.
Workshop Location
Room:
0505 (Building LC6, opposite main entrance of Schwalbe Arena), see also
detailed directions.
Goal of the day
You can continue with the implementation, and have a plan how to proceed.
Fri 24.01.2025, 10:00 - 17:00: Demo and Retrospective
We will showcase the implementation results, and reflect on the methodology behind it.
Workshop Location
Room:
0505 (Building LC6, opposite main entrance of Schwalbe Arena), see also
detailed directions.
Goal of the day
You have an educated opinion on the pros and cons of the DDD conceptual ideas and tools, and can apply it in your own projects.