Blog

Who Is a DevOps Engineer? (and how to become one)

14 Jan, 2021
Xebia Background Header Wave

A few years ago, precisely listing a DevOps’ responsibilities wasn’t necessary. The industry was totally different; software developers were often working as full-stacks, analytics, and even… testers! So, the role of a DevOps was defined more intuitively. But with the evolving IT market, the situation began to change.

Not long ago, software houses started stumbling upon tasks that require a very specific skillset – and thus started the rise of DevOps.

So, who is a DevOps, precisely?

Shortly speaking, a DevOps is responsible for automation processes – for example, for organizing local environments, code repositories, infrastructure, or CI/CD pipelines. Currently, a DevOps is a full-fledged project role, just like a software developer or QA specialist.

There’s a huge chance you’ve heard the phrase that “DevOps is a culture, not a role”. This basically means that every team member should in a sense be a DevOps.

But achieving this is not easy.

Cloud-related skills and automatization proficiency require an EXTRAORDINARY understanding of IaaC and CI/CD tools, or the software development lifecycle. So, it’s an entire skillset that needs to be frequently expanded.

What is a DevOps responsible for?

As we’ve mentioned, generally speaking, DevOps experts are responsible for areas related to automation processes.

Importantly, their tasks are an integral part of the development. In our understanding, a DevOps is part of the development team and not just an external contractor, which is sometimes the case – especially in bigger organizations.

At PGS Software, we’ve distinguished 4 main areas a DevOps is responsible for:

1. Local environment.

The DevOps should help organize local environments for developers and testers. This often means using docker-compose or vagrant. But the difficulty lies elsewhere; the Cloud infrastructure is specific, and in the local environment, many Cloud elements must be mocked. A DevOps’ help is crucial.

 

2. Code repository.

A DevOps will be helpful in organizing a code repository for both single applications and the entire infrastructure. In some projects, it will be necessary to explain to the rest of the team how to work with a given branching model. Why? Sometimes projects are relatively easy (e.g. a single repository monolith with a simple continuous integration pipeline). But currently, there are more and more complicated release processes with many independent functionalities. Managing such a repository is no trivial matter.

 

3. Infrastructure

As we know, a project requires certain environments – for tests or production. These infrastructures can be simple and consist of a single virtual machine. Yet, they’re often more complicated than that, especially in the Cloud. For example, the ECS cluster with many servers, multiple databases, and serverless part. Creating such an infrastructure is no gimme and can only be done by an experienced Cloud expert. Without a skillful DevOps, it’ll be tricky.

 

4. CI/CD pipeline.

Implementing a CI/CD pipeline is another important DevOps area. Such a pipeline can be easy – in the past, there were a lot of free-style jobs on Jenkins – but now, more complex ones are frequently being used, like multibranch pipelines, or similar techniques based on different tools. Generally speaking, more and more areas are automated, and this demands more and more expert knowledge.

 

Apart from these 4 areas, there are multiple other (and not less important) DevOps responsibilities:

  • automating incident reactions,
  • monitoring apps and infrastructure,
  • implementing and acquiring different kinds of metrics,
  • creating dashboards that enable monitoring these metrics,
  • implementing security .

But even with this additional list, it’s not everything – DevOps responsibilities often depend on the specific needs of a given project.

What Should a DevOps know?

A DevOps’ core knowledge is based on understanding the software development processes and automation-related topics. Some skills are obvious, like proficiency in Jenkins, terraform (or similar), and docker. Many skills are a natural consequence of the DevOps’ responsibilities. Since a DevOps creates metrics and sets up relevant analysis tools, knowing these tools is essential. It’s similar in other areas, like the Cloud – creating such an infrastructure implicates understanding it on a sufficient level. Automating processes is no different – to automate, bash or Python knowledge might be useful.

So, shortly speaking, the specifics of the role define the crucial DevOps skills.

Why is it so Important to Have a Commonly Understood Definition of a DevOps?

As we’ve mentioned, there was no need for a DevOps definition just a few years ago – software developers had many different responsibilities. But now, with a more precise specialization, a separate role as described became essential.

But even today, the DevOps is often defined only intuitively. And this can create problems.

If there’s no list of a DevOps’ responsibilities within an organization (or even a given industry), it won’t be clear what DevOps Engineers should know. Should they be responsible for releases? Or for security incidents? And, most of all, the question arises – is a DevOps Engineer even needed? After all, a software developer could likely do most of the needed tasks, right?

Not necessarily. As described above, solving some specific issues requires a specific skillset. This is especially true for Cloud solution, which can be extremely tricky. As a result, software developers often don’t even want to complete certain DevOps-related tasks, because they lack the knowledge.

This issue is perfectly depicted by our own experience. As for now, having DevOps Engineers on board is becoming a market standard – to this point, that clients themselves frequently expect to have them in their teams.

How Does it Help to Define a DevOps’ Responsibilities Within a Project?

As you can see, listing DevOps experts responsibilities delivers multiple benefits.

First off, knowing what a DevOps does enables a PM/Delivery Manager to decide if one is needed in a given project. Secondly, it gives software developers more space to work on tasks that they can handle best.

Additionally, from a software houses perspective, having a clear idea of what a DevOps does helps to explain to clients why such an expert is needed in a given project. This is a minor point, sure, but since customers often get billed for man-hours, it just makes life easier.

How to Become a DevOps Engineer?

Practically, there are multiple paths to becoming a DevOps Engineer. For example, at PGS Software we have an internal upskill program to help team members develop all the necessary skills in-house. Importantly, the training participants don’t have to change their careers; this program is simply meant to present all the related basics, tools, concepts and techniques.

The future DevOps specialist learn:

1. Local environment

 Learning the theoretical fundaments is a very good start! This includes, mainly:

  • layers of network communication, network addressing, forward/reverse proxy,
  • encrypting and hashing,
  • load balancing, firewalls, auto-scaling,
  • deployment types, application and infrastructure monitoring.

 

2. Using and configuring key DevOps tools.

This includes:

  • Docker,
  • Ansible,
  • Terraform,
  • Jenkins, Azure DevOps, or GitLabCI,
  • Kubernetes

Obviously, the list is not set in stone. The goal is to introduce the new DevOps adepts to the main tools types and help them understand the challenges.

3. Developing an own app.

The last phase is the longest – but also the most important. The DevOps candidates need to develop their own simple apps on the Cloud infrastructure. The solutions need to be a CRUD application communicating with the database and the second small app able to upload files onto S3.

First off, the DevOps candidates develop everything manually, planning the network structure, autoscaling and picking the Cloud service. Next, they do it again, but this time automating everything that can be automated.

This way, the DevOps adept is able to experience all the key areas of this profession – not on an expert level, but enough to be working on the project alongside a more seasoned colleague.

Finally, the new DevOps specialists just need to gain practical experience to be fully equipped to work on their own!

Do you agree with our assessment?

 

Talk to the author: Krzysztof Kąkol

Questions?

Get in touch with us to learn more about the subject and related solutions

Explore related posts