SOFTWARE DEVELOPMENT
13/05/2024 • Peter Claassen

Report of DDD Europe Foundations Day (2023)

In June 2023, four ACA colleagues participated in the Foundations Day of the multi-day event of Domain-Driven Design Europe (DDD Europe). At the Meervaart theater in Amsterdam, they attended various talks offering a practical perspective on DDD concepts. The complete report is provided below.

Following a refreshing coffee for the early birds and the welcoming remarks by the organizers, a packed program of eight talks with live coding ensued.

This blog post offers a concise overview of all presentations, followed by an evaluation across different areas: speaker inspiration, relevance to Domain-Driven Design (DDD), utilized analysis techniques, and technical usability of the information.

Reviews

Baking Domain Concepts into Code

This session was led by Paul Rayner, an Australian residing in the United States. He delivered a structured and engaging session with fresh insights into Domain-Driven Design and coding, showcasing a strong preference for Test-Driven Design. He delved into the concept of extended warranties, demonstrating it step by step in Ruby code using Event Storming.

As his narrative progressed and complexity increased, he adeptly addressed questions arising from the Event Storming with a Test-Driven approach. His concluding message was clear: "Don't be afraid to refactor code when starting from a fundamental Test-Driven method!"

Even for those with limited knowledge of DDD, the logic in his reasoning during the live coding was easy to follow. Although he isn't scheduled as a speaker for the upcoming edition of DDD Europe, if you ever have the chance to attend a session by Paul Rayner, don't hesitate: it's highly recommended.

🎥 Link to the video

Score card (1-5):

  • Inspiration: 3
  • Relevance to DDD: 5
  • Analysis techniques: 4
  • Technical usability: 4

Model Mitosis: A Dynamic Pattern to Deal with Model Tension

This entertaining session was delivered by Julien Topçu and Josian Chevalier. They presented a session within the context of the Mandalorian from the Star Wars saga, demonstrating several typical pitfalls in a development process. It was a fully scripted session where the live coding was supposedly done by an AI named Chat3PO. However, they did employ some interesting concepts such as a Shared Kernel and an Anti-Corruption Layer.

Since it was a scripted session, little time was wasted on writing code. This allowed them to easily switch to domain overviews, keeping the story coherent.

This session is definitely worth recommending because it elucidates an interesting evolution within a domain. In the last five minutes, they also provided a good summary of the evolution they underwent in their scenario and referred to the Hive Pattern where further development of this concept is utilized.

🎥 Link to the video

Score card (1-5):

  • Inspiration: 5
  • Relevance to DDD: 4
  • Analysis techniques: 4
  • Technical usability: 3

TDD & DDD from the Ground Up - Chris Simon

During the session "TDD & DDD from the Ground Up", several principles of Domain-Driven Design (DDD) were highlighted through a live coding example of Test-Driven Development (TDD). The experienced speaker, Chris Simon, shared his extensive knowledge on this topic. Thanks to his thorough preparation, profound understanding of the subject, and pleasant pace, this session was suitable for an audience of developers and analysts looking to explore the basic principles of TDD.

While the TDD portion was well-executed, there was a lack of a clear connection with DDD. Consequently, the session felt more like a TDD demo, with only limited attention to DDD principles. Additionally, the viewing experience was negatively affected by the low quality of the projected code, combined with the presence of ample sunlight in the room.

For those seeking to establish a solid foundation in Test-Driven Development, this session was certainly recommended. However, if you're more interested in Domain-Driven Design, there are better sessions available that offer more depth.

🎥 Link to the video

Score card (1-5):

  • Inspiration: 4
  • Relevance to DDD: 2
  • Analysis techniques: 1
  • Technical usability: 4

The Escher School of Fish: Modelling with Functions

During "The Escher School of Fish: Modeling with Functions", Einar Høst demonstrated the concept of function modeling through live coding in the functional programming language Elm. The example showcased numerous vector transformations to achieve image manipulation.

The presentation certainly appealed to developers. It was fascinating to witness the impressive results that can be achieved through relatively simple vector transformations. However, for analysts, the session likely offered less immediate value. Since the presentation was highly technical, we missed a clear link to Domain-Driven Design.

Despite the visually stunning results, the session seemed to stray from the context of a DDD conference.

🎥 Link to the video

Score card (1-5):

  • Inspiration: 2
  • Relevance to DDD: 1
  • Analysis techniques: 1
  • Technical usability: 3

TDD: Beyond the Intro Part One & Two

The two-part talk "TDD: Beyond the Intro" by Romeu Moura suggested a deeper dive into Test-Driven Development, and that's exactly what we got. Moura started with the basics of TDD but quickly went beyond the "red-green-refactor" cycle. He viewed TDD as a Socratic dialogue, a method of reasoning using tests as "field notes." His narrative was profound and clear, although the pace was a bit slow at times, making it challenging to stay fully engaged.

