Earlier quoted context omitted.
> IMHO, the best way to do it is to be sitting with the expert, and observe exactly what they do. Or you give them a prototype of the program, and see what they complain about?
My experience is that invariably results in "development by veto". Each prototype they say that's not what I want, give me something else (that I'll fail to describe just like the last time) and I'll tell you that is wrong too after you've worked on it for a few weeks. Occasionally, you'll randomly get something they accept - but only for a few weeks until they come across some missing capability for some other thing…
When you are solving a real problem, you will still receive complaints, but they will be much more constructive.