Software development teams are traditionally located in the same (or nearby) physical office location(s). It’s useful for these teams to work from adjacent cubicles (or offices) as the close proximity facilitates collaboration, mentoring and joint code reviews. In fact, the increasingly popular agile software development methodology lists the following in its Agile Manifesto: “The most efficient and effective method of conveying information to and within a development team is face-to-face conversation”.
I won’t debate this particular point, but I do think that the trends are pointing towards distributed (vs. centralized) software development teams. Some of the factors that are causing this trend:
- Outsourcing and off-shore development – while the core software development team may be based out of a single physical location, corporations are increasingly leveraging off-shore development – both for its lower costs and its ability to tackle ad-hoc product requirements and requests.
- Working from home / telecommuting trend – whether it’s a child’s doctor’s appointment or the local outbreak of the H1N1 virus, workers are spending more and more time getting their work done outside of the office. Ever walk into a large software development shop’s offices during the afternoon? You probably noticed that more than half the developers’ cubicles were unoccupied.
- Good developers can be hard to find – your software development team’s most attractive developers may be located half-way around the globe. Talented developers are hard to find these days – so why not extend your team’s depth but bringing on remote workers? As an example of a distributed team working together on a large project, consider the development of the Linux kernel – according to the Linux Foundation, “over 3700 individual developers from over 200 different companies have contributed to the kernel”.
- Software developers and product owner in separate locations – it’s not uncommon for the software developers to be in a different location than the business or product owner who’s driving the product and project’s requirements. As the internal customer, the product owner is obviously a key member of the team.
With all of these factors at play, it seems reasonable that alternatives need to be in place when face-to-face meetings are not possible. And I have good news on that front – with the emergence and maturation of virtual worlds / virtual meeting technologies, there are plenty of solutions available.
Some technologies available to distributed software development teams:
- Virtual Meetings – e.g. WebEx Meetings, GoToMeeting, Adobe Breeze, etc. These technologies allow users to share their desktops and participate in shared whiteboards. With the desktop sharing, this allows one developer to “look over the shoulder” as another developer codes. The New York Times recently published an interesting article on pair programming – with virtual meeting technology, the “pair” can reside in separate physical locations. A shared whiteboard may not be useful for writing code together – however, it could certainly come in handy during the pre-coding stage, to map out an architectural diagram or outline a software program’s flow chart. For a no-cost alternative, developers can interact with audio and video on Skype, which now includes a free desktop sharing feature.
- 3D / Immersive Technologies – these solutions provide similar features to a virtual meeting, but add a layer of 3D and immersiveness. There’s Second Life, of course – and there are also solutions tailored for very specific enterprise use. Options include Teleplace (formerly Qwaq) and Forterra Systems. Teleplace offers a solution called Program Management that seems well suited to the distributed software development team – it offers text chat, VoIP chat, video via webcam, shared documents and shared applications (all in an immersive 3D environnment). Similarly Forterra’s OLIVE platform enables collaborative meetings, training and more.
In this “flat world” that we now live in, I expect software development teams will increasingly collaborate virtually.