Despite the DDD context of the conference, Moura paid little to no attention to Domain-Driven Design. The focus was more on the general principles of TDD and how they can be applied in practice. The talk also included a live coding segment, where Moura built a simple fizzbuzz application using TDD. While this was a useful illustration of the discussed principles, it wasn't necessarily essential to understanding the talk.

Overall, this was a valuable talk for individuals with a technical background seeking to learn more about TDD: in-depth, clear, and practically applicable. Despite the limited references to DDD, it didn't diminish the quality of the presentation.

🎥 Link to the video (Part One)

🎥 Link to the video (Part Two)

Score card (1-5):

  • Inspiration: 4
  • Relevance to DDD: 1
  • Analysis techniques: 1
  • Technical usability: 4

Refactoring to a really small but useful model island

The speaker of this session, Yves Lorphelin, is an experienced software engineer with a passion for Domain-Driven Design. He shared his enthusiasm and expertise in an inspiring manner. The talk was clear and well-structured, with concrete examples and illustrations. Lorphelin addressed audience questions with knowledge and humor.

The talk was clearly rooted in the principles of Domain-Driven Design. Lorphelin demonstrated how refactoring towards a small model island can help reduce the complexity of a software project and better organize the code around core domain models.

Lorphelin discussed several analysis techniques that can be used to identify core domain models. These techniques include:

  • Bounded context analysis: Identifying areas of the application with their own domain logic.
  • Ubiquitous language: Developing a common language shared by all stakeholders.
  • Event storming: Modeling domain logic through events.

The talk was aimed at software developers and architects with a basic knowledge of Domain-Driven Design. Lorphelin delved into the technical details of refactoring towards a small model island, but he also maintained an abstract level to keep the talk accessible to a broad audience.

Score card (1-5):

  • Inspiration: 3
  • Relevance to DDD: 3
  • Analysis techniques: 4
  • Technical usability: 3

Living in your own bubble - Jacob Duijzer: From legacy to Domain Driven Design

In this session, agile coach Jacob Duijzer explained how he tackled Legacy code for a project within the agriculture domain. He provided deeper insights into the domain using the Domain Storytelling technique. He outlined the new guidelines applicable to the existing system, which not only was complex and outdated but also lacked documentation, unit tests, and experienced domain experts.

Jacob Duijzer demonstrated how he had domain experts explain the domain using examples (known as 'specification by example'). Following this, he explained 'the bubble context' and how it can be utilized to implement new business rules without impacting the existing system. Finally, he outlined the pros and cons of a bubble context.

🎥 Link to the video

Score card (1-5):

  • Inspiration: 3
  • Relevance to DDD: 5
  • Analysis techniques: 4
  • Technical usability: 3

Functional Domain Modelling - Marco Emrich and Ferdinand Ade

This presentation brought a touch of theater to DDD 2023, starring Marco (as the developer) and Ferdi (as the customer/Product Owner). The story unfolded as follows…

Ferdi, active in the wine sector, wanted to build an application to recommend the best wine to his customers, tailored to their tastes. It was delightful to see Ferdi thinking aloud about his expectations. Marco immediately tried to translate this into code using 'types'. As Ferdi described step by step how a 'tasting' unfolds, Marco immediately coded it in Ferdi's language. For example, Marco initially chose the term 'wine selection', only to later change it to 'wine cellar'. After all, Ferdi kept referring to their wine cellar, not their selection.

Ferdi continuously looked over Marco's shoulder. Together, they added, removed, and renamed elements. Anything unclear was postponed. Gradually, a shared language emerged between the developer and the customer.

From this entertaining session, we learned that it's beneficial to model together with the customer using event storming or domain storytelling, although the outcome may be abstract. 'Functional Domain Modeling' can be the icing on the cake. The result is explicit, specific, and provides a solid starting point for implementation.

🎥 Link to the video

Score card (1-5):

  • Inspiration: 3
  • Relevance to DDD: 3
  • Analysis techniques: 4
  • Technical usability: 3

Conclusion

After attending the Foundations Day of DDD Europe 2023, our four colleagues returned home with a wealth of new insights that they will apply in practice.

The theme of live coding provided developers with an excellent opportunity to gain deeper insights into DDD principles. Additionally, many related techniques were covered, such as Test-Driven Development.

Not every session had a clear link to DDD, which was a bit of a drawback for analysts. Nevertheless, the atmosphere throughout the day was exceptionally positive and inspiring. The Meervaart theater proved to be the perfect setting for attendees to network and exchange experiences before and after the sessions.

We're already looking forward to the next edition of DDD Europe!