DevOps and DevOps engineers are not a new concept, but there is still a little unknown as to what they are and what they cover. Therefore, it can be hard to gauge what you should look for when recruiting a DevOps Engineer and the skill set that is required. Not all the skills they need are technical either because DevOps is a culture and a community that needs a certain kind of attitude.
What is a DevOps Engineer?
First, we start with what a DevOps Engineer is, as this is not an obvious title due to it containing the principal name DevOps. DevOps itself is not a role, it is a culture, a principal and a methodology for developing and then deploying software, therefore you cannot really be DevOps. However, the term DevOps Engineer is widely used to describe the role of a person that helps nurture DevOps culture within the company, with both interpersonal and technical skills. DevOps as you will know is the combination of Development and Operations team members, historically Developers would build the code then throw it over the fence to the Operations team to deploy. This would introduce lots of challenges when releasing software which ultimately slowed the software development lifecycle. Think of DevOps as the gel in-between that helps enable the Developers to self-service, and the Operations team build the tools to self-serve. The ultimate goal of DevOps is to provide business value by allowing businesses to release high-quality software more frequently.
In my experience, it is more often those working on the Operations side that become the DevOps Engineers as they will know best how to get the code from A to B and have most of the skill sets required. They will use their technical skills to automate the process of packaging, deploying and then monitoring the code. They will also use their soft skills to work with the Developers and other team members on how best to action this, as all projects work differently. A DevOps Engineer should also use these skills to help the wider company adopt DevOps by encouraging small change releases frequently and continuous monitoring for new features. There are other roles that have grown from the DevOps Engineer like a Site Reliability Engineer (SRE), which is like the aftercare role that maintains the website/software’s uptime with monitoring, automation and alerting.
DevOps Technical Skills
Think of a DevOps Engineer as a jack of all trades. As they are in contact and building automation with application code, networking, infrastructure and monitoring, therefore they need to know a bit about everything. This does not mean they need to be masters of all as the saying goes:
“A jack of all trades is a master of none, but oftentimes better than a master of one.”
As DevOps Engineer you will be working in teams where some will be stronger in areas than others, which complements each other as well. As a broad skill range, you would be looking to have someone who knows these types of areas:
- Application development like Dotnet Core, Java and/or NodeJs.
- Database engineering on technologies like MySQL, PostgresSQL and/or MongoDb.
- Network engineering knowledgeable in Load Balancers, Virtual Networking and Private connections.
- Security Principles for code scanning, network security and firewall protection.
- Pipeline automation with tools like Github, Azure DevOps and/or Jenkins.
- Infrastructure tooling like Terraform, Ansible and CloudInit.
- Architecture Patterns like Hub Spoke, Landing Zones and Microservices.
As you can tell this is a lot to ask of any engineer, which is why you would want someone who knows of all of these but may not be a master of them. I think the two key areas that they would need to know, especially at this time, is very efficient in the cloud platform they are working with and proficient with the Command Line Interfaces (CLI).
Cloud platforms change a lot, so trying to be great at all of them would be a near-impossible task. Therefore, my advice would be to a specialist in one platform then the other skills will be able to develop further. For example, trying to understand the application setup in AWS compared to GCP compared to Azure would drive you a little mad, but understanding it in a single cloud platform means you will start to know it inside and out.
The CLI is a DevOps Engineers best friend as it is a single point where you can run all your tools and communicate to remote tools. You will use the CLI in most, if not all aspects of the role, so knowing your way around and even knowing the commands from memory will make them a more reliable and efficient engineer. This is the sort of knowledge that you gain with experience on the job that can be invaluable.
As well as technical skill the candidate should have soft skills, so they can communicate with all parties within a project. Communication is a big part of DevOps culture, in any software development project there will be project managers, developers, business analysts, solution architects and more. Therefore, they should be good at being able to describe complex and technical solutions to others without that same background or knowledge level.
As well as talking to these members they also need to work well with them a DevOps Engineer won’t just work with other DevOps Engineers but also with all others included in the projects, as they will be heavily involved in the end-to-end development lifecycle of the product.
Another key soft skill is problem-solving, as this will sometimes be the main part of the job when things go wrong. DevOps Engineers often come across new technologies or tools which they aren’t knowledgeable about, this is where they should be able to use their problem-solving skills to be able to understand and learn, allowing them to investigate any issues. This is also how they can learn more of what they are not as skilled in, continual learning is certainly something most DevOps Engineers will be familiar with and expect.
If you’re looking to recruit a DevOps Engineer what skills should you look for? Well ideally, you’d want a candidate that has previously been either a DevOps Engineer or SRE as they should have the same skill set you are looking for. However, even now this is a developing practice and role, so you would normally get a lot of candidates that are transferring over from a previous skilled role. Therefore, the next best thing would be recruiting someone that has come from a close practice like developers, database engineers, network engineers and operations. They should though have high interest and some experience in the other skill sets, as a demonstration that they know what this role change would be. Lastly, I’d suggest they should have some Cloud experience, much of the work they will likely be doing will be in the Cloud, and having a good understanding of your target platform will be very beneficial.