It is frustrating not having a local domain expert on site or OnsiteCustomer
to answer questions.
How do you overcome this?
To a very significant degree, you don't. In general, customers need to be educated in their role. They are used to saying "I want foo", having the high priests disappear into the inner sanctum, and then (several months after the deadline) being delivered something that is almost, but not entirely unlike foo. LackOfOnSiteCustomer
is perceived in most circles as the norm, not the exception.
Recently, I tried to start a team off on a project. They were developing an in-house application for a large company. The entire building they were working in was populated with engineers. The customers for every application being developed in that building were located about half an hour away by train. This would normally be better than average (Last job, the customer was located in another state, visited once a week, and had about half an hour to spend with the developers when she did), except that for this particular development team, the customer was on holiday in India.
Customers are often scared of being more involved, because they don't want to face up to their not understanding the technology, which is stupid because knowledge of the technology is what the programmers are there for - knowledge of the domain is what the customer is there for. To be fair, programmers are often too proud to admit ignorance of the domain, which is why a customer needs to be so available that there is no excuse not to ask them questions.
If you lack a customer, you can try to overcome this in three ways (1 and 2 are not mutually exclusive):
Who controls how the product should work?
- Keep asking the customer to be involved. Show them how much fun it is to be involved, and how much better the project runs when they are around, compared to when they are not.
- Make educated guesses, and live with the slowdown and frustration caused by fixing the wrong ones. Perhaps keep track of how much time was lost because the customer wasn't there.
- Walk away. (This is the ideal solution, and thus the one that's usually not practical.)
- If you can't get hold of them physically, why don't you just e-mail or phone them when you have a question? Another fun way is to set up a wiki for developer notes. The customer reads and writes on the wiki. Bad assumptions will be corrected quickly.
Two-inch thick design documents. Osmosis. Programmer consensus. Someone stepping in to lead by default in the customer's absence. Frenzied whiteboard scribbling sessions. Frequent long distance phonecalls. Kidnapping the customer for an afternoon and interrogating her. Tarot readings.
[p. 20] has a section called If the Customer Can't be There
. It contains five recommendations:
- Try harder to get an OnsiteCustomer
- Get the customer on site for at least the planning meetings
- Visit the customer
- Release code very frequently to the real customer
- Plan for extra misunderstandings