“We work remotely”: How to run agile in remote and distributed teams
Does Agile apply to remote team management? A few principles of Agile seem to be in contradiction with the complex reality of distributed teams, but make no mistake – virtual teams can be just as Agile as in-house teams.
Gone are the days of traditional waterfall management with fixed dates and prices. Software development teams are now built according to Agile principles.
By now the majority of project managers and software developers know how to operate in an Agile way, but a lot of them are faced with a new challenge – maintaining Agile standards in remote and distributed teams.
While most principles from the original Agile manifesto are easily applicable in both co-located and remote teams, a few of them pose serious challenges. In this article we will focus on two things:
- Cultivating good coding principles to maintain high quality output
- Creating a healthy culture based on efficient communication
1. Cultivating good coding principles to maintain high quality output
This relates to 3 of the original Agile principles:
- Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
- Continuous attention to technical excellence and good design enhances agility.
- Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
When distributed teams are involved, remote software developers that you add to your team might have different definitions of what a finished task is, and varying experiences with submitting finished jobs. This leads to situations where managers aren’t sure what stage the project is at, and developers don’t know what to work on because they don’t know what’s already been done.
That is why distributed teams require uniform definitions of what is a finished task, and how it should be submitted, so that everybody involved can be on the same page. A standard process for task management is:
- Write code
- Create pull request
- Review code
- Run tests
- Merge code with the right branch
This eliminates doubt, and enables developers to consistently deliver quality code on time.
Adhering to a new development process might not be easy for all developers, and team leaders should be prepared for additional work required to make this change as easy as possible for them. This means educating the whole team on required quality and delivery standards, equipping developers with the tools they need, being a consultant and mediator.
Because efficient collaboration in distributed teams is harder to achieve, it’s important to think ahead in terms of task distribution. Different teams should be fully equipped to work on separate elements of the project, and given tasks that don’t require close cooperation with team members in other time zones.
It might be useful to create a starter’s guide for new developers jumping into the project, including recommended development environment, tools, along with standards and procedures that are required. One of the most important procedures are for troubleshooting and reporting bugs, because nothing slows a project down more than combing through the codebase to find the cause of a problem.
Reviewing code is one of the most important things in efficient software development. To streamline this process it’s a good idea to use automation solutions for easy reporting, task management, and bug tracking. The additional challenge posed by remote teams is to make sure that the same tools and systems are used across teams in different locations.
Finally, something that can better enable teams to “Welcome changing requirements, even late in development, […] harness change for the customer’s competitive advantage” is organising retrospective meetings and trial software runs, preferably in the company of business people as well as customers (when it’s possible).
Meetings like these can help everybody involved in the project understand the complete vision of what they’ve set out to achieve. They provide an option to gather feedback, and decide what changes need to be made.
Okay, but how do you run a meeting with teams distributed across different time zones?
2. Creating a healthy culture based on efficient communication
This point relates to another triad of Agile principles:
- The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
- Business people and developers must work together daily throughout the project.
Communicating across multiple locations is significantly harder than walking over to a coworker that’s sitting a few desks away.
A shared office space enables faster communication, but it also provides fertile ground for a lot of unnecessary distractions. So even though remote work, by its nature, contradicts the “only face-to-face conversation” Agile principle, it might actually be more effective. Especially if you consider that knowledge work, like programming, requires long periods of focus in order to achieve the best results – and a loud office environment generates a lot of interruptions that can cause developers to lose precious focus.
Meetings with remote developers can be efficiently organised with the help of video conferencing tools. While we’re on the subject of tools, what are the best ones for communicating with remote teams?
- Slack – a classic, everybody knows it, everybody loves it, the amount of integrations is astounding and it can be a very useful tool for not just communicating, but also automating the development process
- Project wiki – an important addition, because maintaining a repository of important project decisions and code updates makes it easier for remote teams to get on the same page by having access to crucial information as soon as it’s published
- Skype / Hangouts – video conferencing tools that make it possible to run meetings with people that are on the other side of the globe
- Jira – a tool for tracking progress of project tasks
- Quip / Google Docs – these tools make it possible for relevant team members, regardless of their location, to easily collaborate on documents
While we’re on the subject of tools – is email a good communication channel for remote and distributed teams?
Yes and no:
- Yes – if everybody on the team follows the same development process and email has a specific role assigned to it, like sending updates that aren’t time-sensitive to other teammates.
- No – if it doesn’t have a defined role and is used and treated differently by every other team member
Video conferences including all team members should happen at least once a week. They don’t need to have a strict agenda, they can be a simple virtual get-together where people can talk about what inspires them, annoys them, or how they’re work is going. Just the act of seeing and talking to other people on the team helps build trust and establish common ground.
However, some things can’t be conveyed through a video conference or instant message. That’s why in long-term projects it’s good to organise get-togethers to help team members get to know each other.
The two main challenges with Agile remote teams are maintaining high code quality, and building a culture based on efficient communication. These things are significantly harder to achieve compared to in-house teams, but they’re not impossible.
Thanks to endless automation options and communication tools, project managers can manage virtual teams with all the benefits of agile methodology.