Working asynchronously
There is a lot of debate about distributed and co-located teams, but I think that the crucial distinction is not one of geography but the style of working: whether it is synchronous or asynchronous.
A synchronous working style is one where some of all of the team has to regularly stop what they’re doing, meet and discuss and agree on the next steps together, and then get back to work implementing those steps. These synchronous “join points” are frequent, unavoidable, and built into the structure of the work.
An asynchronous working style is one where the entire team rarely, if ever, gets together for big agreements and discussions, each individual team member more or less works on their own and at their own pace, with collaboration and agreement being handled by asynchronous mechanisms such as e-mail and shared online documents.
With these definitions, geographic location and working style are largely independent. It is possible, and even common, to have a team that sits together in an open cubicle arrangement and yet works mostly asynchronously. Conversely, it is also possible to have team members geographically strewn, and yet having to synchronize frequently.
Working asynchronously certainly enables the team to be geographically distributed, or telecommute, or maintain flexible hours.
The asynchronous style centers around shared artifacts, with each team member gradually accreting layers and complexity onto those artifacts. The most common example is commits to a source code repository. Other examples: code reviews (which just collapse down to e-mail), shared online documents with multiple editors and commenters. Team members usually have multiple related threads of work going on simultaneously, so that if one is blocked on input from someone else (for example, if you are waiting for someone to review a document, or comment on your code), another thread can be picked up to make forward progress.
Of course, most of us will recognize our team’s style as a hybrid of synchronous and asynchronous. But the trend towards the asynchronous style is clear and strong.
Most software companies work asynchronously, even if team members sit next to each other. The common picture is one of an open cubicle farm, with everyone wearing large headphones. It is pretty common to use instant messaging with the person two desks down, rather than actually talking to them, especially if they have the big fat “do not disturb” sign that is the headphone.
One sign of things being asynchronous by default is that I find it archaic, even rude, when someone insists on calling me on the phone. It is an unnecessary imposition on my time, and breaks my flow. Why can’t you just e-mail me?