Introduction
To develop an application, there are set of steps that mints the project requirements into a live application. The need for an organized approach towards software development led to the adoption of two major software development practices:
Waterfall model (traditional)
Agile methodology (classical)
These software development approaches are also known as SDLC (Software Development Life Cycle).
In this article, we'll look at traditional software development approaches, the issues they imposed, and how we transitioned from these traditional practices to DevOps practices(modern).
Waterfall Model
Waterfall Model is also referred to as linear-sequential life cycle. It is a step-by-step approach towards software development where each phase must be completed before moving on to the next one.
It is the earliest SDLC practice. Each current phase is independent of the next phase leading to minimal collaboration between the separate teams and any required changes to final product will require restarting the SDLC.
A case study to visualize this will be an e-commerce web app built for a client.
Following the waterfall model, the steps to follow would be:
Requirements - Design - Development - Testing - Deployment - Maintenance
Requirements are gathered from the client, the web app is built, then taken to the testing phase to be tested, and finally deployed. After that, it is reviewed by the client. What if our client wants some adjustments like more functionality, animations or a different layout to attract customers to products on the e-commerce web app?
That would be a lot of mess because we just followed a linear approach, where going back to the previous phase/step is not allowed. The only feasible solution is to restart the web app development right from step one, which is the requirement then integrating client required changes in the requirement.
This shows how the waterfall model is an inefficient, time-consuming and rigid process that is not adaptable to changes into products/software.
Waterfall Model Design
The waterfall approach divides software development into pre-defined phases. The outcome of one phase acts as a sort of input for the next phase.
Advantages of the Waterfall Model
The waterfall model gives a clear, defined set of steps to follow.
It is good for smaller projects where requirements are well-defined with no need for future adjustment.
Disadvantages of the Waterfall Model
Inflexibility: The linear structure of the waterfall model makes it difficult to incorporate a change once a phase is completed as it’s not easy to make changes along the way. Changes to the software would necessitate restarting the software development process.
Delay: Since each phase must be completed before going to the next one, there’s a period of idleness for team members in other phases.
We became very uncomfortable with this time-consuming linear approach, we wanted a system that is adaptable to any change our client desires, where we wouldn't have to start over to implement changes and that led us to the Agile Methodology.
Agile Methodology
Agile methodology is an iterative approach toward the software development life cycle making it more flexible and adaptable to changes.
Unlike the sequential process of waterfall, Agile breaks the entire SDLC into a loop of small series of steps (plan- build - test - deploy) known as sprint. The product is developed bit by bit, feature by feature. At the end of each sprint, review is gotten from client and required changes are integrated at the beginning of the next sprint.
This way, Agile breaches the gap between clients and developers. Now let’s visualize Agile in action with our client's e-commerce app.
Following the Agile method, the e-commerce app is built into small chunks, which go through the development cycle of packaging, testing and deployment known as sprint. At the end of each sprint, feedback is gotten from users which is leveraged to integrate changes into the app (chunks of code). Then the app goes through the sprint again.
This loop process allows us to effectively integrate changes requested by our clients from every feedback into the development lifecycle while also shortening the time it takes for benefits to be delivered to users.
Some benefits of Agile Methodology
Increased flexibility and adaptability.
Faster delivery of software or products.
Improved quality of software.
Customer satisfaction.
Birth of DevOps
Now we’re able to deliver quality software faster but there’s still one issue left unaddressed.
Each team focuses solely on their tasks and sequentially moves the software (web app) to the next phase without any form of collaboration to ensure the software's success in the next phase. The next phase has little visibility of how the software was built in the previous phase. Most of the time, we say that there are silos (barriers) between these teams.
If a bug occurs in production mode, the operations team in charge of deployment and monitoring will blame the testing team for not thoroughly testing the app, while the testing team will point fingers at the developer's team for producing poor-quality code.
We can almost hear the dev teams saying, "We spent a sleepless night reviewing and testing our codes, the operations team is simply not doing their job." From this point, we can see that no team wants to take the blame; this is commonly known as the BLAME GAME.
This blame causes delays in products and the teams forget they’re all responsible for ensuring the product is a success. So, we decided to bring Development and the Operations team (including testing team) together, where these teams can together oversee the process in each phase and collaborate with enhanced communication at every phase in the development cycle. And that was how we birth DevOps.
DevOps bridged the gap between developers and operators. It is an improvement of Agile. It employs continuous integration, continuous delivery, continuous deployment and automated testing to release software more quickly with greater efficiency.
Lifecycle of DevOps and Tools.
The DevOps lifecycle is a set of phases involved in the software development process that incorporates DevOps practices to ensure delivery of high-quality software applications.
1. Plan: This stage involves planning the software development process. This includes identifying the objectives, requirements and resources needed for the project. Project management tools like Jira, Asana are used in this phase.
2. Code: In this stage, the development team writes code for the application and makes use of version control tools like git,svn or bitbucket to keep track of changes and manage the codebase.
3. Build: This stage involves compiling the code from codebases and building the application with the help of build automation tools such as Jenkins, Travis CI, or CircleCI to automate the build process.
4. Test: In this stage, the application is tested to ensure it meets the requirements, functions correctly and is free of bugs. Automated testing tools such as Selenium, JMeter, and Appium are used to automate the testing process.
5. Release: In this stage, the application is prepared for release to the production environment. Release automation tools such as Ansible, Puppet, or Chef to automate the deployment process.
6. Deploy: In this stage, the application is deployed to the production environment. This stage employs containerization and orchestration tools such as Docker, Kubernetes, or Mesos to manage and deploy the application in a scalable and efficient manner.
7. Operate: This stage focuses on application monitoring and maintenance. Monitoring and logging tools such as Nagios, ELK Stack, or Splunk are used to monitor the application's performance.
8. Monitor: In this stage, the team analyzes application performance and user feedback to identify areas for improvement. Tools used in this stage include monitoring tools like Prometheus, Grafana, and others.
Benefits of DevOps
Enhanced collaboration between developers and operations team.
Increased efficiency by automating processes and reducing manual tasks.
Greater scalability and availability.
Increased productivity of business.
Lowers the failure rate of new releases.
Conclusion
In this article, you’ve learned about traditional software development practices, their benefits, how we conceived DevOps from traditional practices, lifecycle and benefits of DevOps.
If you enjoyed reading, you could give a heart (up to 10). You can also connect with me onX (formerly twitter). Adios - DrIntech*✍️*