DevOps engineer is now a common role in software development teams building cloud-native applications. But, with DevOps still comparatively new as a mainstream software development model, or methodology, there is still occasionally some confusion around what the role of DevOps engineer entails.
Here we’ll address the most common questions around the role of a DevOps engineer by explaining:
- What is DevOps?
- What is does a DevOps engineer do as part of a software development team?
- What knowledge and skills does a DevOps engineer have?
- How to become a DevOps engineer
- DevOps engineer salaries and job opportunities
What is DevOps?
As defined by RedHat, the world leading provider of enterprise open source solutions and specialists in DevOps automation tools now owned by IBM, DevOps is:
“DevOps is an approach to culture, automation, and platform design intended to deliver increased business value and responsiveness through rapid, high-quality service delivery. This is all made possible through fast-paced, iterative IT service delivery. DevOps means linking legacy apps with newer cloud-native apps and infrastructure.”
In practical terms, DevOps is an organisational culture most commonly manifested as a cloud-native (but not exclusively) software development methodology. The central pillar of the DevOps model is the unification of traditional software development and operations teams into a single entity with the same goal and shared responsibility for achieving it.
In a traditional software development process, the development team builds and tests an application in one environment and then passes it over to the operations team to run and maintain in the production environment. The same process is followed with any new iteration on the software.
The weakness to that approach the DevOps methodology seeks to address is that software doesn’t always run the way it is expected to in different environments. That’s especially the case during new iterations when features developed in a staging environment are added to the production environment. Adding new features to existing software often introduces errors or bugs in already existing parts of the software. The more complex the software, the greater the risk.
Updating traditional applications that run on a computer or mobile device involves notifying the user who then has to download and install the latest version of the software. That usually means, under normal circumstances, the application’s owners releasing new iterations no more once every few months.
Cloud native software is different. Users do not download an application that then runs on their computer’s hardware. Instead, the software is run on a cloud computing platform’s servers and accessed through a browser.
That means the owners of cloud native software can, and do, continuously release new features and other updates and improvements to the live environment. Users benefit as soon as they refresh their browser and software can be quickly improved through the continuous release of incremental updates.
But for continuous release to be a positive for cloud native software, the development team need to be sure testing and QA completed in the development environment is valid for the live environment and won’t result in errors or bugs harming the user experience. That means ensuring the development environment is identical to the production environment.
That, in turn, breaks down the traditional distinction between development and operations with the ultimate goal of optimising both development output and the reliability of operational processes.
DevOps is naturally compatible with the dominant agile development model and actually derives many of its qualities from the broader methodology.
What is a DevOps engineer and what do they do as part of a software development team?
The role of DevOps engineer can vary between team structures and projects but involves responsibility for the integration of DevOps processes, tools and methodologies throughout the development lifecycle. DevOps engineers are typically responsible for release engineering, provisioning and maintenance of infrastructure, system administration and security.
The role usually has a strong emphasis on automation with DevOps engineers managing the CI/CD tooling or developing and maintaining automated test suites.
DevOps engineers can come from a development background or an operations background and the emphasis of their role in a particular software development team will be influenced by that.
A DevOps engineer with a development background is empowered by the addition of many of the skills traditionally associated with operations specialists. A DevOps engineer with an operations background would normally be more focused on provisioning and maintaining automated CI/CD pipelines.
A DevOps engineer’s contribution to release engineering involves the selection, set-up and maintenance of CI/CD tooling or writing and maintaining bespoke build/deploy scripts.
In the context of infrastructure provisioning and sysadmin, a DevOps engineer’s role could include server deployment and maintenance, storage, and networking resources. Details will vary depending on if whether the infrastructure is on-premise, cloud-based or a hybrid set-up.
In an on-premise environment, a DevOps engineer’s responsibilities would typically involve provisioning and maintenance of physical servers, storage facilities, and data centre-based virtualisation software.
In a cloud or hybrid environment that combines on-premise and cloud platform-hosted infrastructure, a DevOps engineer will also usually provision and manage virtual instances of components.
The role of a senior DevOps engineer also often involves DevOps advocacy and promoting and maintaining a DevOps culture across the software development team and lifecycle and sometimes even at an organisational level.
What knowledge and skills does a DevOps engineer have?
Because DevOps is both a culture and approach to software development, underpinned by tooling and automation, a DevOps engineer requires a blend of hard (tooling and technical) and soft (interpersonal and management) skills.
The DevOps engineer’s toolkit
A DevOps lifecycle is supported by a broad range of tools that work together to support optimised software delivery. DevOps engineers need to be familiar with a good cross-selection of the commonly used tools listed below but wouldn’t be expected to have experience of all of them with many alternatives to each other.
DevOps tools can be broken down into the following categories, with examples of popular tools used in each:
Version control
GitHub, Git, GitLab, Bitbucket, GitBucket, Beanstalk, Subversion, Kallithea, Mercurial, Gogs.
Continuous integration (CI) servers
Apache Gump, Buildbot, Bamboo, CircleCI, Draco.NET, GitLab CI, Go CD, Jenkins, Travis CI, TeamCity.
Configuration management
SolarWinds Server Configuration Monitor, CFEngine Configuration Tool, Puppet Configuration Tool, CHEF Configuration Tool, Ansible Configuration Tool, SALTSTACK Configuration Tool, JUJU Configuration Tool, RUDDER, Bamboo Configuration Management, TeamCity Configuration Tool, Octopus Deploy.
Deployment automation
Jenkins, ElectricFlow, Visual Studio, IBM Urban Code, AWS CodeDeploy, DeployBot, Shippable, TeamCity, Bamboo, BuildBot, CircleCI, Travis CI, Gradle, GitLab, Capistrano, CodeShip, Distelli, GoCD.
Containers and container orchestration
Kubernetes, OpenShift, Nomad, Docker Swarm, Docker Compose, MiniKube, Marathon, Cloudify, Rancher, Containership, AZK, GKE, AKS, AWS EKS
Infrastructure Orchestration
Jenkins, Vagrant, Visual Studio IDE, Apache, Docker, Chef, Puppet, Ansible, SaltStack, Monit, Snort, JIRA Software.
Monitoring and analytics
Nagios, Zabbix, Sensu, Prometheus, SysDig, New Relic Infrastructure, AWS CloudWatch, Google StackDriver, New Relic, AppDynamics, Compuware APM, Boundary, BigPanda, PagerDuty.
Testing and Cloud Quality tools
Selenium, Testsigma, IBM Rational Functional Test, Tricentis Tosca, UFT, Parasoft, TestComplete, SeaLights, Watir, Your Choice.
DevOps programming skills
Most roles, not only purely development roles, in the software development lifecycle require some programming skills and DevOps engineers are not an exception (project and product managers are the obvious exceptions but even then some coding background can be an advantage).
DevOps engineers have specific responsibilities that involve coding but tend not to be specialists in a particular language or framework. They should instead have a good level of familiarity with multiple languages, with some of the most important Python, Ruby, PHP, Bash and JavaScript. DevOps engineers will often have to write and debug in these languages and in OS environments.
A DevOps engineer won’t ‘develop’ the main code of a software product they are working on but will need to apply coding skills to orchestrate stable, automated pipelines or to build or customise tools to automise different stages of the pipeline, optimising processes for the rest of the software development team.
Test automation involves writing code in different languages and making sure it is integrated with the code written by developers and other team members, often created in different environments.
Infrastructure as Code
Building Infrastructure as Code (IaC) is often a core part of a DevOps software development process. As such, a DevOps engineer should have a strong knowledge of IaC technologies like Terraform or at least have enough familiarity to allow for effective collaboration with other DevOps specialists with more advanced expertise.
How to become a DevOps engineer
If you are interested in a career as a DevOps engineer how would you go about gaining the necessary qualifications, skills and knowledge?
As DevOps engineer is almost always a senior role, significant previous experience within software development teams is almost always necessary. Most DevOps engineers have either previously been developers, QAs or in an operations role.
As much as it is for any IT specialist role, it could be said a degree in computer science with a focus on software development is an advantage. However, it is certainly far from obligatory in an environment where an increasing number of developers are self-taught.
The bottom line is a traditional degree is one route into the industry and arguable still the most direct. But any route to gaining experience in a role in software development could open doors to DevOps specialisation.
A focused junior manual tester could steadily gain the on-the-job experience, training and industry qualifications to eventually move into a more senior testing or QA role and eventually evolve into becoming a DevOps engineer.
More specifically, you should build knowledge of cloud computing environments and technologies like the major cloud platforms AWS, Microsoft Azure or Google Cloud Platform. And some of the major tools listed above as well as relevant programming languages and frameworks.
Job opportunities for DevOps engineers – a hot market getting hotter
As is the case for almost any role in IT and software development there is a deficit in the supply of experienced DevOps engineers, which means job opportunities, both office-based and increasingly remote, are almost always plentiful.
CodinGame’s annual report on the most in-demand software development team roles in 2021 ranks DevOps engineer in first place, ahead of back end and full stack developer roles. Australian jobs portal Seek.com estimates 30% growth in demand for DevOps engineers over the next 5 years.
How much does a DevOps engineer earn?
Seek.com put the average DevOps engineer salary at A$130k, which is $96.87k or €82.5k.
Glassdoor puts the average DevOps engineer salary for Munich, Germany, at around €65k, including €4.5k additional cash compensations above the basic salary. The low end of the range is €50k and the high end €85k.
In Ukraine, a popular IT outsourcing destination, Glassdoor estimates the average DevOps engineer salary at $2500 for more junior positions and $4000-$5000 for seniors.
However, an extremely hot market for IT specialists in 2022, especially for cloud native and DevOps roles, means senior (though not only) salary levels are rising and these figures may be lower than the current market reality.