In the past five years or so, I have seen a steady increase in job opportunities for a type of job that didn’t really exist in the early years of my professional career. The job position that I’m referring to is DevOps Engineer, which I suspect many of you have seen as well if you have been job hunting or are a hiring manager. Based on my conversations with my clients, as well as my peers, this role seems to be as mysterious as the concept of DevOps itself; this is largely due to the variations of how the concept is understood and applied across different organizations. In order to understand what a DevOps Engineer’s purpose in an organization is, we must first take a look at the principles behind DevOps first.
Why do we need DevOps?
Many organizations see the concept of “DevOps” as simply a set of tools that provide automation to support and optimize processes that are generally labor-intensive and potentially error-prone; these include testing, compiling software builds, deploying software packages, rolling back software deployments, etc. While utilization of tools to enhance efficiency and productivity is nothing new, the term “DevOps” appears to have formalized these engineering practices and made them more appealing due to the perceived benefits.
When technology-driven organizations implement tools to optimize their processes, they often require the expertise of DevOps Engineers who will often wear many hats. While some DevOps Engineers specialize in specific tools/technologies, others may be more versatile and support a broader set of tools within an organization. Many of the responsibilities of DevOps Engineers are not new practices, but core practices that technical organizations have followed for many years.
So what is a “DevOps Engineer”?
Roles such as System Administrator, Software Engineer, Software Test Engineer, Automation Engineer, etc. may seem familiar to you since they have been around since the late-1990s/2000s. As the concept of “DevOps” became more prevalent and popularized by books and mainstream media, these same practices are often embedded into the job duties of a DevOps Engineer. This means that when you come across a job posting that may have a title of “DevOps Engineer,” it is usually difficult to determine the nature of that role without investigating the organization and team configuration further. As a result, job seekers, as well as hiring managers, could encounter challenges when attempting to align their needs with the skills of the technologist.
Types of roles
Let’s go over a few examples of the roles that a typical DevOps Engineer might play. Note that this will vary significantly depending on the type/size of the organization which the engineer supports.
This is one of the more obscure roles that many DevOps Engineers will take on, likely by necessity. When a team/organization deploys tools and technology, they require ongoing maintenance and management of those tools to ensure proper usage. This includes managing and provisioning accounts for tools for CI/CD (Continuous Integration and Continuous Deployment), workflow management/build management (i.e. Git, Jenkins, Ansible), and general task management (i.e. Rally, Jira, Azure DevOps), or general system management such as Amazon Web Services. A DevOps Engineer will likely field requests to maintain or enhance these toolsets.
While most DevOps Engineers will likely focus more on ongoing sustainment of mature products, some will support development of new software systems, and perform activities that are similar to most Software Engineering roles. This will include tasks such as designing software code, writing code, testing code and installing code. Also, many DevOps Engineers need to know multiple programming languages and scripting languages such as Java, Python, etc.
Many DevOps Engineers need to know how to build and maintain CI/CD pipelines and support automation for testing purposes. This will likely make up the majority of a DevOps Engineer’s daily activities. Hence, it is important for a DevOps Engineer to understand how to perform such tasks effectively and efficiently. Furthermore, a keen understanding of value stream mapping concepts will also be highly desirable.
What tools should DevOps engineers specialize in?
In my experience working with clients that require DevOps expertise, one common question I receive is: “What tools should I specialize in?”
In terms of tooling, there are more tools than any single human being can master. The key is to not try to become an expert in every single tool in the market today, because that is nearly impossible; my recommendation is to become proficient in at least one tool in each of the key system development lifecycle domains such as build, integration, deployment, monitoring, etc. Once you learn one tool, it will be very easy to learn new tools within that same domain since the differences will likely be fairly small.
Do not be overwhelmed by the tools themselves. If you have an understanding of the bigger picture, you can help your team optimize the whole system rather than a small part that doesn’t make a huge impact. If you can avoid getting lost in the details, you will realize that you can think strategically and contribute to teams in ways that you never expected!