Agile development methodologies focus on highly collaborative team environments that are continuously planning, developing, testing, integrating and delivering functional software. In such environments, constant feedback and communication are critical and there are small margins for errors and delays. In the ideal scenario, an Agile team would be collocated to allow for face-to-face interactions between all team members, because this is historically thought to be the most efficient and effective method of conveying information. However, in today’s global marketplace, collocation is not always possible and this is the situation I have found myself in as a tester on an Agile team that spans two coasts and operates in three different time zones.
Here are some of the things I found were important to consider while working on a distributed Agile team:
- Being mindful when choosing resources. Not everyone is cut out for the rapid pace or the collaboration requirements of a distributed Agile team. Flexibility and the ability to multi-task are critical to the continuous delivery of Agile development and people who are overwhelmed by multiple, often competing, tasks could flounder. Resources should also be excellent communicators who are able to speak confidently and without hesitation. They should be comfortable with raising a hand when something is unclear and willing to accept help instead of trying to figure out everything on their own.
- Strong leadership is crucial. Every team needs good management but with the multiple inherent challenges associated with distributed Agile teams, it’s especially important. Schedules need to be well communicated and maintained. Tasks need to be clearly outlined, assigned and followed up on. Team members must be engaged and communication barriers should not exist between team members. The most important task for an Agile leader is removing bottlenecks and roadblocks to keep the path clear for all team members. These are all typically tasks that belong to a project manager, but might also fall on a development or testing lead.
- Respecting time differences. Agile methods make use of frequent team meetings for daily check-ins, requirement refinement, client demos and retrospectives. Having all team members present at these meetings is important to eliminate the need for reiterating important information, which can quickly consume productive time. Maximum team participation is also vital to ensuring the team shares a sense of purpose and the same level of commitment. Creating a schedule that is mindful of the different working hours of all team members can be tricky but, once in place, it is an invaluable asset.
- Making use of technology. Teams that share a work space make use of face-to-face interactions, white boards and sticky notes, but there are many collaboration tools available that distributed teams can use for communicating. Skype and Google Hangouts are easy ways to stay in touch and also allow for group chats. Group chats enable everyone to see what questions are being asked and what answers are given, ensuring the team is all on the same page. Tools like Google Drive make it easy to share documents and files that need to be updated by multiple team members. Screen sharing and screen capturing tools make it easy to communicate complicated functionality and bugs. There are many innovative online tools out there for easy collaboration, which one is used is not important. The key is to find the tools that work best in your situation and make using them a habit.
- Removing roadblocks. Making sure team members have access to all the tools they need seems like an obvious component but this could be anything from having the right login credentials for a collaboration tool, to having admin access to back-end systems. Often, as a tester who is in a differing time zone than the development team, I have found myself waiting for someone to make a small configuration change to my environment. Once I pointed out how easily I could make the change myself, I was given access. Having team members who can perform certain cross-functional tasks can be an easy way to save unnecessary downtime.
- Creating a strong team dynamic. Ensuring there is not an “Us vs. Them” mindset is imperative to the success of any team. It could be on-site members vs. off-site members, or developers vs. testers, but any mindset that pits a team member against another could cripple the effectiveness of the team. Team members should be encouraged to get to know each other to better understand the challenges each are facing. Creating a culture of inclusion and trust between all team members, regardless of role or location, will improve team cohesion, which will in turn improve the effectiveness of the entire team.
With the prevalence of both distributed teams and Agile development methods on the rise, we will inevitably run into more and more distributed Agile teams. While it can be challenging environment, it’s definitely not impossible to overcome the perceived obstacles. It just requires more careful considerations and critical thinking. With the right people, the right mindset and the right planning, a distributed Agile team can definitely be successful.