We’re talking application development here, though many of the challenges and solutions are applicable across solution domains I’m assuming that you have an understanding of agile practices and how a typical project might use them
Its not about throwing requirements over the wall Involvement of the business in the delivery process, defining requirements, being in constant touch with what the delivery team is doing Moving forward as one team
Constant feedback – both from business and from the delivery team How does this feedback happen ? A more formal route is via application Showcases and team retrospectives Informally, by reviewing mockups, test plans
Earlier testing, reducing cost of change Easier to prioritize requirements From business idea to deployable application is a smaller cycle than using other methods
A Distributed model means you have delivery teams in multiple locations, its not just offshore
Access to a global pool of talent
With teams in different time zones across the world, the IT needs of businesses can be addressed almost 24x7
And finally, a favourable economic impact contributes to the decision to go distributed
Lets look at the various challenges associated with operating globally distributed following Agile methods
How do we build up a common understanding of project goals, business needs, functional requirements People are at the center of all Agile practices –
Its important that the people on your teams have the right values and attitudes Multi-cultural experience – those who have lived abroad or have experience in other cultural settings Ability to travel Build relationships
Role of a proxy customer collocated with an offshore team is critical for faster feedback cycles on business priorities and requirements Role of onsite coordinator – business, other teams Sometimes critical to have a technical role on site who communicates to the offshore team at all levels Role of iteration manager Full complement of roles in each location – for example, don’t expect all the testing to be done in the offshore location, this will increase your feedback cycle
Encourage and plan for rotations between locations – builds respect and trust Experiencing the benefits or pain of working in a particular location
From project planning to requirements analysis, testing
Agile projects are kicked off with collaborative and iterative workshops to get the big picture Perform the inception in the offshore location During the inception, get the team from the offshore location to present their understanding back to the rest of the group team that attended the inception gained a good understanding of the business goals and domain. This knowledge was passed on to the rest of the team through domain and technical sessions - visible process maps
How does collaboration happen among different roles work especially when some may be in different locations ? Example of a requirement flowing from the business to development and testing Story kickoff with the developers and QA who signed up for the story where the business context, scope and acceptance criteria of the story were explained BAs test the application on developer’ machines to give quick feedback – saves the SME’s time
such as test-driven development (TDD) and continuous integration (CI) play an important role in feedback cycles for development teams. Tests, for example, are an effective way of communicating design intent and requirements to distributed team members. More social-engineering practice "Collective Code Ownership" is also critical to distributed agile teams. Encourages trust to work off same codebase – pre-requisite are high levels of unit testing and CI Build pipeline with staged builds so that you get feedback on your code immediately You don’t want the entire team waiting on your broken build – which reminds of the social discipline of not leaving a broken build for the other team to fix
Agile practices involve a lot of testing and testing early Also a large focus on automating tests so that the team becomes more efficient Testers create test scenarios QAs created test scenarios for the stories and got them validated by the BA or SME Creating of functional and performance testing environments offshore to ensure the feedback loop is closed
High levels of communication are required for distributed teams and this means that you should not lose sight of the work-life balance After all, we want the teams to run at a sustainable pace Other practices like cross-pollination help in surfacing these issues and making others in the team sensitive to them The major pain area being common meetings which needs to be scheduled keeping the other time zones in mind – share the pain - Representatives dialling in Mindful of weekends, local holidays and festivals Example : You may not want to schedule Friday morning team meetings in a western timezone when you have an offshore team since it often means they will have to stay late on a Friday evening
Knowing where the team stands is important – more so when you have teams split across locations
Source control repositories allow teams to work off same codebase – but you need a test and CI setup in place to allow people to work without the fear of disrupting the rest of the team’s work Phones, Instant Messenger, VC all enable teams to stay connected and keep the information flowing Keeping physical card walls synchronized across multiple locations is a painful activity - Tools like Mingle from ThoughtWorks have taken real world agile metaphors such as the card wall and digitized it Email - daily status update mails were sent by the offshore IM and by the onsite coordinator to keep the team informed of story, defect and release status. Iteration Notes on a daily basis in the project wiki Team leave plans were shared in the project wiki Information radiators – example : we setup one which was a stuffed toy that would clap in the customer’s office every time a story was signed off
Regular showcases & retrospectives provide visibility across locations Larger formal retrospectives are very tough to do distributed – end of iteration feeling the team’s pulse can be done Give bad news early as possible – we can try and fix things only when we know about it
Especially in greenfield app dev with high customer touch, stabilize the team and then move offshore So what I mean is – try and get to a point where the velocity or throughput per iteration is predictable The team that you put in place to reach this point of stability needs to include a good mix of folks from all locations This means a higher cost, but the long term benefits of a team that can more easily hit their stride are worth it
Identify the roles that are going to be critical for your project – BA, Iteration Manager, Lead Tester etc Right choice of the people Invest in rotations to build trust