DDD and Legacy systems

Marijn Huizendveld March 16-19, 2021
9:00 AM - 12:30 PM (MDT)

Do the corners of your mouth go up when you think of Domain-Driven Design? Do you appreciate the ability to express behavior in your domain through model interactions? Do you appreciate a shared language that is aimed at solving problems in your domain and also the clarity of the code artifact, thanks to tactical patterns? All of these things are great on paper but how do you achieve them in an environment where legacy systems dictate what can and cannot be done?

Let's face it, DDD is difficult in an environment with pre-existing software:

  • The size of the existing feature-set makes it difficult to understand the impact of change
  • The models of the system are often not explicit nor expressive
  • Application architecture frequently inhibits model-driven design
  • The sheer number of modeling concepts can be overwhelming, especially for new people on the team
  • Incomplete or poorly designed test suites make safe changes expensive
  • And we haven't even talked about the practical objections like data migrations and deployments
  • The list goes on and on

The result?

  • Refactoring is costly and has a slow return on investment
  • The inability to experiment prevents deep models from emerging

But what is the alternative? You certainly won't try to rewrite the legacy system which took a decade to build. Will you be stuck with your anemic domain model forever?

Imagine a small experiment to try DDD in your environment

  • With the benefits of a pure domain model: in proper language, expressive, testable, focussed
  • Giving you a fast feedback loop on the underlying model philosophy
  • Acting as either a reference or fundament for future efforts
  • All without the overhead of a new application architecture


In this workshop, you will learn how to apply Domain-Driven Design in an environment with a dominant legacy system by solving a problem in this setting. You will devise pure models that you can apply.

Together with some other attendees, you will create a context map to communicate about the legacy environment. Once your team has situational awareness you can start modeling your problem. At the end of the workshop, you should be able to demonstrate which of the approaches is best suited in a particular situation.


  • You have a solid understanding of fundamental DDD concepts
  • You are able to work as part of a team
  • You DO have basic refactoring skills, although we will not be programming
  • You are not afraid to let go of any of your own ideas

About Marijn Huizendveld

Marijn teaches people of different backgrounds the skill of doing the things that matter in environments that are critical to performance.

Often his work involves organizations, software and customers. He brings these worlds together while teaching you and your colleagues how to do so.

Judge him on added value, it's the only metric that matters. You may call him a consultant, coach, trainer and entrepreneur, because that's what he is.