Most products start with an initial software model, a model that is usually naive and superficial, based on shallow knowledge. Which makes sense, because you just started discovering and exploring that new product. So we typically start by identifying nouns and verbs and using these as the initial objects and methods to build in our code.
While the initial model helps you start getting fast feedback for your product, once you get more feedback most of the time it isn’t a helpful model anymore. They usually don’t provide a rational expression of the primary concerns of the domain experts anymore as time progresses to build that product. Not having that expression can hold you back from making essential breakthroughs for your product, breakthroughs that can be the differentiation factor in the market. And even worse, implementing the model in code might not even support making these new breakthroughs.
Join us in this talk, where we present to you why we think it is crucial for the core model of your product to be continuously refactored towards a deeper model. We begin with a short introduction and the origin of Domain-Driven Design and model-driven design. Then we will explain the concepts of deep modelling, and why tactical patterns with a Supple design are essential to doing deep modelling. We will dive into a concrete example, worked out with the model exploration whirlpool and collaborative modelling practices like EventStorming, Example Mapping, and Responsibility mapping based on CRC cards. Finally, we dive into the code and show how we can get breakthroughs by continuously refactoring to deeper insights with a supple design getting a deep model.