In our example, the outcome of these workshops was a model that looked like this. There are currently two aggregates in our domain. The first one is a board that you can mount and share with others. By default, it’s only visible to the person that mounted it. The notes are actually a separate aggregate in our domain because we wanted to be able to collaborate on posts without causing conflicts when being edited in parallel. You note a post and afterwards it will be pinned onto a board. Once noted you can also move and edit this kind of post. In his book DDD Distilled, Vaughn Vernon shares other interesting tricks and guidelines for how to design a model such as this.
So what have we gained by following this approach? Together as a team we’ve designed a blueprint for an API without worrying too much about the technical details. We’ve had insightful discussions about our domain and we’ve settled upon a shared terminology to describe it.
„From our experience it is often this shared terminology which is difficult to achieve as the backend, frontend and business team each speak their own dialect.”
We were quite happy with our first iterations and we were then eager to bring it to life.