Just a short post about what collaboration means in agile software development. It means people working together at the same time on the same task, with continual discussion going on. Pair Programming is the epitome of collaboration. The people do not have to be co-located. I have had very good pair programming meetings using screen sharing technologies, such as Skype. You need to share a screen and audio.
Collaboration can involve more than two people, of course, but two is ideal. It can be any activity, not just programming. Pair story writing, pair test plan writing, pair domain modeling, and so forth, can all be collaborative. The key is that two people are working on one problem together at the same time. Those are the conditions for rapid, rich communication. The opposite model is people sitting in cubicles working on pre-decomposed problems by themselves. Some independent thinking is worthwhile. But complete independence or dependence on written materials simply isn’t as effective. Look up some of the research. Collaboration, as I’ve defined it, is very productive. The idea that people working separately on different parts of a complex task will be more effective, due to a ‘division of labor’, was taken apart years ago by Fred Brooks in The Mythical Man Month. The reason is clear: communications requirements reduce the efficiency of division of labor for highly complex tasks, such as developing software.