How do I upskill into a DevOps role?
All about the modern DevOps landscape, why it's an attractive career choice, and how you can build your skillset to become a DevOps engineer yourself.
Mar 29, 2023 • 3 Minute Read
In the tech industry, "DevOps" has become an increasingly crucial component of modern software development and delivery. As an active or aspiring engineer, you almost certainly have encountered the term at least once, if not daily. DevOps (and other similar titles in its orbit such as Platform Engineer, SRE, and Cloud Engineer) see a lot of hype and a lot of debate. Which one is best? What skills and tools are important to study? Do skills and tools even matter anymore?
In this article, we’ll discuss the modern DevOps landscape, and how you can build your skillset to become a DevOps engineer yourself.
Table of contents
What is DevOps? A brief primer
To make sure everyone is on the same page, we'll start with a quick refresh on what DevOps is; at least what it was originally intended to be and its holistic philosophy. The modern concept of DevOps seems to be a bit more fluid and has been at times hotly debated, so we'll start with some history.
The term itself is a portmanteau of the words "development" and "operations". One of the first widespread public presentations of the concepts and ideas behind DevOps was the "10 Deploys a Day: Dev and Ops Cooperation at Flickr" talk by John Allspaw and Paul Hammond in June of 2009 at the O'Reilly Velocity Conference. Later that year, Patrick Debois needed a name for a similar event he would host in Europe. Debois chose "DevOpsDays" and the term "DevOps" has stuck ever since.
The original objective of the DevOps movement was to address growing frustration with the operational and technical silos that had often separated development and system administrators. Developers would work on applications and features in isolation, only engaging operations teams when the software was nearly complete, in essence "kicking it over the wall" for the administrators to figure out how to deploy to the server fleet. In simplistic infrastructure, this model worked well enough. However, as the scale and scope of web application architecture increased, it was painfully obvious a new model was needed.
With DevOps, developers and administrators (ops or operations) work together with a shared understanding and culture that focuses on continuous improvement and faster software delivery. It's not necessarily about choosing the latest and greatest in tools and programming languages either; building the right culture is critically important. A famous axiom in DevOps is: People > Process > Tools. There is some nuance inherent in that pattern, but at a basic level it provides a pretty clear understanding of what's really important in achieving one of the primary goals in DevOps: increasing deployment velocity.
Why it's worth learning DevOps
DevOps was listed as one of Pluralsight’s Top Tech Skills to Learn in 2023 based on market research and learner trends. Here’s some figures that show why it’s currently worth adding to your skillset:
In StackOverflow’s 2022 Developer Survey, 59.3% of companies reported having a DevOps function.
DevOps was listed as a “critical needs” skill by Gartner in 2022, with a high number of currently open U.S. jobs requiring DevOps expertise.
For the last three years, DevOps has been one of the most searched-for terms on both Pluralsight and A Cloud Guru.
DevOps Foundations was the ninth-most popular Skills IQ tested on Pluralsight.
If you’re vying for internal DevOps opportunities, it’s also the best time to upskill: 8 out of 10 tech companies are planning to invest in their tech skill development in 2023, even during this economic climate. One of the priority areas for spending that upskilling budget? Automation and DevOps. In other words, it’s a good time to work on your upskilling pitch.
How to learn DevOps: 8 crucial areas to upskill
We're going to call the first part of upskilling "Learning DevOps". To be clear; any engineer worth their salt should always be taking any opportunity they can to learn. In this context, "learning" means skills that can be developed with self-study, practice, and basic test projects. You won't necessarily need to be exposed to these through job responsibilities to get better at them-- although you should take any opportunity to do so through your existing role if possible!
One of the key elements you should focus on when learning is to build upon and overlap each of these skill domains-- don't just practice each one in isolation. Set up a Linux node, write some code and commit it to a VCS, and then deploy that program to your node with CI/CD. Combined learning will be so much more effective for skill development.
1. Linux OS administration
Linux is the operating system of choice that powers most of the modern internet computing infrastructure. Most mobile apps, SaaS/PaaS/IaaS platforms, and websites that you interact with on a daily basis are powered by Linux. Naturally if you want to get a job managing software delivery in these environments, Linux proficiency is a must.
For study, Pluralsight offers a comprehensive selection of Linux course material, and this book is generally considered the bible of Linux system administration. However, one of the best ways to learn is via hands-on application. If you have the opportunity at an existing role to help manage Linux systems, do it! If that's not possible, try spinning up a local VM on your desktop or laptop with Ubuntu Linux and running a basic LAMP stack on it. After that, try doing the same with a cloud compute service like EC2.
2. Basic networking
The move from on-premise networks with racks of switches and routers has significantly reduced the demand for specialized, vendor-specific network certifications. However, general network knowledge is still highly valuable, and it's important to understand how networks behave and interact within a cloud platform.
This book is still widely used to teach networking in class settings, and once again, Pluralsight offers several courses and course tracks on networking. The most efficient way to gain job-relevant experience here will be to learn the basics, and then focus on a specific provider's implementation of networking features. AWS is always a good choice as it has broad adoption and appeal in the job market. The key is to move from the model of interacting with the network via hardware devices to interacting with the network via APIs.
3. One interpreted language(recommend Python or TS at this point)
Sadly, this is often the part of the journey where many folks turn back. If you're a software developer who aspires to start a DevOps career, you've got a great head start on one of the harder technical skills to pick up. For those coming from more traditional system administration backgrounds, I'm afraid you're going to have to tame this dragon.
Fortunately, knowing a language like Python or Typescript well enough to be a successful DevOps doesn't mean you need to go through the full rigor of a computer science education. Self-study and practice are more than sufficient to get your skills to a good starting point. Pluralsight has several courses for both Python and Typescript (Are you sensing a pattern?) and the number of books and playground sites are far too great to provide an effective recommendation here.
A great method to learn the ins and outs of a language while building something that actually mirrors a real application environment is to write a program that queries an API, transforms the output, and either presents it in an interesting format or inputs it into another API. At a basic level this mirrors how a lot of modern, microservice-based applications function, and it will confer a multitude of skills in one activity.
4. Cloud services/platforms
Every major cloud platform now offers a free-tier of services that customers can use for testing and learning without incurring any usage charges. You can also find additional credits offered by different vendors and platforms with a little bit of elbow grease. Take advantage! Build some basic application infrastructure, and as you grow comfortable, start to increase the complexity.
Before you ask, yes, Pluralsight offers courses for AWS, GCP, and Azure. If you're working at a tech role that utilizes a cloud platform, a good opportunity to learn is to offer to write documentation and architecture diagrams for any application or system infrastructure. It's exceedingly rare to find an engineering organization that doesn't need some help with their documentation, so this should be an obvious way to get some exposure.
5. Version control (depending on if you're coming from Dev or sysadmin)
Learning version control is another skill that depends on your background. Tool choice is at least simple; go with Git. It's nearly the standard at this point, and SVN and Mercurial are likely to only be found in legacy environments. The two biggest VCS platforms, GitLab and GitHub, both are based off of Git; it's the de-facto choice.
For developers; you're likely well-versed in version control. If you're not using version control as part of your development workflow, then there are probably several other areas where you've got an opportunity to learn and apply DevOps! For system administrators, you're going to need to practice Git workflows that mirror what you'd experience in a setting where you'll need to collaborate with developers and other DevOps engineers.
Remember the programming project you're building? It should be saved in version control; both GitLab and GitHub offer private repositories for free. Don't commit directly to main; submit pull requests based off of branches. Start work on a branch, then create another branch and merge it. Now you'll need to rebase and/or potentially deal with merge conflicts on the first branch. For study, Pluralsight offers a Git learning track.
6. Monitoring/Observability
Monitoring and observability are essential components of the DevOps approach to software development and delivery; adhering to a principle of continuous improvement means having an acute and comprehensive understanding of application performance and infrastructure health. If a feature deployment causes end-users to experience slowness in the app, it's critical to be able to quickly identify and remediate the root cause.
Self-directed learning with these tools is definitely possible. Building on the work from the previous examples, you can start to add logging and monitoring to your program. Using AWS as an example, some basic metrics are provided as part of the free-tier of the CloudWatch service.
Another great exercise is managing logs--in most cloud platforms, logs are not viewed directly on the nodes. They are typically streamed to a central aggregation service, then presented in a searchable interface for investigation and insight. Further drawing on the CloudWatch example, figure out how to set up a CloudWatch log agent for some of the logs that are typically present on a Linux system, and have them sent to the CloudWatch service. For directed learning and study, Pluralsight has several courses covering monitoring and logging tools across a variety of cloud platforms.
Learning about DORA metrics and measurement tools is one way to help with improving your knowledge of DevOps, especially since these can capture the Change Failure Rate (CFR). You can read more by checking out this article: “11 key DevOps metrics to measure team success”.
7. CI/CD
One of the core infrastructure pillars of modern software delivery is the Continuous Integration/Continuous Delivery (CI/CD) pipeline; a software deployment tool that acts as a "base" for automating most of the processes around the testing and deployment of applications. CI/CD pipelines have provided a massive increase in deployment velocity, enabling multiple deploys per day.
In the past, it was often suggested that you should create a local Jenkins development deployment. While Jenkins still sees usage, there are better battery-included options that let you get started faster. Both GitHub and GitLab provide CI/CD features that can be utilized with a free account. Building on your project work, you can take advantage of something like GitHub Actions to automatically test and deploy your application to your cloud provider of choice. Pluralsight also offers a variety of material covering specific services, as well as broader concepts in deployment automation. You can also use DORA measurement tools to track lead time for changes and deployment frequency.
8. Infrastructure-as-Code (IaC)
Infrastructure-as-Code is probably a term you've heard used in the same breath as DevOps. It may seem like the two are inextricably linked. Although you can certainly carry out a DevOps initiative without it, it unlocks capabilities that are almost a necessity if you're going to manage and deploy software automatically in a modern cloud environment.
IaC enables engineers to define infrastructure configuration in code, rather than manually clicking around a UI to deploy resources. This is absolutely essential for deploying application infrastructure at scale; "ClickOps" just isn't viable when you need to deploy 1000 frontend nodes in a repeatable fashion.
Currently, the best choice with the broadest compatibility is Terraform. Remember the application you've been building and adding features to? Now it's time to configure all of the cloud resources it uses with Terraform, deploying them as part of your CI/CD pipeline. For additional study materials, Pluralsight offers several general courses on Terraform, as well as provider-specific material.
How to practice DevOps: The things you can't just study
This is where the rubber meets the road, so-to-speak. The skills in this section aren't necessarily something you can develop with self-study. They're going to require a professional environment or engineering role with access to distributed application architecture at scale, and at least several engineers working on multiple features or services. You'll need to find opportunities to leverage these skills at your existing role.
1. Incident/event management
Incident and event management generally refers to how an engineering organization responds to outages or issues within their application infrastructure. For large services, getting this right is critical. Every second and minute spent with degraded performance means a bad customer experience and lost revenue. A book that provides some great real-world examples of managing outages is "Real-World SRE" by Nat Welch.
However, this is one area that is going to require some hands on. The next time there's an outage or system issue in your current role, participate in the response. Document what happened, what worked and what failed. Help drive continuous improvement by setting up or participating in a post-mortem. These types of skills are crucial for a strong DevOps culture.
2. Cross-team/org functionality
As a DevOps engineer, you'll often be asked to work with other development teams, as well as their leadership, and both technical and non-technical stakeholders. Being organizationally dynamic means being comfortable in these situations, as well as being an extremely effective and empathetic communicator. DevOps is about collaboration; so this isn't the role if you like to toil in relative isolation (In fact, collaboration was ranked the #2 soft skill to have in tech in 2023, so it’s worth having even if you’re not considering a career in DevOps!).
A great way to build this skillset is to participate in meetings and standups that other engineering teams hold. Figure out what their pain points are. Find ways to help. Learn about different parts of the application stack. Understand what the business KPIs are; these are going to be strong motivating factors for most engineering managers.
3. Monitoring/Observability
Unfortunately, there will be limits to how much can be gleaned from implementing these tools on a personal project. Understanding the value of holistic monitoring and observability comes through utilizing these tools to help visualize large-scale application performance and behavior. If your current organization has any kind of application infrastructure, they are likely using one or several services to handle monitoring or logging.
Pay attention to these tools; note how the application behaves during peak usage times. Review what happens during low-demand times as well. Are there patterns? If your company isn't using comprehensive monitoring, start advocating for improvement. Look for ways to reduce noise and excessive alerting. Identify potential performance bottlenecks or inefficient usage, and prepare a report on them. Spending time observing application behavior will be invaluable experience.
Conclusion: Do more of what you already do!
If you're already in tech, getting into DevOps doesn't have to mean a complete reboot. Do more of what you already do, look for opportunities to grow your skill set, and spend time on the side learning new technical skills. Remember, with DevOps, it's: people > process > tools. You'll get far if you spend time looking for opportunities to build rapport and forward-looking technical culture by working with and helping other engineers.
Above all, focus on continuous improvement not just for systems and software, but for yourself as well. For those who are just getting started on their tech journey and want to understand the value of DevOps at a basic level, the story-driven "The Phoenix Project" by Gene Kim is a great read.
To pick up the fundamentals of DevOps,you can also check out this video course pathway: "DevOps Foundations." There's also a free DevOps Skill IQ test you can do to see where your knowledge is currently at.