What Does a DevOps Engineer Actually Do?
A good DevOps engineer is worth their weight in gold.
When you invest in a strong DevOps engineer – or DevOps teams depending on the size of your organization and the scope of your project – you’ll find that:
- The various strands of your development and IT functions work better together
- You can release updates to your product more quickly
- You can automate a chunk of internal processes and free up hours of time that could be spent on other tasks
But when it comes down to it, what is a DevOps engineer, and what do they do on a day-to-day basis that makes them so useful?
To answer this question, we’ll first take a look at what ‘DevOps’ means as a term, and move onto DevOps engineer roles, responsibilities and key characteristics. We’ll also outline the tools they’ll need access to and how they could fit into a wider development team.
What is DevOps?
DevOps, as a term, comes from the smashing together of ‘development and operations’ to create a more-or-less self-explanatory term.
DevOps is a development strategy that bridges the gap between software development and IT operations. It aims to develop an agile relationship between the two, so that organizations can create and release regular updates to their products much quicker than using the more traditional ‘waterfall’ development model.
So, DevOps engineers (and DevOps teams) sit in between development and deployment, making sure that everything is geared towards releasing updates as efficiently as possible. Ultimately, it’s about collaboration and removing barriers to it.
The importance of CI/CD
Continuous Integration and Continuous Development (CI/CD) are two concepts fundamental to DevOps – they’re what marks DevOps implementation out from more traditional strategies. Whereas waterfall methodologies worked on a linear timeline with one stage following the other, companies using DevOps run these stages concurrently in a sort of infinite feedback loop.
The benefits this offers are considerable – if done well, you can deploy several times per day using a DevOps approach, without your users having to download anything or take any further action at all. They might not even notice that anything has changed.
In today’s fast-paced environment, this type of development is quickly becoming a necessity rather than a luxury. If you’ve yet to make the switch, it’s seriously worth considering.
What is a DevOps engineer?
Often, you’ll find the term ‘DevOps engineer’ is used to refer to any DevOps practitioner, regardless of whether they’re an engineer in the traditional sense or not.
To give you a useful general definition, a DevOps engineer is an IT professional who works with software developers, system operators and admins, IT operations staff and others to oversee and/or facilitate code releases or deployments on a CI/CD basis.
How do DevOps engineers do this?
To achieve this, DevOps engineers take on a range of day-to-day responsibilities. These include:
- Project management: in some cases, DevOps engineers take a lead managing the whens, wheres, hows, and whos of an IT project, making sure everyone’s clear on objectives, aware of major deadlines, and in regular contact
- Designing and improving IT infrastructure: your core infrastructure might be holding you back. A DevOps engineer can identify how you can improve this to encourage collaboration and, ultimately, get your releases to market quicker.
- Performance testing and benchmarking: evaluating how well and reliably systems run is a key part of a DevOps engineer’s day-to-day responsibilities.
- Automation: are your releases slowed down by important but repetitive tasks? One of a DevOps engineer’s major roles is to reduce hours spent here by automating these and building useful software plugins that will lighten your software team’s load.
- Optimizing release cycles: are you losing valuable time because of how your release cycles are structured? DevOps engineers look for ways to optimize your release cycles, remove hidden time drains, and introduce new ways of moving the process along (new software, for example).
- Monitoring and reporting: one of a DevOp engineer’s roles is to provide feedback from production to reduce ‘time to detect’ (TTD) errors and ‘time to minimize’ (TTM) them.
- Security: security-focused DevOps, or SecDevOps, is a set of best practices aimed at keeping security central to all DevOps processes. This includes automation of key processes, release schedules and infrastructure design.
What skills does a good DevOps engineer have?
In many ways, DevOps is the glue that links your various IT functions together. Bearing this in mind, it’s just as important to focus on the ‘soft’ skills a DevOps engineer brings to the table on top of their technical knowledge.
Your DevOps engineer will be running meetings, setting the schedule for releases and leading the review process, as well as getting hands-on with automation, complex software tools and infrastructure design – so look for someone who’s an impeccable organizer with strong interpersonal skills. Unsympathetic, unapproachable DevOps engineers struggle with the ‘getting everyone talking to each other more’ aspect of the role, no matter how great they are technically.
Background-wise, you can find good DevOps engineers from all walks of IT life. You could, of course, look for someone who has only ever been a DevOps engineer – though as the discipline is relatively young (12-ish years old), this might limit your options somewhat.
Both former software engineers and IT operations staff (for example sysadmins) can make fantastic DevOps engineers, with their experience elsewhere in the IT function providing real-world knowledge that can inform their cooperation between the two better.
Do DevOps engineers need to know how to code?
DevOps engineers wouldn’t normally work directly on your product code (that’s your software developers’ job!).
What they often need to do, however, is to create solutions that save the time (and often the sanity) of your development and operations teams. This could involve writing code or scripts to automate key tasks, or building plugins to make your development and deployment tools meet your teams’ needs better.
This might not require full-fledged code, but a good knowledge of mid-level scripting is often very helpful.
What other skills should a good DevOps engineer have?
Elsewhere, you should look for:
- An understanding of agile methodology. DevOps is, partly, agile applied beyond the software development team, so having people who know what’s what here is particularly useful.
- Familiarity with common tools – see the list below for more details.
- Software testing. A lot of this can be automated now, but it’s useful to be able to perform a manual test when needed.
What tools does a DevOps engineer use?
A good worker is nothing without their tools, so the saying goes.
DevOps engineers rely on a set of software packages day in, day out for them to do their job effectively. If you’re looking at hiring a DevOps engineer or DevOps team, it’s therefore super important to factor this cost into your investment.
The tools we’ve listed below are name-brand industry standards. Good alternatives do exist, though if you’re looking for DevOps engineers with direct experience of particular software packages, they are an excellent place to start:
- Automation tools (e.g Jenkins, Bamboo): these allow your DevOps engineers to customize and automate your delivery pipeline.
- Source code management (e.g Git): source code management tools allow you to track the progress of any development work, view version histories, and create version ‘branches’, which can then be merged as necessary once you’ve agreed on what you want your final product to look like.
- Repository hosting (e.g Github, Bitbucket): for source code management software to integrate into your DevOps processes, you’ll need a code repository. Github and Bitbucket are the two most well-known repositories for Git; you’ll need to look elsewhere if you’re using a different SCM tool.
- Containerization software (e.g Docker, Kubernetes): containerization involves putting an application and all of its related configuration files and libraries into a container within its own operating environment, so that it can run across different physical machines regardless of dependencies). This is an essential part of a DevOps engineer’s day-to-day responsibilities, so investing in a solid option here is important.
- Configuration management (e.g Puppet Enterprise, Ansible, Chef): configuration management tools allow your DevOps engineers to configure and manage your infrastructure – sometimes as code – and to automate deployment.
- Monitoring software (e.g Nagios, Raygun): monitoring software helps your DevOps team monitor your infrastructure for any issues, for speedy and satisfactory resolution.
- Project management solutions (e.g Jira, Trello): these are by no means unique to DevOps, but they’re worth a mention anyway, given how much easier they make getting projects over the finish line. DevOps engineers can use these to check up on their team’s progress, keep everyone on track to meet deadlines, and to identify any pain points where process improvements could be made.
What does a good DevOps team look like?
If your organization is large enough (and busy enough) to justify a team of DevOps engineers, you might want to look for people with special interest in some of the areas listed above rather than hiring a team of generalists.
Positions you could look for include:
- Release manager: oversees the planning, scheduling, controlling and release of a software build.
- Automation expert: fairly self explanatory. The go-to person for all things automation-related.
- Software tester: responsible for all DevOps-related software testing.
- QA lead: ensures quality and adherence to standards across the DevOps function.
- SecDevOps engineer: takes the lead on embedding the appropriate security measures into your release cycle and across all other DevOps processes.