ABIS Infor - 2011-10
Agile development and Offshoring
For more than a decade now, Agile proposes more efficient (and thus cheaper) ways of producing software. And so does offshoring. Do they meet or do they clash?
Agile Software Development
Agile is a common name for various lightweight development methods, insisting on short iterations and frequent delivery of working software, continuous customer involvement, and small self-organizing development teams, that can respond quickly to changing requirements. Popular examples are Scrum (concentrating on the project management aspect, with e.g. daily stand-up meetings aka Scrums) and Extreme Programming (concentrating on the programming itself, with accents such as 'pair programming' and 'test-driven' design).
As an alternative to the classical 'waterfall' approach, Agile has proved to be effective for many projects (although maybe not the biggest and most mission-critical ones).
One of the main success factors of Agile is the close cooperation within the development team (as well as with the business representative): take a small team (about 7 persons) and put them at work all in the same room, so that everybody picks up the most and misunderstandings come quickly to evidence, which reduces the need for extensive upfront documentation and project management ceremony -- whiteboards and post-its will do most of the job.
While Agile tries to cut down the amount of labour, offshoring tries to cut down the cost of labour and has succeeded to do so for many classical waterfall projects (e.g. with local analysis & design, and offshore programming). When offshoring fails, the blame often goes to the 'distance' between the local and the offshore parties: geographical, linguistic and cultural distance as well as distance in time.
So, if distance is already a challenge for waterfall, will it even be a greater one for agile? Distributed agile teams will definitely require some more ceremony, tooling and artefacts, compared to co-located teams.
There are many true agile measures to reduce the distance:
- Use short iterations (e.g. 2 weeks).
- Use all possible means to facilitate communication: wiki, webcam, videoconferencing as well as e.g. dedicated Scrum project management tools.
- Make sure both local and offshore parties know enough English to really communicate (not just tourist English...).
- Use daily status meetings.
- Use automated testing.
- Use continuous integration: every bit of produced code should not only be unit tested, but be integrated by a continuous build process.
- Exchange 'ambassadors' between local & offshore team to build trust and understanding (if affordable).
And if all the previous does not help enough, you could consider nearshoring instead of offshoring: that may cut the distance (but probably not the cost).
Want to find out more about Scrum and Agile? Take a look at http://www.abis.be/html/en1590.html.