In the software development industry, the physical distance between developers and users is an important, often-overlooked variable to the success of a project. I'm currently working on a project where my development team is several hundred yards away from our users, and we're also in another building. Because developers don't seem to like telephones, or perhaps don't like talking to other people that aren't developers, I contend that this 300 yards could easily be 30 miles.
I say "30 miles" for several reasons. First, we don't see the users but maybe once a week on average, so we don't need to be any closer. Second, 30 miles makes the trip reasonable to do once a week. Finally, our office is 30 miles away from here, and I *know* we could develop this project from there. Could we be 100 miles away and still do this project? Yes, I think we could, but we would be losing the next level of efficiency.
It seems like there are several levels of efficiency here:
- Developers and users work together, as in XP. This can be extremely good, except some users can't control themselves or their requirements, and I think XP can turn into a nasty, expensive spiral.
- Developers and users are just down the hall from each other. For the project we're working on currently, I think this would be ideal. Not too far, and not too close.
- Developers and users are 300 yards away. This is too far, because most developers won't pick up the phone or walk this far, unless there is a formal meeting called.
- Developers and users are 30 miles away. At the moment I don't see the difference between 300 yards and 30 miles.
- Developers and users are 100 miles away. I suspect this is the next step, because people won't travel this far every week. Videoconferencing should come into play somewhere around here.
- Developers and users are 1,000 miles away. Again, videoconferencing is needed. A couple of exceptional communicators are probably also needed.
It is my belief that physical proximity is important, and plays a key role in how a team should be managed. When I say a "team", I mean not just the team of developers, but the users of the software, the project managers, and the sponsors.