Integrating Agile Development and DevOps Practices
First, let’s talk about DevOps
An initial DevOps definition was provided by Penners and Dyck to be: “a mindset, encouraging cross-functional collaboration between teams – especially development and IT operations – within a software development organization, in order to operate resilient systems and accelerate delivery of changes”. This definition provides some insight into what DevOps is, but it often leaves something to be desired as even the authors acknowledged its need to be expanded upon with the input of practitioners to provide insights into a more precise definition.
Through study of primary and secondary data including semi-structured interviews and literature such as blogs, trade journals, articles, and various other online writings, a more clear definition can be reached. With writing of Lwakatare, Kuvaja, and Oivo in “An Exploratory Study of DevOps Extending the Dimensions of DevOps with Practices”, the authors were able to define a set of goals aligned with DevOps practices and identify some of the practices themselves. These goals included reduced response time, reliable and high quality software, and unified workflows through transparency and collaboration. These goals can also be expanded to include advanced automation and the evolution of traditional roles.
The aim of these practices is to support fast-paced changes as software is developed and delivered, break down organizational silos to help encourage collaboration, and to provide the advantages of a supportive working environment for teams.
What about Agile Development?
These goals in DevOps may sound familiar to those who are familiar with Agile Development methodologies. Some of the driving forces behind these methodologies are to quickly respond to changes, build workflows to be responsive to uncertainty, and allow teams to provide cross-functional support. Many Agile Development practices focus on collaboration and organization of work.
Agile Development is often referred to as a mindset with its values and principles defined in its Agile Manifesto. Often a team’s culture will be built around a shared understanding of practices or conventions that everyone agrees to follow. There are various frameworks and possible applications of Agile Development including Scrum and XP that guide teams towards an Agile culture that can be customized to fit a specific team’s needs. These practices are even being applied generally to project management as a means of providing a general guideline for creating a team environment that is adaptable and built to continuously provide progress towards the goals of the project.
Bringing it all together
The cultures between DevOps practices and Agile Development can align in a way to build effective, responsive teams. With some attention to the specific needs of the projects and team members, some foundational steps can be taken to build a culture that can consistently provide high quality software, fast deployment and a coordinated effort.
Creating effective meetings
One focus of both Agile Development and DevOps practices is the regular team meetings. Some possible practices to implement would be to establish a regular space for team meetings. This can be either physical or virtual, but the important part is the setting, which includes creating a standard time and place where these meetings will happen.
DevOps emphasizes the breaking down of silos when creating these meeting settings, so it would be wise to ensure that any team that may interact together is hosting these meetings in a way that members can easily attend cross-team meetings as needed. Not only does this allow the team member to be involved in both their own and another team’s meeting, but also allows the team member to open communication between the teams by reporting back any relevant details as needed in a timely manner.
Agile Development focuses on ensuring that the team is meeting regularly, often daily as is the case with stand-ups, where each member is sharing their contributions, obstacles, and intentions going forward. This slim agenda that is often used for these daily meetings also enforces creating a consistent setting for the teams to communicate and increase their collaboration.
This focus on creating a consistent and open setting for meetings aligns with the goals of transparent workflows, reduced response time, and ultimately results in higher quality development. The culture created through the cooperation of these teams can extend to the broader needs of the project and encourage others to reflect on how their workflow can be adapted to encourage effective communication, team organization and higher quality work.
Iterative and incremental development
One of the focuses of Agile Development is to provide a regular pace of development with the strategy of moving from one step to the next with regular smaller contributions. Over time, this will build out a project while providing consistent additions of usable functionality. This regularity provides a repetitive nature to the workflow of various activities and allows for reflection on previously implemented work as it is built upon. This promotes the continual improvement of the project as it is enhanced and revised intentionally.
It can be difficult to coordinate this kind of improvement without the involvement of the whole team. Revising work can cause unpredictable results if those revising it are only privy to a smaller understanding of the broader project being built. This is where the integration of the DevOps practice of collaboration can provide added benefits to the Agile Development methodology. Teams are encouraged to learn “beyond” the work they are directly contributing to by attending cross-team meetings and by being directly involved in each others’ work. Adding this increased involvement and responsibilities allows for higher confidence when contributing to the revision and enhancement of the project.
While it may be easier to notice a team member that is less involved in contributing to the addition of new functionality, it may not be as obvious if the team is tending to neglect revision of previous work. This may not seem like an urgent issue, but increased attention to revision can result in continually increasing the quality of work, both previous and future, by allowing for greater reflection to how the functionality can be improved.
Another important aspect of improving the overall functionality and quality of work is encouraging the early involvement of operations in understanding the requirements, along with involving the development team in utilizing tools to implement infrastructure-as-code. This can result in a better coordinated effort in effectively meeting requirements and greater consistency between production and development environments.
Retrospective
As was briefly mentioned, one important aspect of improving the quality of work is to intentionally provide opportunity for reflection. While the focus between Agile and DevOps may appear different in this regard, both implement practices that emphasize the importance of proactively reviewing what was done and how to use that knowledge to improve in the future.
Some of the practices suggested by DevOps include monitoring and utilization of metrics. Through the creation of a workflow of data monitoring, a set of insights can be gleaned and communicated to the team through feedback. Monitoring can be done to support both development and operations teams as they determine the parameters and how their data is important to the understanding of the work being done.
The collection of metrics can provide insights into what is ultimately important about the work being completed. These metrics often focus on business value and can provide incentive as teams are able to see “tangible” results. This gives a high-level insight into what impact the team is making over time. It also helps to drive the team in making changes to the system, improvements, and important decisions that may have been otherwise difficult to conceptualize or identify. Progress can be seen more easily and the team can use the opportunity to review any possible areas for future revision as they gain insights into the overall picture and see the results of their collective work.
While teams may choose to reflect on a more regular basis at a smaller level, Agile Development encourages specific time to be set aside with a focus on a broader retrospective. As time passes and milestones are reached, it can be beneficial to implement the metrics, monitoring, and any other relevant reviews into a broader analysis of significant aspects of the project. This is another opportunity to break down the barriers between teams and gather together to learn about what has been accomplished and how that progress contributes to the broader perspective of the development of the project.
Reflections on building a new team culture
While these two topics are often presented separately, their practices can be integrated across teams in a way that encourages mindfulness surrounding how a team works together to effectively produce continual progress on a project. With the establishment of some of these practices a team can learn how to better understand the specific work they are involved in, along with a broader knowledge of the activities happening around them.
It may not be obvious at first, but an important lesson in how to build an effective team can be learned. Both Agile Development and DevOps practices are the results of reflecting on how previous practices have failed to effectively navigate a team through changing requirements and the growing scope of development. They also encourage a level of customization and selective adoption of practices to suit the specific needs of the teams involved. It may seem intimidating to some to start changing division of responsibilities, how teams are structured, and how workflows are managed, but these changes can be made selectively in a way that supports specific needs.
These ideas were built through reflection of previous methodologies and intentional revisiting of practices to develop a better way of doing things. If the bigger ideas presented seem to be more than what a team is willing to implement, then it may be time to review the current practices and consider what small changes can be made to provide the biggest impact in increasing the effectiveness of current practices. This key idea of reviewing and improving the work being done will provide a path towards integrating practices needed to more effectively achieve the goals set out for the project.
Resources
Want to read more? The Agile Alliance provides more information about What is Agile? Agile 101 and the research about DevOps practices can be found in the ICSEA report An Exploratory Study of DevOps Extending the Dimensions of DevOps with Practices.