TL;DR
Agile and DevOps are two greatly overused terms. They denote a cultural shift in how companies manage the software product development lifecycle.
Both terms defy the definition and breed mythology. The current ‘Agile Vs DevOps’ trend may give an erroneous impression of a paradigm shift to the post-Agile world.
Essentially, Agile is a replacement for the Waterfall model in software development. And DevOps is an extension of Agile beyond development to operations. One process, two dimensions.
But is it worth merging Agile and DevOps? And how to have the best of both worlds?
Let’s zoom in and catch the devil in the details.
Agile replaces Waterfall
An attempt to standardize software development by analogy with manufacturing and construction industries failed big. Building software is nothing like constructing a house. Waterfall business value was dubious simply because:
- plans and specifications change and the scope creeps;
- sacrificing quality for deadlines creates mediocre products;
- absence of feedback and code review makes waste;
- systemic changes are costly.
Read also: Agile vs Waterfall Project Management: Which one is Suitable for Your Project?
To build a product of value
Agile fixed Waterfall failures and used the best practices of Lean. Since business value is discovered iteratively, the requirements change was welcome. Agile became a lean software development methodology of incremental delivery. Based on continuous customer feedback, it prioritized business value in the software development life cycle (SDLC).
Agile Manifesto outlined the priorities and 12 principles of software development.
The principles of Agile and Lean found implementation in many software development methods and practices: XP, SCRUM, Kanban, SAFe, LESS, DAD.
To develop faster and leaner
The approach has been a game-changer for software development. In the ‘plan – build – run’ chain of SDLC, Agile strengthened the ‘plan-build’ link: tightened the customer-developer communications, reduced the development time, addressed bottlenecks, and improved product quality.
Wait… but what about the post-release life?
There’s still a gap between ‘build’ and ‘run’. New features were shelved for months after the release. Business value only happens when the product is released – and deployed.
What’s more, Agile adoption created confusion, bottlenecks, and uncertainty in operations due to forever evolving requirements, scarce documentation (typical of Agile), and frequent software updates. Too serious a problem in a highly competitive market. For a product to excel, its timing, quality, and safety have to be perfect.
DevOps bridges development and operations
DevOps is ‘a set of practices intended to reduce the time between committing a change to a system and the change being placed into normal production while ensuring high quality’. It uses a number of automation techniques for development and deployment.
To deliver value to the end-user faster
Just like Agile discovers true customer needs and creates business value incrementally, DevOps saves costs by shortening release cycles, automating the integration and deployment pipelines, and solidifying collaboration between teams.
Two major time-eaters in the SDLC are infrastructure setup (as software engineers have to develop the necessary web components) and acceptance testing between deployments. Infrastructure setup and subsequent adjustments in the traditional Ops may take 4 times as much time as with DevOps, just because Infrastructure as Code requires less time than manual adjustments after every iteration. Four times’ faster releases are no joke!
So DevOps (introduced by Patrick Debois for Agile 2008 Conference in Toronto) wasn’t meant to render Agile obsolete, but to put Agile principles to practice.
Because the technology is ripe
The timing was just right, too. DevOps may have appeared out of necessity, but also thanks to technological advancements. The principles outlined in Agile and Lean asked for tech enablement.
Virtualization and automation allowed defining infrastructure as a code. Switching from a lengthy manual setup to the infrastructure as code is cost-efficient and bridges the gap between Dev and Ops environments. Infrastructure is dynamic and inseparable from development, evolving together with the product’s updates.
Cloud hosting was advancing alongside. Cloud servers and load balancers use API to deploy the system in the cloud, which makes it scalable, globally accessible 24/7, safe, and hassle-free. The benefits of scale, redundancy, and backup are hard to resist.
Next came Docker that enabled the next-level virtualization compared to an ordinary VM. The Docker container limits resource consumption, it has its own address space and can be run on remote machines.
Kubernetes enables managing a large number of Docker containers. This allows building an application on a microservices architecture.
As complex problems ask for complex solutions
Most modern systems are supported on a daily basis throughout their lifetime (bug fixes, feature releases, system enhancements, scaling). While typical enterprise releases on average once every 9 months, top companies like Amazon deploy as often as 23K times per day! There’s no way you can keep up with the competition on cumbersome manual deployment, low code test coverages, the lack of tracking issues, or logging operability tasks.
With the globalization of online businesses and the unbundling of monolithic apps into complex systems on microservice architecture, the agility of both Dev and Ops is a way forward. DevOps organizations benefit from interoperability and reliability as the developer platform is always supported, backed up, and up to date.
DevOps with its cornerstones being infrastructure as code (IAC), continuous integration (CI), and continuous deployment (CD):
- is a perfect use-case for infrastructure automation;
- meets the need for speed;
- answers the demand for security and compliance;
- wins the war for talent.
DevOps vs Agile: myth-busting
There’s little unanimity on how Agile and DevOps co-relate. Some see DevOps as a subset of Agile, others see DevOps as ‘agile done right’, yet others associate DevOps with automation. Let’s bust some common myths.
Myth 1: Agile is dead. Long live DevOps
Myth: DevOps is Agile 2.0. DevOps (as a better version of Agile) addresses the siloed environments created by Agile teams.
Fact: DevOps does not replace Agile, nor is one better than the other. Agile is a development methodology and DevOps is a business philosophy. Though DevOps was born out of necessity for better communication between Dev and Ops and faster delivery of a product of excellence, the two hit the target differently. Agile teams effectively meet user needs, they tackle functional requirements in a very consistent manner. DevOps, on the other hand, focuses on the new feature last-mile delivery without interrupting user experience. DevOps caters to non-functional requirements, such as:
- Agility and adaptability to evolving customer behavior, regulatory environment, emerging technologies.
- Responsiveness to user feedback and change requests (new product features, bug fixes, incident management).
- Speed and frequency of delivering new product features, bug fixes, a high deployment frequency.
- Workflow efficiency by automating key process segments and increasing collaboration between teams for greater information flow.
- The customizability of the SDLC behavior based on changing contextual and situational needs.
Myth 2: DevOps is Agile with tools
Myth: if you’re using GitHub, AWS, Jenkins, you’re doing DevOps.
Fact: mastering tools is critical. But it doesn’t stop at that, nor is it enough. Changing the mindset to excellence being ‘everybody’s business’, ensuring consistent environments across teams, creating learning opportunities, improving management processes, getting rid of manual intervention (especially in testing and deployment), and understanding the real needs of the end user – all of those do not happen overnight. It’s work in progress, orchestrated and enhanced by tools.
Myth 3: Agile is about value. DevOps is about automation
Myth: if you’re writing automation scripts in Chef and Puppet, you’re DevOps.
Fact: while value stream automation is a top priority in DevOps, it’s not a goal in itself. And it should be approached wisely or you’ll be automating waste. DevOps is disciplined incremental elimination of bottlenecks. When servers are provisioned with a single command and the needed environments are deployed using preconfigured Docker containers, the software delivery pipeline becomes much more efficient, ensuring the process predictability and great user experience. Automation in development, testing, infrastructure, and deployment is a result of collaborative work and good design. Besides automation, DevOps prioritises metrics & reporting, audit & compliance, and broader integration.
All in all, DevOps works where Agile doesn’t and DevOps adds agility beyond development.
Difference between Agile and DevOps
It’s not entirely right to think that DevOps is a mere extension of Agile to Operations. Technically, Operations is the ‘last mile’ to the user, but since the DevOps process isn’t linear (think of the ‘eternity’ symbol of DevOps), the difference between Agile and DevOps models is much more complex. Let’s compare Agile and DevOps.
Agile | DevOps | |
---|---|---|
Key objective | Creating a working prototype or build amidst the realities of changing needs and requirements | Continuous value delivery throughout the SDLC |
Scope | Limited to development | Covers development, operations, and quality assurance |
Approach | Focused on incremental product development based on user feedback and business needs | Focused on accelerating delivery of working software to end-user, cross-team communications & assistance |
Cadence | Short-term, iterative sprints to develop preset features | Continuous balancing of the developed unit with the overall system reliability. Faster releases with minimum failures |
Implementation | Has a range of tactical frameworks like a XP, SAFe, LESS, DAD, Scrum, DSDM | Practises continuous integration, delivery, deployment. Infrastructure as Code |
Team dynamics | Smaller teams of various skills working together to meet a 2-week goal | Bigger cross-disciplinary teams nimbly acting on tasks at hand, with a large picture in mind |
Shift-left principles | Leverage shift-left | Both shifts left and right |
Automation | Automation isn’t in focus. Tools are optional, only used as part of Agile – DevOps collaboration | Automation is at the heart. Efficiency hinges on automated deployment tools. Communication, configuration management and code branching tools are widely used, too |
Communication and documentation | Non-documented process sharing. Lo-fi methods of interaction. Regular face-to-face updates on goals and priorities | Detailed instructions on software deployment in the form of specifications or designs to all the teams |
The differences between Agile and DevOps methodologies create an illusion of two separate independent processes, but in fact, they are two parts of a whole.
If I were to describe how DevOps is different from Agile to a five-year-old, I’d visualize a train. The wheels are Agile, the body – DevOps. The wheels go round in a 2-week plan-design-build-test cycle to release new functionality. The body then ensures it is delivered to the end-user smoothly and promptly, then fetches user feedback. Without DevOps, Agile would idle with a little forward movement or pull out all the stops with lots of ramp-up and ramp-down. Just because Agile is best at cyclic iterations and DevOps – at moving things forward and shuttling end-to-end.
How to make Agile and DevOps work together
Both DevOps and Agile offer a structure and framework that can speed software delivery and minimize risks. Instead of weighing the DevOps versus Agile methodology, the question, actually, is how to have the best of both worlds.
Capitalize on the benefits of Agile and DevOps
Agile has proven itself efficient with functional requirements of product development in the situation of uncertainty and forever evolving business needs. Still, non-functional requirements are more often than not swept under the carpet till later. As a result, the system becomes vulnerable and brittle. This is where DevOps excels.
Best of Agile
- Workflow productivity tools. Agile project management tools (Jira, Trello) streamline Kanban or Scrum requirements, tasks, and progress.
- Incremental value delivery. Time-boxed development methods (e.g. sprints) and prioritization techniques create a consistent development cadence.
- Meeting customer needs. Agile’s short ‘build-measure-learn’ cycle allows getting immediate customer feedback and prompt product improvements.
Best of DevOps
- Faster time-to-market. Faster and more reliable releases are possible through timely bottleneck resolution and risk aversion.
- Cross-team collaboration. Cross-functional teamwork results in efficiency, a better work environment, and improved responsiveness to market demands.
- Routine automation. Turning mundane processes into programmable and automating the workflow drive efficiency.
Rehash Agile processes
Regardless of whether you have a DevOps engineer, DevOps team, sysadmin, support, automation engineer, CI/CD team, or other people responsible for the process, you’ve got to make them part of the Agile routine.
- Shift left. Include operability requirements (scalability, deployability, monitoring the service, security and compliance) into a Service Backlog.
- Rewire user stories. A simple ‘what…why…’ format will do.
- Optimize sprints. Find an optimal balance of ‘planned’ and ‘unplanned’ velocities in a sprint.
- Redefine ‘done’. Update the old ‘passed UAT’ to a new ‘ready to go live’ or ‘in the live environment’.
- Rethink Scrum. Operability is the only true value. So Scrum Master should now remove impediments in development, as well as delivery and maintenance. And the Product Owner has to understand its benefits: time and cost-saving, increased performance, reduced risk, and improved reliability.
Adopt important DevOps practices
Strengthen the DevOps and Agile relationship by adopting automation throughout SDLC. Set up the DevOps pipeline:
- continuous integration of new batches of code into the centralized mainline;
- continuous delivery of new builds to the testing environment and pushing them into production;
- continuous testing and building automated unit tests from the start, not just at the pre-production stage;
- infrastructure as Code, where containerized apps can be deployed to production environments that are described in a clear declarative language, where servers are provisioned, configured, managed, and commissioned through code commands, not manually.
Contrary to Scrum micromanagement policy whereby individuals report of the daily work done and bottlenecks met, DevOps fosters shared responsibility and cross-team competence towards the bottleneck elimination and product excellence.
Rethink the roles of Devs and Ops
One shouldn’t mix DevOps as a general process with DevOps concrete functions, performed throughout the SDLC by a DevOps engineer or any other person responsible. In the end, it’s up to you to decide who performs them as long as the process is set up and operational. How do the roles break down in your organization?
Sprint planning is impossible without understanding the ratio of Dev and Ops load against the important milestones in the software development lifecycle.
SDLC stage | Dev | Ops |
---|---|---|
Define and plan | Elicit requirements, create Product Backlog, plan Iteration Zero | Plan DevOps workflows for iterations, release management, and issue tracking |
Code, build, and configure | Plan sprints, groom Product Backlog, prioritise requirements, create user stories, develop and review iteration deliverables | Manage and merge source code |
Test | Create testing plan / scripts, perform unit testing, generate report | Create testing plan / scripts, execute performance and load testing, generate report |
Packaging and pre-production | Plan release, identify above-the-line items, create / groom release backlog | Containerize, store artifacts and image, deploy to staging, setup production environment |
Release, deploy, and orchestration | Manage change, approve release | Automate release, schedule orchestration, provisioning, and deploying into production |
Continuous management and configuration | - | Automate continuous configuration, manage configuration, implement infrastructure as code |
Monitoring | - | Report application performance and help identify UX issues |
‘DevOps’ as you can
Your organization’s unique characteristics and requirements largely determine the business process architecture. But regardless of stage or size, an organization is a living body in a forever changing environment. The only way forward is through system thinking, process improvement, and the culture of continuous learning.
Merging approaches can be painful. Luckily, both Agile and DevOps embrace self-improvement through feedback, flexibility, and agility.