What Problem Does DevOps Solve?
Learn about the challenges with the waterfall software delivery model and how DevOps helps overcome them.
We'll cover the following
Anyone new to the software industry might be surprised to learn that, a few years ago, development teams focused primarily on writing and testing code. Later, they would transfer the control to the operations team, much like in a relay race. The operations team would be responsible for deploying the code to production and monitoring the deployment.
Waterfall model
This methodology of software delivery is called a waterfall model, where the software lifecycle’s different phases are performed sequentially. This is much like a relay race, where one team hands off the control to the next after completing their task.
The focus was only on delivering the project, and there was no focused effort to monitor the running software and consistently incorporate feedback to improve its quality. Applications developed in this style are what we call large monolith applications today.
Challenges with the waterfall model
Anyone who has worked on any such projects must be familiar with the critical focus areas of such projects. These areas include the following:
- Manual business process in every phase of software development and delivery.
- Detailed documentation at every phase.
- Strictly following the plan proposed by the management.
- Avoiding customer engagement during the development cycle.
The deployment and operations teams worked in their silos. Some organizations experienced conflicts of interest between teams, as the development team would like to push the code to production sooner. In contrast, the operations team wanted to hold the production deployment to ensure code quality and follow the defined business processes. This lack of common interest between two groups has resulted in many projects missing deadlines and teams not delivering all the required features.
So, it's very common for a project following the waterfall model to encounter the following problems:
It consistently misses deadlines with cost and time overruns.
It has poor software quality due to a lack of proper testing methodologies.
Developers are not developing a prototype to demonstrate to the customer.
End users typically have to wait long enough to view the results and often get unexpected results because of poor communication between them and the software engineers.
An enhancement or new feature addition is a costly affair.
Long deployments typically start on a weekend and might stretch across multiple days as configuration and merge issues are progressively ironed out.
It has an increasing technical debt. Like financial debt, technical debt is something a software project accrues due to the wrong choices made by architects, developers, and testers. The longer we take to address the technical debt, the costlier it becomes, like a financial debt that grows in time and keeps accruing interest. This downward spiral eventually jeopardizes the project and the customer's trust.
Introduction to DevOps
The lack of coordination and communication resulted in the emergence of DevOps in the mid-2000s. Its purpose was to foster collaboration among development, QA, and operations teams working together to meet customer deadlines and increase customer satisfaction.
Here is the formal definition of DevOps from the Atlassian website:
DevOps is a set of practices, tools, and a cultural philosophy that automates and integrates the processes between software development and IT teams. It emphasizes team empowerment, cross-team communication and collaboration, and technology automation.
So, it’s no longer a relay race but a three-legged race, where communication, coordination, and collaboration play a crucial role. DevOps is not a technology. It’s a methodology that enables faster application development and delivery. In some companies, the development and operations team may be merged into a single team. This team will tightly collaborate with the testing and security teams. So, DevOps enables companies to deliver new features at lightning speed, which eventually helps them compete in the marketplace.
Today, companies use many DevOps methodologies like Scrum, Kanban, and Agile. Though there are many different methodologies, the underlying principle is to keep the development and operations teams together right from the requirements collection, creating user stories, developing application sources, testing, deployment, and customer validation. A cultural and mindset shift is one of the cornerstones of a successful DevOps implementation.
Another critical cornerstone is reimagining how companies do their software development and deployment. Companies have adopted cutting-edge architecture styles like microservices that enable large monolith applications to be decoupled and to develop an application made of multiple smaller modules that the project team can independently develop, test, and deploy. This architectural shift has allowed companies to rethink their development and deployment strategies. If companies were doing 10 to 15 deployments per year at the most in a waterfall model, today, some top companies are performing multiple deployments daily.
The third and essential cornerstone for a successful DevOps implementation is the ability to automate the phases that make up the software delivery lifecycle. Imagine we have rearchitected our software project but still rely on manual communication to get notified once the development team has completed their work. What if the tester who is supposed to read this email communication is on vacation? The entire testing phase gets delayed, which eventually delays the software delivery. So, paying attention to automation is key in delivering multiple daily deployments.
Core DevOps features
Some of the benefits of adopting DevOps include the following:
- A focus on test-driven development where the testing has been given utmost importance even before developing the source code. The ability to quickly find software bugs through test-driven development will result in high-quality, stable, and continuously improving products and environments, leading to faster time to market.
- In Agile project development, the customer is constantly kept in the loop, and any deviations from the expected results are communicated instantly to the development team. The earlier in the development lifecycle we find a bug, the lower the cost of fixing it. This constant feedback helps lower the overall project cost.
- It has increased customer satisfaction because they are constantly updated.
- Automating infrastructure provisioning has been one of the cornerstones of DevOps. Developing infrastructure as code is where we no longer manually deploy hardware but deploy them by writing code. This concept will more accurately and efficiently manage our development, QA, and production environments. Once the infrastructure provisioning is automated, the teams can enjoy high availability and scalability.
- Another critical feature of DevOps is enhanced security. With policy as code, we can automate the compliance policies and ensure consistent configuration management.
- Leveraging DevOps to make frequent releases enables smaller enhancements and features to be released consistently. This means the customer can see the requested changes more quickly in production. With smaller changes being released to production, there are no production deployments that run for the entire weekend.