The involvement of the domain specialist then allows the construction of a ubiquitous language, from which it is possible to find out which entities, aggregates, and etc are needed to build the software. Knowing the ubiquitous language, operations and requirements, you also easily discover the responsibilities of each class.
The problem is that this assumes first of all that the domain expert wants to actively collaborate with development. What I have seen in practice, however, is just the opposite, the domain expert does not want to collaborate at all. The main points that I have observed in this aspect are:
- Domain specialist avoids face-to-face meetings and wants to handle everything via email or other textual paths
- The domain specialist provides the requirements via text without much explanation and does not like much questioning. At this point, to him who is accustomed to that domain, that simple explanation is sufficient and seems all obvious. For someone from outside it is not quite like that, and it is extremely difficult to understand what he wants after all.
- The domain expert thinks his role is just to say what he wants working . He finds it totally unnecessary to explain the domain in more detail and does not like the developer to ask questions.
- I even had a case that when responding to an email questioning some requirements to see if my understanding of the requirement and the domain was correct, the domain expert became irritated and said I was making things up and complicating everything because it was all obvious he had written.
Anyway, I could list a thousand more items along those lines. For all I read I found the proposal of agile methodologies and very good domain-driven design . It is a proposal that answers a number of difficult questions such as "how to determine what to program" and how to give a much larger organization to the project. However, if this is true, on the other hand, I find it very difficult to make the domain expert collaborate.
My question here is: how do the domain expert, the end user, actually collaborate with development to develop the right thing?