Agile and DevOps, the new age development methodologies have now firmly cemented their place in the software development landscape. In fact, 2017 was touted as the ‘year of DevOps’ where, by some accounts, 50% of software development organizations had already adopted DevOps or were planning to implement it soon. With the ongoing push towards digital transformation and the growing demand to make product development leaner to achieve higher organizational performance, DevOps and Agile have been able to help organizations achieve faster throughput and greater stability. Along with these new development methodologies that are based on a foundation of collaboration, distributed teams are also a tangible reality of the software development ecosystem today. With product development teams located in multiple locations, how can you ensure a culture of collaboration? The key to this lies in effective communication.
So, how should these distributed teams communicate with each other to realize the full benefits of these development methodologies?DevOps and Agile are focused on continuous feedback, continuous integration, and continuous implementation. They encourage in-person interactions to foster collaboration and clearly, any delays in communication will serve as a roadblock. Physical separation inhibits close interactions and relying solely on documentation is an imperfect solution, DevOps and Agile thus need some modified mechanics, to ensure that distributed teams can work well with one another.
For implementing DevOps and Agile in a distributed environment, team maturity becomes critical. Such teams have to consist of people who are proficient in the demands of these development methodologies and their workings. Additionally, there has to be a high-trust environment that allows team members to work autonomously. Creating such a team involves putting multi-disciplined groups of stakeholders – the developers, testers, and operations personnel, in a manner that enables them to not only manage the tasks assigned to them but also instills a sense of ownership that prevents ‘siloization’ – the ‘that’s not my job’ attitude.
Evolved decision making
Decision making has to be more evolved in a distributed team environment. Team members must have the powers to make informed decisions without having to summon committee meetings every time. To implement this effectively, decision-making boundaries should be charted carefully so that all the decisions made are in the best interest of the software product, and bad decisions, if any, can be caught and mitigated in time.
Having a certain amount of time overlap can also contribute to the success of distributed Agile and DevOps teams. Of course, it can be counterproductive if you have to wait an entire day to get a response from a colleague who is in a different location. After all, DevOps and Agile are about increasing the speed of delivery. All obstacles impeding this have to be scaled promptly. Working in different shifts, ensuring that there is reasonable overlap between roles that need close collaboration such as infrastructure engineers and developers etc. are some ways these challenges should be mitigated.
Using the right set of tools for collaboration
Leveraging the right tooling stack also enables collaboration between distributed teams. While communication is only one part of the picture in the DevOps and Agile environment, organizations also need to ensure that their teams have the right tools to share large files and binaries, presentations, PDF’s diagrams etc. along with the source code. Tools that allow real-time updates, are simple to use, allow for the sharing of ideas, and help create proper and complete documentation, become essential in allowing collaborative visualization that avoids shared confusion.
Open up the black box
It becomes essential to open up the black box that separates ‘us’ and ‘them’, with ‘them’ being the distributed team. You might not be seeing the distributed team physically but this distributed team needs to be seen as ‘one team’. To avoid this, the ‘us’ versus ‘them’ mentality has to change. Product owners have to take the ownership of ensuring that the distributed team members get equal access to crucial information about the product.
Establish a communication rhythm
‘If you don’t know where you’re going, any road will get you there.’ In a distributed environment, the road taken can contribute directly to the success of the project. Creating a smooth communication rhythm that ensures a structured flow of information is key. This creates team alignment, provides opportunities to remove impediments, and provides the right direction to stay on track. This ensures that teams can work efficiently and continuously – irrespective of their geographical location.
Clear product backlog and separation
It is of utmost importance that in distributed DevOps and Agile teams, the team members have a clear idea of what they are working on and that there is a clear separation of work. Defining project backlogs and detailed iteration-level planning become key so that everyone has clarity on what they are working on. This ensures that teams do not have to spend a lot of time on calls to identify the work that needs to be done. Confusion in understanding the scope of the story is also avoided. In a very real way, this prevents teams from stepping into each other’s codebases and functionalities and prevents duplication of work as well as team conflicts.
We believe that distributed DevOps and Agile is easier to achieve if everyone is willing to extend themselves to help one another. It is important to give individual teams the freedom and flexibility to operate within their own space. Just like Agile and DevOps are adaptive methodologies, organizations have to be adaptive too. They must work continuously to figure out, modify, and innovate within these principles to create an environment that establishes a shared understanding and common vision for their distrusted teams to buy into. That achieved, products can be delivered faster and at a higher quality – and no one will say no to that!