Globally distributed software development has come long a way since the idea was pioneered by the open-source community. Today, companies are deploying teams across different locations and time zones as they seek to boost agility and cost efficiency, reduce time-to-market, and attract and retain top-quality talent. The adoption of distributed development has rapidly increased in the last decade amid the emergence of Agile software development methodology as a cornerstone of enterprise IT.
However, this transition is throwing up some challenges for product companies, who are struggling to ensure the processes and work culture of their distributed development partners mirror their product vision. These challenges, among others, relate to enabling seamless communication, coordination and collaboration between teams across time zones, offering transparency, and resolving cultural differences among various stakeholders.
So, how can organizations like yours address these pain points in distributed development to eliminate process inefficiencies, quality-related issues, and avert schedule delays? Here are six best practices you should implement to effectively manage your globally distributed teams:
1. Outline a common project goal
Distributed teams typically are concerned only about delivering their slice of the project as per the requirements, resulting in a lack of a unified purpose. You must, therefore, embed a common project vision throughout the organization and your partners by sharing the business goals, challenges and projected benefits with them. It’s better to over-communicate here rather than holding back on information, in order to make sure each developer sees the “big picture” and feels a sense of ownership about the project.
2. Refine requirements with visual inputs
For your development teams to deliver efficiently, you need to convey the requirements clearly, and in a consistent manner. Considering that face-to-face interactions–a common feature of co-located teams–are not possible in case of distributed teams, you should go beyond sharing user stories for framing requirements. For instance, developers would welcome visual, contextual inputs user experience, wire frames, graphical design and story boards that would help them link different user stories.
3. Drive collective, Agile design and development
For the intended software to be of the desired high quality, your teams should perform various activities, including sprint and release planning, and daily scrum, together. They should reach a consensus on the standards for design, coding, code reviews, defect tracking, etc. Moreover, you must never hand over a big project to offshore teams with a turnaround time (TAT) of several months. Instead, use short sprints that will let you track and review the deliverables regularly, and give swift feedback for faster iterations.
4. Adopt collaboration tools
Collaboration tools for continuous delivery, distributed source code management and other aspects of software development can significantly enhance the efficiency and productivity of your teams. You should adopt wikis, video conferencing and instant messaging platforms such as Skype, Google Hangouts and Slack that also enable desktop sharing, online live discussions, and a natural “escalation of communication”. As a case in point, a bilateral chat can evolve into a one-to-many conversation, or a voice or video call, and even screen sharing and collaborative content composition.
5. Foster continuous integration (CI)
One of the standout characteristics of high-functioning product development teams has been continuous integration (CI). For rapid onboarding of applications, you should set up a CI environment that facilitates automatic testing of any changes to the source code, and pushes it to staging or production. By keeping the code in a continuously “working state”, you will spot build defects immediately, and avoid the “big bang integration” trap at the end of projects that causes schedule slippages. This, in turn, will reduce the waiting time between your distributed teams, leading to enhanced mutual trust and increased productivity.
6. Chalk out a synchronized communication strategy
Collaboration between your distributed teams will not materialize unless you have a synchronized communication plan in place. Since time difference can hinder real-time coordination between teams, you should arrange meetings during the overlapping hours of different teams. Such interactions will ensure everyone can give feedback and propose new ideas for better, faster product development.You should also leverage Google Calendar and other shared calendars to monitor the upcoming local holidays in different regions, as well as the personal leaves of team members. Doing so will help you avert any unpleasant surprises, in terms of last-minute project interruptions.
According to Gallup’s State of the American Workplace report, 43% of employed Americans did a portion of their work remotely in 2016, as compared to 39% in 2012. Software development will be no different. Using distributed teams for programming is a trend that is only going to gather momentum in the coming years, as the “Gig Economy” gains more acceptance. It is up to you to figure out how best you can get the best out of a diverse, multicultural talent pool to achieve your core business objectives. Thinking globally and coding locally would be a good place to start.