202511160842 Ingredients of effective domain modeling
- Binding the model and the implementation — it’s important to start immediately with a crude prototype of both the model and the implementation and then develop them both simultaneously. Doing so prevents the model and implementation from drifting apart or contradicting one another.
- Cultivating a 202511151211 Ubiquitous language based on the model — domain experts and software engineers should understand each others’ terminology and adopt a shared language for talking about the domain, the model, and the software.
- Developing a knowledge rich model — the model is more than the implementation, but contains it. The implementation is more than code, and contains the knowledge of the model. There are behaviors, rules, constraints, limitations, scoping, abstractions, and more that are part of the model and need to be part of the implementation. Make sure you have a method for capturing all kinds of domain knowledge in your model and implementation.
- Distilling the model — important concepts are added, but also importantly, dropped from the model over time. When an unneeded concept is tied to a concept that is needed, every effort should be made to find a model containing only essential concepts so extraneous ones can be dropped. It may be a good idea to record when these decisions and changes are made so that people will know the decision making behind a dropped/unincorporated concept.
- Brainstorming and experimenting — the ubiquitous language, combined with sketches, brainstorming, and the implementation bound to the model, enable discussions to be full experiments of variations on the model. It is possible to understand the clarity and utility of changes purely through discussion.
Links to this note
Linked from this note