Software é complexidade. E tal complexidade vem diretamente do domínio do problema ao qual o software se destina a resolver. É aqui que entram uma série de práticas voltadas a tentar combater ou mesmo amenizar tal complexidade. A criação de um modelo de domínio é uma delas.
Um modelo é uma simplificação, uma interpretação de algo mais complexo no qual gostaríamos de mostrar os aspectos mais relevantes. Um modelo de domínio serve como base para uma comunicação entre as pessoas que participam de um projeto. Esta comunicação deve ser realizada através de uma linguagem que facilite a interação entre pessoas que possuem visões diferentes sobre o domínio.
Em um projeto de software podemos encontrar vários perfis de profissionais. Os especialistas de negócio possuem sua própria linguagem, seus próprios jargões técnicos sobre o domínio. Diferente dos desenvolvedores que, por sua vez, possuem seus próprios conceitos para se referenciar ao domínio, muitas das vezes mais voltado para a solução.
Para os desenvolvedores torna-se difícil entender o domínio, algo novo, algo complexo, passado a eles através de uma linguagem que não compreendem muito bem. Alguns até se destacam e conseguem falar as duas linguagens, mas isso é mais um problema do que solução. A comunicação torna-se uma via de mão dupla. Tendo de ser traduzida a todo instante. Esse é o grande mal que aflige os projetos de software. Uma tradução mal interpretada pode colocar tudo a perder.