What is DevOps?

Today I begin a new practice where I attempt to clarify my own thinking around various coding topics, by writing about them in a thorough enough manner that most laymen could understand the point I’m trying to get across.

A ways back I asked some of my more experienced developer friends to pose “interview questions” to me, as practicing answering such questions seemed an effective way to prepare myself for potential interviews. My friend Juan was kind enough to oblige, and he posed me the question: What is DevOps?

So today I take my first crack at answering that question. Since my goal is developing my own understanding and coding is all about optimizing efficiency, I’ll be heavily referencing the material and explanations written by other people. My goal is to find the shortest pathway to a sufficiently deep level of understanding, so whatever methods help me arrive there the better.

Broad strokes

First, a general overview. On Wikipedia, DevOps is defined as follows:

DevOps is a set of practices that combines software development (Dev) and IT operations (Ops). It aims to shorten the systems development life cycle and provide continuous delivery with high software quality. DevOps is complementary with Agile software development; several DevOps aspects came from Agile methodology. -Wikipedia

Agile methodologies are something I’m more familiar with as we used them during the coding bootcamp I attended back in January – March. But for a brief overview, I like the top comment on this ELI5 Reddit post:

Agile can be summarised very briefly: -Only work on the most important things at any given point in time -Break those things into small bite-sized tasks for individuals to work on autonomously

Agile methodologies allow for teams of developers (the “Dev” in “DevOps”) to engage in short term work “sprints” with very clearly defined goals and outcomes that determine whether the sprint is completed successfully. To the above definition of DevOps, the idea of breaking things down into bite-sized tasks for individuals to work on aids in the goal of shortening the software development life cycle.

The larger a project you attempt to take is the longer it’s going to take, yes. But you also increase the likelihood of overlooking bugs or errors in your code that can have very serious downstream consequences. Working on smaller chunks allows for a higher level of testing and oversight, integrating each piece into the project as it’s completed and vetted before adding the next piece in.

This leads directly to the next part of the equation, the IT operations side (the “Ops” in “DevOps”).

For an overview of the conflict between the Dev and Ops sides and why DevOps is necessary, this Reddit ELI5 explains it quite nicely:

Developers want to make new features, improve the product; fix bugs, etc. Operations wants to get everything up and running and never change; since changes cause new errors, bugs, performance problems, etc.

Think of Dev and Ops as two sides balancing on a see-saw:

The goal of operations is to make sure everything runs smoothly, whereas developers change and improve things. But change is inherently unstable, so the purpose of DevOps is to help balance the conflicting goals of these two sides.

There are many principles to DevOps, and many say that it’s more of a general work culture than a narrowly defined set of rules. That said, there are some broad strokes that seem to apply to most companies who adopt this philosophy.

Breaking Down Barriers

Traditionally, development and operations were always separate departments. In a DevOps environment that wall is broken down, with the teams being merged into one or with members of the operations team working in the trenches of the dev team. From the earlier Reddit ELI5:

Traditionally, operations is almost oblivious to the code base since they only care about their infastructure.

Having the teams more closely linked in this way allows the operations team to ensure the code written by the development team on a daily basis is up to snuff and ready to deploy, as opposed to the older method of doing things where deployments would take place once every few months or more, after being built in large chunks by development then passed over to operations for a thorough vetting.

From the AWS guide to DevOps:

With DevOps, the two teams work together to optimize both the productivity of developers and the reliability of operations. They strive to communicate frequently, increase efficiencies, and improve the quality of services they provide to customers.

So while it is in some ways a set of practices to abide by, more broadly it’s a work philosophy or culture that companies adhere to in order to balance a high level of output from their development team with a very reliable and stable code base.