The days of complete compartmentalization in software development and implementation are possibly drawing to a close. The development team’s umbrella is becoming more inclusive and is demanding more collaboration from individual stakeholders as delivering high-quality software within decided timeframes is now a non-negotiable project demand. Along with this, we cannot discount the fact that there is an increasing need for innovation on technology-driven work. These developments are some of the main motivators that brought about change in the software development ecosystem and gave way to the rise of new methodologies such as Agile and practices such as DevOps.
Agile development started mainly to solve some of the problems that organizations faced using the traditional development methodologies. Agile development, characterized by shorter sprints and frequent testing, puts greater focus on collaboration between teams, frequent releases, and takes a more streamlined approach to software development. The rise of Agile solved the communication problems between product management and the ‘business’ side of operations. In Agile development, there is a great focus on customer collaboration and the development team. However, the development team and operations team work in complete isolation from one another. The Product Owners focus on the product features and the customer and they don’t necessarily worry about the operations side believing that the ‘product should just work’.
Since there are continuous releases of software versions, the interface between development and operations gets increasingly stressed leading to the rise of more bottlenecks. Further, the shift towards a more service-oriented world demands a greater collaboration between development and operations staff throughout the development lifecycle in a SaaS environment. DevOps aims to take the principles of the agile methodology beyond boundaries of the code and incorporates it to the entire delivered service.
As more and more applications are becoming web applications, the software development lifecycle does not end with shipping the product to the customer. There are a number of components that need to function seamlessly to ensure the success of the product. Databases, application containers, web servers, etc. provide the environment that enables the software to run. As more number of these components get included in the product, the interactions of the development team with the operators of these components becomes increasingly relevant and important. The software provider thus, at some point, becomes the ‘operator’ of the software that they developed.
DevOps simply aims to bring order into the world of application development, testing, scaling and also monitoring. It takes a more unified approach to software development taking into account the need of the entire application lifecycle by adopting a more collaborative relationship between development and operation teams. This results in faster development cycles, lower production risks, fewer bugs, increased visibility and faster fixes. DevOps thus calls for greater automation, more collaboration, an easy to navigate organizational structure and also a culture change to some extent.
To enable DevOps in the agile we have to consider a few things:
- Continuous engagement of the operations team with the development team throughout the lifecycle of solution development. This helps in thoroughly understanding the business vision, release timelines and helps in determining the solution’s technical and scheduling feasibility to validate the Ops related requirements. The DevOps teams should be equipped with the knowledge of release, service and change management, environment provisioning, application deployment, as well as automation and tools.
- The DevOps team has to help the Product Owner understand the non-functional requirements (NFRs) so that the development team can take these into account when creating the final product architecture and solution. Technical aspects such as deployment and support platforms, vendor dependencies, third party interfaces/ applications required to achieve the final solution should be taken into account and communicated to the appropriate stakeholders.
- When implementing DevOps in agile, it is also essential to take into account product backlog related to NFR’s, the tech requirements for deployment and support, performance requirements, rollback and roll forward guidelines and most essentially, security and firewall needs.
- It is recommended to implement the use of configuration management tools to create and replicate infrastructure based on codes using Infrastructure as a Code (IaaC) concept – this enables the developers to deploy the same application on different platforms without the need for rework.
- DevOps team should be involved in Sprint backlog planning and daily stand-ups, Sprint review, Scrum and plan alignment to ensure that any dependencies, feature alignments, product improvements are realistically accounted for. The continuous engagement and collaboration of the development team with the operations team also keep the ops team abreast of which functionality release timelines. The ops team can then help the development team in planning the release schedule with greater accuracy and can help the development team ship the product faster.
- There should be greater automation to minimize the need to coordinate activities between infrastructure and development teams.
- Testing assumes a very important position when combining DevOps with Agile as, along with functional testing, there is an additional premium placed on performance and load testing making ‘Continuous Testing’ as important as ‘continuous development’.
- Implementation of security controls takes up prominence when implementing DevOps in agile development. Since organizations may need to bypass some security controls during the software development process when implementing DevOps, aligning security measures such as team segregation, ITIL services, role-based access to systems and codes, access restrictions, compliance with industry security standards, etc. have to be implemented.
It is good to have defined metrics to measure the effectiveness of using DevOps in Agile to enable successful enablement of multiple releases to production in short time spans. According to the Scrum Alliance Organization, some of these could be :
- Percentage of Release date adherences
- Percentage increase in the number of releases
- Time taken for release to production
- Defects attributable to platform/support requirements
- Percentage of NFRs met
We can see tangible gains when the Agile Development methodology marries DevOps. The 2015 State of DevOps Report by Puppet Labs highlights the fact that implementing DevOps enables IT organizations to deploy 30 times more frequently with 200 times shorter lead times. DevOps looks like the secret sauce that puts agile development on steroids.
However, when combining DevOps with Agile, organizations must evaluate the necessity to do so by identifying the number of application or builds they require in a week. For example, DevOps implementation is great when it comes to an organization that needs to update their application frequently while ensuring no service disruption (Etsy, for example, updates their site every 20 minutes without causing any service disruption to its over 20 million users). However, organizations that need only two or three changes in a year might not need the DevOps advantage.
Since development and operations are directly tied to an organization’s bottom line and profits, it only makes sense to adopt the DevOps movement to deliver high-value products to the customer.