Every day, more and more companies are looking for people with DevOps knowledge. As I'm writing this post, there are 49,000 results on LinkedIn for DevOps jobs. That's a lot of job openings.
The high demand for DevOps engineers must be for a reason, right? Well, according to devops.com's "The State of DevOps Adoption and Trends in 2017" report, DevOps adoption has increased in the last couple of years, especially since 2016, and it won't stop. The problem is that some organizations are finding it hard to start the journey.
Although starting a DevOps initiative is not an easy task, looking for people that have the necessary skills is even harder. It doesn't matter what your background is; developer or sysadmin, you'll need to improve or acquire some new skills and knowledge to succeed in your day-to-day job.
Let's explore what you need to land a DevOps job.
Have Coding Skills
It's not necessary for you to have a developer background, although that will make it easier. But it is important that you feel comfortable reading code, that you understand it, and that you feel confident enough to change it or even create something from scratch.
You won't reinvent the wheel by creating a new software to do deployments, But you'll create scripts to automate deployments and other certain tasks.
So it's not important for you to know design patterns, object-oriented programming, functional programming, or a ton of languages. As long as you have developed your logic—meaning you have a developer's problem-solving mindset—reuse code rather than repeat yourself, and maintain other practices, you won't have any problems landing this job.
Skills are important, and you can develop them by learning just one programming language. The recommended (but not limited) list for you to choose from is Go, Python, Ruby, Bash, or PowerShell. There are various reasons why I'm recommending them. But essentially these are commonly-used languages. For example, you need to know Ruby if you want to use Chef. Having a developer background will make it easier for you to adapt to a team that's doing DevOps.
Domain-specific languages (DSL) are also very important here, depending on the tool you use. Some use JSON. Others use YAML. Those are representation formats, and that's how some tools interact. For example, when you define your infrastructure as code with tools like AWS CloudFormation or Terraform, you define that using YAML format. It's like you're programming, mostly in a structural or procedural way.
Know Version Control
It's normal for developers to be familiar with version control. But if your background is in operations, version control isn't that common in the field. At least, it wasn't until things like infrastructure as code came along.
The most important version control system is Git, so it's good to know what it is and how to use it: how to use branches, pull (or merge) requests, and more importantly, how to solve merge conflicts. You need to have a mindset of "if it's not in version control, I don't trust it."
Know About Infrastructure
You need to know about infrastructure. And I don't mean in the sense of how to configure a Cisco router, although that's valuable. It's important that you know about networking, security, storage, and administering servers. You also need to familiarize yourself with key concepts like high availability, redundancy, self-healing, and resilient architectures—and not just in theory. You should also know how to apply them in real-world scenarios.
If you work for a startup, it's almost guaranteed that you'll be working with a cloud provider. So you need to know about cloud computing. The most popular ones right now are AWS, Azure, and Google. Pick one, get some experience, and if possible, get certified. Cloud certifications will improve your chances of getting the job and better pay.
If you work for an enterprise, you might be working with servers that are on-premises, in the cloud, or a combination of both. Some companies might plan to migrate everything to the cloud. So cloud is important, and its adoption is increasing every day in all types of organizations. But one thing's for sure: even if you don't work in a cloud environment, that doesn't mean that you can't adopt DevOps principles—especially when you know the critical practices.
So to work in DevOps, you need to know about continuous integration, continuous delivery, infrastructure as code, configuration management, log management, and immutable infrastructure. And when we talk about immutable infrastructure, we can't avoid talking about containers. Containers play a big role in infrastructure nowadays, especially Docker. Even if you don't wind up at an organization that's already using containers, you might find yourself at one that wants to start. And if there aren't plans for it, containers principles like packing, single responsibility, and immutable infrastructure can be applied too.
Know and Use Proper Tools
People in the industry say you should be “tool agnostic” or that you don't need to focus on tools. But in reality, it's good to be familiar with some tools. Choose a good set of tools and start doing something, anything—you’ll learn later if it was the right choice or not. Even though DevOps isn't just about tools, they're still important.
You'll find that many job postings require you to know tools like Jenkins, Chef, Puppet, Ansible, AWS CloudFormation, Docker, and Terraform. These are the commonly used ones. You need to know what problem each of those tools solves. Some are competent on their own; others are better if you combine them. When you start using these tools, you'll see how important it is that you know how to code.
Have Soft Skills
DevOps is all about people. As a DevOps engineer, you'll be spending a lot of time with developers and other teams.
You'll need to communicate the importance of applying some of the DevOps principles. That means knowing how to sell new ideas and having solid arguments for them. Initially, coaching the team will be important, especially if the company is just starting with DevOps. People are always a bit resistant to change. This is okay as long as your debates are healthy and constructive. And for that, it's required to have good communication skills, to be assertive, and to put yourself in the other person's shoes.
Developers also need to be aware of how things work and why some things are important: things like building once, feature flags, and continuous integration. These help deployments to be more reliable and predictable. The end goal should be to deliver quickly and frequently, with good quality and in a deterministic way.
Take the Challenge
In this post, we didn't deep dive into the topics. I just mentioned what you need to know to be a DevOps engineer. Already mastered everything mentioned here? Good. Keep improving!
But if there's a skill on this list you don't have, take the time to learn it and practice. You might get overwhelmed by everything you don't yet know, but relax. Start with just one thing. Tools will come and go, but they're getting better. And it's not just in how they solve problems; it's also in how they're creating well-written documentation so it's easy to learn.
Take the challenge because the demand for you as a DevOps engineer will only grow as time passes.