DevOps: What it is, What it isn't.
Tags: devops, sdlc, programming, beginners
Published: 2022-11-16 10:26:17

## Introduction

DevOps, SysOps, DevSecOps, MLOps, CloudOps, PotatoOps, are all catchy and trendy buzzwords that are circulating all over LinkedIn and the tech realm in 2022. A simple search for such keywords on LinkedIn will return thousands of people and companies "applying" to them one way or the other. 

Unfortunately, as with most trends, numerous definitions and variations arise, leaving the general public in confusion, creating irrelevant job positions and career paths, and leading to inefficient Software Development Lifecycles, further complicating everything!

In this article, I share my personal opinion on the matter, answering the following questions:

- What is DevOps?
- What are DevOps Engineers?
- How to apply DevOps in organizations?

## Background Information

Hi, my name is Nicolas, and I have been practicing DevOps since 2016. I was, and still am, heavily involved in applying DevOps for the companies I've worked with. In those 7 years, I worked with and advised for quite a few organizations ranging from small startups with a couple of services serving a small number of clients, to large enterprises developing and deploying absolutely complicated software solutions with even more complicated requirements.

Some of my most impactful achievements include:

- Building a multi-disciplinary DevOps unit, capable of deploying - almost - any type of software on any kind of infrastructure.

- Creating training materials and curriculums to transform junior and mid-level backend developers and system administrators into efficient DevOps Engineers. 

- Creating a University Course curriculum entitled "Introduction to Fullstack and DevOps Engineering", aiming to better prepare university students to the relevant technical and personal skills needed in the market today.

## Evolution of DevOps Solutions

A lot of things changed in those 7 years, especially in DevOps related solutions:

- Kubernetes is everywhere.
- Cloud Providers have hundreds of managed services.
- Continuous Delivery tools allow to easily automate everything.
- Infrastructure can now be created and managed through code.
- Multi-cloud solutions are a popular thing.
- Everyone wants to become a DevOps Engineer, and all the companies want to apply DevOps.

One thing did not really change though: There is no clear definition of DevOps. This article sums up my years of experience in the field, showcases my personal point of view regarding DevOps, and presents opinions on how to successfully become a DevOps Engineer and how to apply DevOps in organizations.

## Software Delivery Models.

DevOps is nothing more than a software delivery model, embracing today's available technologies and aiming to enhance the software development lifecycle. To better understand DevOps, it is important to understand the preceding models, namely the Waterfall and Agile models.

### Waterfall Model

![Waterfall Model](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l5miqatgp0vptln74mr9.png)

The waterfall model is one of the oldest software delivery models, introduced in the 70s. It divides the software development lifecycle into pre-defined sequential phases, each performing a specific activity, and must be fully complete before the next one can begin with no overlap between them.

With the current technological advancements and capabilities, this model becomes cumbersome and inefficient:

- The model employs rigid process, discouraging changes.
- Difficult to measure progress, due to the silo'ed mode of work.
- Deployments are slow and complex.

### Agile Model

![Agile Model](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s1zp3cuiznfx8klxy0yu.png)

The Agile model, formally launched in the early 2000s, provides a more flexible approach to deliver software. Unlike the Waterfall model, Agile promotes continuous iteration of design, development, and testing throughout the software development lifecycle of the project, bringing down silos between the different phases, and shortening releases cycles from months to weeks, in what is called "sprints". As the name states, the model increases the agility through continuous planning, improvement, team collaboration, development, and delivery, and responses to change.

Operations teams are left out given that infrastructure and operations did not require the same agility at that time.

### DevOps Model


![DevOps Model](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hx2bxjxf03a663e939gk.png)

The birth of cloud computing, with its on-demand delivery of IT resources, revolutionized software delivery. Before, software development and delivery required an iterative approach, while the infrastructure remained rigid.

With the adoption of the cloud (2006 onwards), the need for owning and maintaining physical data centers was replaced by renting them out from cloud providers using different flexible payment models (e.g., Pay as you go).

Cloud computing came with several benefits, including but not limited to:

- **Agility**: Ease of access to a wide range of compute resources, on demand, allowing for the creation of complex infrastructure in minutes.

- **Elasticity**: Resource mis-utilization (over or under provisioning) are no longer a problem, especially with the ability to quickly modify the compute resources based on the varying needs.

- **Cost Saving**: The pay as you go model, and the elasticity of the resources permit the users to continuously optimize the costs of the compute resources.

With the adoption of cloud computing in software delivery, Development and Operations teams can no longer be siloed, as it is the case with the Agile model. As a matter of fact, the development and management of the infrastructure must now align with that of the application itself. 

DevOps is a bouquet of philosophies, set of tools & practices, that aim to decrease the cost, time, and complexity of delivering software applications, through unifying both the software development and infrastructure management processes.

DevOps aims to automate as many processes as possible to reliably and efficiently:

- Create and manage infrastructure resources.
- Release software changes.
- Perform necessary tests (e.g., Unit, Integration, Stress tests, etc).
- Automatically spin new environments seamlessly.
- Enhance system security.
- Ensure scalability.
- Improve collaboration.

In light of the above, **DevSecOps, SysOps, MLOps, CloudOps, PotatoOps**, are catchy LinkedIn words that can be all replaced by the term **DevOps**.

## DevOps: what it is, what it isn't!

Clearly, DevOps is nothing more than a set of philosophies and best practices to enhance the software delivery using today's existing technologies. 

Having said this, DevOps is not:

- Deployment of software on the cloud using the Agile approach (Most of today's understanding confuses this with DevOps).
- Creating software using the Microservices approach.
- Using Infrastructure as Code tools with no clear purpose.
- The adoption of unneeded automation tools in general.

Many entities attempting to apply DevOps might fall for the misconceptions listed above, but rather still apply, unknowingly, the agile model, but on the cloud.

## DevOps Engineers: What they are, and what they aren't!

The inability to truly define DevOps resulted in creating a lot of inefficient and weird job positions, that might not necessarily contribute to the Software Development Lifecycle. Worse, this can lead to further deteriorating the quality of the application and the lifecycle as a whole.

In light of the above, DevOps Engineers are not:

- Engineers who create cloud infrastructure. Those are **Site Reliability Engineers**.
- Kubernetes Gurus. Those are Kubernetes Gurus, not DevOps Engineers.
- Cloud Enthusiasts.

In brief, a DevOps Engineer is someone with enough skillset to bridge the gap between the development and operations teams, through:

- Creating the required infrastructure.
- Deploying the application.
- Providing Continuous Delivery Mechanisms.
- Automating all the processes previously done manually by the different departments: development, testing, security, etc.

DevOps Engineers must have a strong background in System administration and/or software development. After all, whatever you need to automate, you must be able to do it manually at first!

## How to apply DevOps in organizations

Applying DevOps in organizations is an easy concept, that is difficult to apply. As a matter of fact, DevOps entails the upskilling of all the stakeholders in a software company (Developers, QA, Designers, Technical Project Managers, System Administrators, UI/UX Designers, and business teams as well).

## Conclusion

DevOps is still a confusing term for most of the tech industry. Several definitions have been created, without clear standards and straight-forward value. 

DevOps is nothing more than a culture that further enhances the software delivery lifecycles.

Becoming a successful DevOps Engineer requires you to have a strong knowledge in both development and operations.

Applying DevOps successfully within an organization entails the upskilling of all the personnel in the organization, all-the-while applying the necessary set of tools and processes that promote collaboration, communication, and automation.