In the world of domain expert software, there is a lot of talk about models. Its a confusing idea. What exactly is a model in software? It may be a diagram on a white board. But beyond that, even people who think about it all the time struggle to express what it really is. It is a very abstract idea. A model is a simplified representation of something. That’s not a very helpful definition.
Perhaps here’s a better way to get the idea across – music.
Popular music (by which I mean, any music which has been particularly popular at any time) expresses some feeling that people in that society have, in a way which no-one really understands. The Beatles reflected the atmosphere among young people in the late 1960s in the UK and the US.
By doing this, music becomes a powerful ‘model’ in the centre of society. People can engage with popular music and understand how their society works on levels more subtle than anyone directly explains.
Similarly, the idea of a ‘model’ in Software for Domain Experts (or Domain Driven Design) is of a central idea, which sits in the middle of the software structure, and reflects how the people in the wider business (who we call ‘domain experts’) see their world. The model reflects the knowledge of people who know the domain. You can study the model and learn more about the domain.
Like music, a model can be continually improved, until you get it really good – something which gives out a great deal, and does it with enormous simplicity. The music has enormous power and can reflect the way society feels right into its deepest corners – in the same way, a good software model can bring the challenges of the domain to every back room programmer.
How do you build the model? Like how do you build good music. You need an understanding of both the domain (the wider culture, in music’s case) and the technical issues of how to build the software (or create the music). Like good programmers, a musician feels intrinsically part of, and connected to, the domain.
Then there are lots of tools to help you create good music and good models. But basically, you’re on your own. You can’t do it just with a book. You might get better with practise, you might not. What helps most of all is if you really want to understand the domain, and understand how to work with your tools, and create something to sit in the middle which expresses it.