Marcus Millin

marcusmillin@protonmail.com

DevOps for Developers

A mentee I meet up with asked me to give an overview of DevOps this month, so I set to task trying to uncover how I could give an overview of DevOps in just a couple of hours. After thinking back on the articles I've read introducing DevOps, I realized that many of them come at DevOps with a lot of baggage. That is to say, they assume that someone has been working in the world of Development and Operations being separate. Knowing the mentee in question doesn't have that experience, I wanted to write something a little more targeted towards existing developers, ones who haven't seen the Ops side of things, but aren't already working on the deployment side of things.

How to think about operations

Think about your first time working on a new project, or better yet, think about your first time working on a new project on a new computer. You probably had to go through several steps to get everything up and running. Something similar to the following.

Different programming languages have different tools that may combine some of these steps, or make them simpler. While more complicated applications will have a more complicated process, potentially including setting up a dev database, mock services, or several other pieces of infrastructure. However, the basic process generally holds true for most modern applications.

The point of calling all of this out is that the environment an application runs in can depend on a lot, and this is before getting into things like networking considerations (firewalls, DNS, routing), authentication, hardware requirements, and operating systems. Historically, all of these steps and more were performed manually, but that introduces risk of small configuration tweaks getting lost, long restore times in the case of failure, and a general lack of resiliency. And resiliency is an Ops person's favorite word.

Common DevOps Tools/Types

Here's a list of common tool types, and a few examples of tools that serve that purpose. In general, a tool can serve many purposes, in which case I might not put it under the same "Type" as someone else would. This is just a rough guide.

Infrastructure Management

OS/App Configuration Management

Networking/Middleware/Service Management

Source Code Management

Continuous Integration/Delivery/Deployment

It's probably not prudent of me to put CI/CD into one category of tools, but most tools in this space serve a dual role, or can be made to server a dual role. So in order to not get caught up on categorization, they'll all go under here.

Infrastructure Platforms

Okay, here's another place where things get... messy. I'm including both containerization and container orchestration here, as well as general deployment platforms. Categorization is a messy business, okay?

Monitoring/Logging

Issue tracking