One frequently stated “rule” of Scrum that I don’t accept is co-location — having the entire software development team in one place. The arguments are that co-location facilitates communication, speeds interaction, spurs impromptu discussion, and builds camaraderie. I suppose all of those things are true to some degree but it’s not as simple as having everyone together.
The environment matters
If you’re serious about co-location, the working environment becomes a big factor. Spreading the team around the building, even just a few cubical rows apart, dampens the advantages. In fact, six-foot cubicle walls counteract much of the claimed co-location advantage, even when the team sits in close proximity.
You could try having everyone sit on a big room, perhaps around a table or lined up along the walls. This eliminates the physical barriers but introduces the problem of noise — distractions. People will often wear headphones and listen to music to evade the noise — not exactly a useful approach to team building.
Major changes to any work environment will quickly translate into tens of thousands of dollars. That kind of expense will likely be difficult to justify as the productivity benefits are nebulous at best.
The virtual team concept can work
Given the physical, monetary and emotional obstacles to co-location, why not just leave people where they are? You’ll have the added advantage of being able to hire anyone in the world to be part of the team. (Beware of substantial time-zone differences, however, as these will introduce an additional layer of complexity.)
Making this work requires a focus on the concept of a virtual team. You’ll need the appropriate tools to be successful but chances are you already have some of these available:
- Conference call service (try a free service like freeconferencecall.com)
- Video conferencing (like Skype)
- Shared desktop software (like GoToMyPC or Webex)
- Wiki tools (like DokuWiki or SharePoint)
- Instant messaging (like Pidgin or Trillian)
- Shared documents (like Google Docs)
- eMail (but, of course, you have that already!)
The goal is to create an environment where anyone on the development team can engage any other team member at any time — just like being there. Also consider allowing phone calls, chats and conferences to be recorded as long as every participant agrees. This can be particularly useful when someone is diagramming at the whiteboard (or on their PC) and you want to capture the drawing and associated dialog.
Virtual software development teams really work and the cost savings and/or productivity improvements can be significant. Having the liberty to hire anyone, anywhere can speed the hiring process and accelerate projects. Giving the team some flexibility to work from home can be a great morale booster too.
Try to get the entire team together periodically; perhaps for release planning or major test cycles. Also, treat everyone equally. If you offer any perks to the team members stationed locally (e.g. free breakfast), be sure to offer something of comparable value to the remote members.
Software development teams don’t need to be co-located to be agile. It helps, but it’s not required.