In rich countries, the average salary of a skilled DevOps engineer is well over $100.000/year. Why are companies willing to pay so much? Well, first of all, these employees bring a lot of value to these companies. They help them deliver higher quality software, faster, and sometimes even lower costs. But there's another slightly more hidden reason: people that know how to implement DevOps procedures are somewhat rare. Most jobs require employees to have knowledge about one particular subject. They need to do one thing and do it well. But employees responsible for DevOps have to be skilled at many things. They need to have knowledge of a very wide range of subjects, such as Linux server administration, cloud services, containers, automation tools, monitoring tools, and many other things. Not many people are willing to learn so much for a small salary. And companies keep raising the pay for this job position in an attempt to steal skilled employees from their competitors. So, these days, it's a good time to learn about DevOps.
But if you're just starting out, you might be wondering: "Do I have what it takes to become good at DevOps?". So let's try to answer this question. Let's see what skills you need to have to be a good fit for this job. We'll break this down into two categories. First, we'll explore skills in the "human" category, so to speak, internal human qualities required for this job. Then we'll look at the technical knowledge that is required.
In this previous article, "What Is DevOps?", we explored how at this job, the main activity is basically building production lines for software. We must take the raw material, code written by our developers, and turn it into something useful for the world, a final software product that we can deliver to our users and customers. This code goes through many automated steps until it ends up as a finished application or software service. And if we're the ones responsible for DevOps, we need to imagine all of the automated steps required and then implement them. This means we need skills like these:
- We need to be good at planning and thinking ahead. We need to be able to figure out a system that flows well from step to step; something that goes from step A to B to C to D, all the way to Z, as smoothly as possible. This means we need to keep the whole thing in perspective even while we're focused on automating, let's say, step C. While we're working on C, we need to be aware of how to make this as compatible as possible with steps A and B before it, but also with step D and step E that comes after it.
- We need to be good at building a large system out of small little pieces. Think about how houses are built, brick by brick, or how we can build a toy car out of small LEGO pieces. DevOps processes work the same way. We can have a large system that automatically builds applications and delivers them to customers. But this large system is made out of interconnected small little pieces: a small program here, a small server there, some cloud service, and so on.
- We need to be able to find the best compromises. The developers will want certain things. The people managing the company's cloud infrastructure and servers will want other things. And it will be up to us to find a way to make both teams reasonably happy and choose solutions that work well for everyone.
- And since we're the bridge between Dev and Ops, Developers, and Operations teams, we need to have some pretty good communication skills. It can be pretty tough to be able to explain what requirements we have, what problems, what solutions, and what plans, in a way that won't be misinterpreted. With clearer explanations we'll get faster results and teams will collaborate much better, leading to much smoother experiences for everyone.
- DevOps is always changing and evolving, so we'll constantly have to learn new stuff to keep up with the best tools and best practices in the industry. This means we need to be the curious types that love to learn new things.
- Finally, a rather important skill is to be good at detective work. We'll sometimes need to debug things that suddenly stop working for mysterious reasons. We have to be able to look at the evidence and investigate, step-by-step, what went wrong, where, and why. This requires some good observation skills, attention to detail, and a mind that is naturally good at solving puzzles.
Now let's jump to the other set of skills, the technical skills required to be a DevOps engineer.
- Since we are first dealing with application code that developers write, we'll need to have a basic understanding of programming languages and how algorithms work.
- Next, this code is constantly modified by our developers. This means that something needs to keep track of all of these changes. This is the job of source code management tools such as Git, GitHub, and GitLab. So we'll need to have a good understanding of how these tools work and should be used.
- We need to know how to manage Linux servers and cloud infrastructure. When dealing with cloud services, Amazon's AWS and Microsoft Azure are the most widely used today.
- Sometimes, we'll have a lot of components in our infrastructure. It's hard to manage so many manually. It's also prone to human errors. So it's common practice to use tools that automate launching and configuring complicated infrastructure. For example, we have tools like Terraform, Chef, Puppet, and Ansible that can do this for us.
- Our developers write code constantly. And this needs to be repeatedly transformed into usable applications, tested, packaged, and then delivered to users. So we'll need to be very good at using CI/CD - Continuous Integration and Continuous Delivery tools. This is often the central part of our job. Jenkins is the most popular choice at the moment to implement CI/CD, although many other solutions are also available. GitLab can also be used for CI/CD.
- Nowadays, to ensure that applications run in the same kind of conditions for everyone, in the same environment, these are placed in containers. So we'll need to know how to use containers. The most popular tool for containers is Docker.
- If our company chooses to use a microservice model, where many small services run in many small containers, we'll need to learn how to use container orchestration tools such as Kubernetes. This is basically a tool that lets us declare what kind of containers we want to run, how many, how they should be configured and distributed to various servers, and so on. So we need to know how to declare these things to Kubernetes, which then takes care of the rest, automatically creating the structure we want and ensuring that it continues to work correctly.
- Applications, servers, and services, always malfunction at one point or another. To be able to catch these problems, as soon as possible, we need to know how to use tools to continuously monitor our apps and infrastructure. So we might have to learn tools like Elasticsearch, Kibana, LogStash, or anything else that helps us continuously collect logs, review past events, and get alerts in case anything malfunctions.
This is by no means a complete list of skills required to be good at this job. Some companies will require certain things from you, others will require entirely different things. But, generally speaking, these skills will often prove to be the most useful for someone working in this field.
And don't worry too much about the many alternative tools that exist in this DevOps space. For example, one company might use Amazon's AWS for cloud services, another might use Microsoft Azure. One company uses GitLab, another uses GitHub. It might seem like a lot of work: every time we switch companies, we need to learn and adapt to a different set of tools. But as soon as we learn how to use one cloud service or one CI/CD tool, it's very easy to adjust to some alternative. Even though the tools are different, they still do the same job, so the core principles remain the same. It's like using Chrome and Firefox. These applications are slightly different, but if we know how to use Chrome, it will be very easy to jump to Firefox. The way they're used to browsing the web is virtually the same. We just have some subtle differences here and there, but it's easy to adjust. The same applies to DevOps tools.
If you want more in-depth explanations about what kind of tools and procedures DevOps engineers often use at their jobs, you can check out this article "Understanding Essential DevOps Concepts".