Enterprises across the globe have implemented the Agile methodology of software development and reaped its benefits in terms of smaller development times. Agile has also helped streamline processes in multilevel software development teams. And the methodology builds in feedback loops and drives the pace of innovation. Over time, DevOps and continuous delivery have emerged as more wholesome and upgraded approaches of managing the software development life cycle (SDLC) with a view to improve speed to market, reduce errors, and enhance quality. In this guide, we will talk more about Agile, how it grew, and how it extended into DevOps and, ultimately, continuous development.
A walk down memory lane: The days of the ‘Agile’ boom
Remember the Agile Manifesto? That’s an ideology that literally changed the landscape of software development back in 2001, and continued to do so for several years. Agile methodologies focus on teaching developers to break down software into several small chunks called user stories. This helps accelerate feedback loops and helps make sure that software products are aligned with the needs of the market.
Small software startups were the early adopters of Agile methodology for software development. The methodology focused on helping teams work efficiently, quickly, and smartly, and this helped startups compete with their giant but lethargic competitors. Slowly, the idea spread to market leaders, and everyone was onboard the Agile ship. That’s when issues around scaling emerged.
Agile: Too many ‘speed to market’ promises not delivered
Whereas Agile showcased uncontestable advantages in terms of helping developers create quality software code in short iterations, its impact was muffled when viewed in terms of the entire software development lifecycle. Processes such as functional and user acceptance testing, deployment, and release, apart from several other fragmented processes in the SDLC, created several silos that just didn’t let the benefits of Agile percolate through.
So, Agile software development methodology delivers speedy development in short interactions, but doesn’t deliver the most desired increase in speed to market.
The inception of continuous delivery
In the book “Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation,” author Jez Humble addressed a lot of the challenges we talked about earlier. His idea focused on treating the entire software development life cycle as one big process, and focusing on automating as much of it as possible. The ideas were liked and adopted by startups and large enterprises alike. This was a massive boost for Agile initiatives and helped put software delivery in the position of a strategic business initiative. Agile helps developers deliver quick and quality work, whereas continuous delivery is much wider in scope.
Agile and continuous delivery — creating IT challenges
With more focus on making Agile an enabler of wholesome improvements in SDLC, it became an enabler of new processes and technological breakthroughs that helped automate and streamline big chunks of the SDLC. The idea of “continuous delivery” is centered on producing codes in very short cycles, in a manner so that the software can be released to production anytime. This approach aims at reducing the time, cost, and risks of software deployment by allowing several incremental changes in a basic, bug-free software.
In the continuous delivery model, several code check-ins are made daily. These checked-in chunks of code are integrated many times a day and incorporated into a shared trunk. This creates several small releases. While this delivers great advantages in terms of helping developers deliver work quicker, the creation of so many releases creates major issues for the operational aspects of IT. Downstream quality assurance and operations management teams, for instance, have to do a lot of work to make this a success.
Agile and DevOps: They’re not meant to be separate silos
Several organizations have embraced already DevOps, and that’s great. However, there are many that just put basic Kanban and Scrum practices in place and assume they’re on the path to DevOps. Also, there are many that just understand DevOps in context of practices such as continuous development, continuous integration, testing automation, and infrastructure automation. The trouble is, enterprises need to look at Agile and DevOps as two separate means of improving SDLC practices. Agile is about breaking down walls, not creating new ones.
DevOps extends the scope of Agile beyond code check-ins and includes systems and operations. DevOps suggests that operational stakeholders also need to be a part of the cross-functional team that includes designers, developers, and testers. DevOps is about breaking down the walls separating software development and delivery operations, enabling a way for companies to deliver wholesome software-powered service, instead of just working codes.
Traditional Agile and continuous development compared
A misconception that mars the implementation of successful continuous delivery practices is that the model vouches for very frequent releases. Organizations even go to the extent of actually releasing multiple software code increments every day. Instead, continuous delivery talks about keeping software “ready for release”; it doesn't mean the software actually has to be released every so often. Whereas traditional Agile talks about shorter development cycles to make sure that the software undergoes a seamless release, continuous development is about developing the software in a manner that makes is ready for release at very short notice.
In continuous delivery, the team makes sure that its code is ready to be released to production even when the work is in progress. This is achieved via use of innovative coding practices using methods such as feature toggles. In contrast, traditional Agile is about reaching the end of development iteration and then preparing the code for the release. While both approaches make sure that the code base doesn't have incomplete stores at the end of an iteration, the approach is different.
Over all these years, Agile has helped software development practices look beyond fast development. It’s no surprise it has been extended to multifunctional processes such as DevOps and end-to-end automating such as continuous development.
Photo credit: Wikimedia