The DevOps model has been frequently credited in recent years for the continued success of the top-performing software companies, but what exactly is it?
The term “DevOps” stands for Development & Operations. DevOps practices are equal parts tools and systems and equal parts philosophy and company culture, allowing companies to deliver new and innovative products faster than companies operating under classic principles.
The DevOps Model and What Came Before
To better understand why top engineering talent today rely on the DevOps model, it is critical to understand the software development processes of the past and how DevOps iterated on these older approaches to form the fastest and most efficient model to date.
Waterfall: The Classic Approach
In the past, traditional software development processes typically followed the Waterfall model, where each phase of software development followed a sequential pattern, flowing from one to the next.
The Waterfall model looks like this:
(Define requirements →) Design → Write code → Test → Deploy
The linear nature of the Waterfall approach to software development results in separate, distinct processes with little communication between the teams assigned to each element. Each phase must be completed before the next one can begin, ensuring the process follows the initial plan with as few errors and issues as possible.
For instance, deployment only occurs after extensive testing, yet, testing can only begin after the code has been written in full, which must follow the initial design plans and requirements.
Although very plan-oriented, this approach is rigid and unable to adapt to rapid changes. The development and testing teams are what the industry refers to as “siloed”: they are compartmentalized, with little communication between each team.
For example, programmers assigned to code writing may have to wait weeks before their build is tested and deployed. However, once the application reaches the testing stage, the code writing phase is over; there is no going back to write new code during testing, outside of fixing bugs and issues discovered by the testing team.
This approach to software development essentially forces the teams assigned to each phase to get it right as early as possible, as there is little room for revisions.
In the pre-internet era, this approach made sense; software delivery relied on fixed media (floppy disks, cartridges, CD-ROMs). Therefore, it had to be as bug-free as possible before reaching the shelves.
Agile: The Iterative Approach
During the 1990s, new and more dynamic ways to develop software became viable. Although its underlying principles were used as early as 1995, one of the most well-known new methods is Agile, first outlined in the Agile Manifesto, released in 2001.
- (Define project requirements →) Design → Write code → Test → Deploy → Collect feedback
- After collecting feedback, if the project does not meet all needs, start a new iteration from the design phase, and repeat until the project meets all needs and requirements.
If the Waterfall process can be illustrated using a straight line or a cascade, the Agile process resembles a series of loops going through each phase in sequence.
Under the Agile software development model, projects frequently go through multiple successive iterations. Each iteration addresses a specific problem, feature, or function until the software meets all requirements and all issues discovered during testing and feedback have been fixed.
As Agile team members, software engineers collaborate more closely, breaking the project down into smaller tasks and addressing each one continuously. This approach also relies on customer interaction and feedback as an integral element of software development, emphasizing user experience, flexibility, and adaptability.
After reaching the initial release, Agile teams may continue development and release further iterations, distributing them to customers in the form of patches and updates. Although software releases under Agile are faster, the main drawback of this development method is that it demands a high level of commitment, constant interaction, and time to function correctly. Any deficiencies in these areas impact software quality negatively.
Agile is also highly susceptible to scope creep, tempting development teams to constantly integrate new ideas and features with each iteration, resulting in an ever-changing, never-ending project.
DevOps: The Recipe for Success
It is critical to understand that while the DevOps model is new, it builds on the foundations and positive aspects of Agile. Both methods follow the same overall principles (fast delivery, iterations, adaptability), but DevOps has more benefits and is better suited for modern software development challenges.
DevOps model flowchart:
- Development: Design → Write code → Test → Release → Send to Operations
- Operations: Deploy → Operate → Monitor → Send to Development
If Agile is a circular loop, then DevOps resembles a figure eight, with one half representing Development and the other half symbolizing Operations.
Under the DevOps culture, developers and operations teams collaborate without limits or barriers, eliminating the “siloing” phenomenon that kept them traditionally separated from one another and creating new careers in the digital economy.
Some companies and environments may not possess separate development and operations teams, relying instead on integrated DevOps teams. Each team member is a DevOps engineer in these environments, cross-trained to fulfill both roles (the “You build it, you run it” principle).
DevOps maintains the speed and rapid delivery of new versions and iterations of Agile while being more reliable, scalable, and secure.
DevOps Best Practices
The five key practices of the DevOps model are as follows:
- Continuous integration and continuous delivery (CI/CD)
- Infrastructure as code
- Monitoring and logging
- Constant communication and collaboration
Continuous Integration and Continuous Delivery (CI/CD)
CI/CD is an application delivery method relying on two core principles: continuous integration (build, test, merge, and deploy new code as frequently as possible, using automation where applicable) and continuous delivery (automatic testing and deployment of all new code).
In other words, CI/CD is a pipeline encouraging smaller, more frequent code changes, making it easier and faster to hunt and fix bugs, improving overall software quality and reliability.
The DevOps model is ideal for creating and developing microservices: small, purpose-built applications designed to fulfill a specific task. Microservice architectures have replaced traditional, monolithic applications, as they offer more flexibility and better scalability.
To understand how microservices work and why they are essential, compare software development to manufacturing. A monolithic application is comparable to a single, large, generalist factory that designs, assembles, and paints products.
In contrast, a microservice architecture is comparable to a series of multiple, smaller factories, each performing a specific task; one factory designs and prototypes, another assembles parts, and yet another paints them.
Infrastructure as Code
The DevOps model encourages software engineers to provision, configure, and manage infrastructure using code instead of manual processes.
In other words, under the Infrastructure as Code (IaC) principle, a software engineer can deploy, configure, and manage various relevant infrastructure resources (e.g., servers, virtual networks, data storage, services, databases) using code instead of relying on manually installed, internally managed resources.
In other words, IaC allows software engineers to automate IT infrastructure, increasing the development speed and adaptability while decreasing reliance on dedicated IT hardware specialists.
Monitoring and Logging
Like Agile, the DevOps model relies extensively on collecting and reviewing end-user feedback. It provides precious information for development teams to fix potential issues, improve user experiences, and enhance the application’s overall quality.
Metrics tools, statistics trackers, and other forms of data logging are critical ways to collect feedback and measure an application’s performance. Although manual feedback collection and review is still frequently used, monitoring and logging tools automate the process and provide a faster, more convenient way to obtain certain types of information.
Communication and Collaboration
The DevOps model is not just a way to write code and develop software more efficiently; it is a cultural shift and a suite of corporate solutions designed to address modern software development challenges. DevOps encourages constant communication and shared understanding, breaking down the traditional barriers between development and operations teams.
The DevOps model fosters innovation, more efficient technology, entrepreneurship, and a culture of transparency and communication, encouraging a mutual understanding and a shared responsibility of the software.
OSPE Gives a Voice to Engineers
The mission of the Ontario Society of Professional Engineers is to provide a voice to the engineering profession in the Province of Ontario. The OSPE represents all members of the engineering community and all specializations, including students and graduates.
If you want to make a difference and kickstart your engineering career, an OSPE membership can bring you numerous advantages, such as scholarships, networking mentorship programs, and advocacy opportunities.