The Problem with Customer Proxies
The problem with proxy customers (business analysts assigned to work with a distributed team) is that they serve as a layer of abstraction between the developers and the customer. While this seems like a statement on the obvious, the implications are not necessarily so. The primary concern with the use of customer proxies is that they may misinterpret the customer's requirements so that the development team ends up building the wrong thing. However, with highly iterative Agile development, this is unlikely to happen because the real customer has the opportunity (and responsibility) to regularly review what's been developed thus far. If the development team is off track, they tend to find out pretty quickly.
The main concerns that I have with customer proxies is that they tend to be too good at shielding the development team from direct interaction with the customer. As I see it, this creates two main challenges:
- developers are less likely to learn the language of the domain. As proxy customers are generally more technically-inclined than real customers, it is easier for the devs and the proxies to communicate using the language of the system rather than the language of the domain. This eliminates part of the compulsion to build a common understanding of the domain (the Ubiquitous Language that Eric Evans describes in Domain Driven Design) and, when developers actually have to try to explain the system to real customers and users during presentations or training, it becomes very hard for developers to get their ideas across.
- developers lose visibility in the eyes of the customer. This is especially dangerous as it can become easy to dehumanise the developers and be less tolerant of any mistakes they might make (especially in an offshore engagement where there is an implicit backdrop racial prejudice).
That said, customer proxies are essential to distributed projects. If developers need business questions answered and the real client is time zones away, the immediate feedback that a customer proxy can give is invaluable. However, what is important is to establish a process that ensures that the developers have the opportunity to regularly engage with the customer directly.