Hiring a DevOps engineer is not an easy task. A new study by Indeed has revealed that DevOps engineer is the #1 hardest IT job to fill in North America.
So how do you find the right candidates to fill in your organization, especially if you are a startup, how do you hire your very first DevOps guy? The answer is neither easy nor short but surely a matter of concern for many.
So we decided to interview our top DevOps expert, Ravi Kiran, who has been in this domain since the last 7 years. Ravi is presently working as a DevOps Consultant with IBM India and has been a consultant with leading startups like Flipkart and GrabHouse. In a candid conversation with AirCTO, he talks about how a great DevOps candidate should be hired.
Why did you choose to transit into the DevOps domain?
I was working as a Testing Automation Engineer in the first one and a half years of my career& I was more looking into the system background, i.e the Linux and the Terminal background. However, I was much more interested in understanding the technical aspects and that is why I went into release management and operations. It was a good transition from regular Java or Python scripting to Shell and maintaining the Infrastructure.
How do you identify if a developer will be a good fit for a DevOps position? What skills do you give more importance to while hiring for the position?
First and foremost quality for a DevOps engineer from my perspective, no matter whether he is a developer or a test engineer, he must have hands on experience with the command lines; as the entire life of a DevOps engineer or someone who runs the system is mostly related to the terminal.
Maintaining and monitoring of the infrastructure happens in different aspects, like monitoring tools and stuff, so good basics in Linux would help in understanding a high-level DevOps concept and that would be a very good primary skill set for any person who would come into DevOps.
What are the DevOps tools that you feel a developer should know well even at a beginner level?
"So at the beginner level, knowledge of the operating system and the Linux flavors like Ubuntu, Fedora, or any such flavors is required. He should also know the Windows platform in details. And from the tools perspective, primary understanding of tools like Puppet, Chef is required. From the monitoring perspective, there are different tools that are available in both open source and licensed like Nagios, Docker etc. The candidate should have an idea to use them."
How do you understand that a developer understands the importance of scalability?
The very basic thing for a DevOps is to understand that he is not coding for himself if his code is being used by an entire zone or a bigger audience, he must be able to scale his code. He must be able to understand about the platform whether it is Java or Python or anything else and how his code going to be scaled from an infrastructure standpoint. Also, he must understand what is required for his code to run on each platform.
Some sample questions which can be asked to the candidate
"Basically, it starts with the monolithic infrastructure to microservices infrastructure kind of questions. If someone would choose something like Apache server, there would be a limitation on the no of threads that could be executed to a particular database from the server. So the interaction from the server to the database, generally from the application server to the web server, understanding of all these kind of things should be analysed for the candidate.
Whether he is able to understand the scalability, what application or web server he must be choosing to match his requirements for scalability is something that should be tested."
How do you evaluate the skill level of DevOps tools like Chef, Ansible, Docker etc that a developer has mentioned in his resume?
The very basic understanding from the resume can be derived by looking at the tools that he has mentioned. Usually, any organization will go with single automation tools. When candidate says he has implemented both chef, puppet and siebel, you must go through the projects that he has worked on and has implemented those tools. None actually uses all the three tools in a single project, from that evaluation you will be able to understand if he is faking his credibility.
What is the typical flow of interview that you follow?
I would definitely start with the Linux fundamentals, go through the candidate's resume to understand if he has an experience on automation tools like chef and puppet. For all of these, fundamental knowledge of Linux is required, since all of these tools has evolved from the concept of operating system, so the fundamentals should be very clear.
Depending on the project implementation that the candidate has put on his resume, I would ask him questions on that particular project that he has worked on. Also, depending on the requirements of the current project, if the candidate is able to understand the requirements and get his expertise onboard, would be something I would focus on."
What is the importance of coding test in DevOps interviews?
Most of the times, when you go for higher experience levels, coding experience is required. Sometimes, it might be very abstract, if someone is trying to explain some concepts verbally but if he is unable to put it down in a coded format, he might not be a good fit."
How important is clean code?
Clean code is very important, there might be 100 different scripts a person writes, but those 100 scripts can be shrinked into 10 or 50 scripts. Anyways, experience and exploring multiple options makes someone enable to write clean code. I basically don't expect that for a 2-4 years of candidate, but when it goes to 7-8 years, we expect the clean code format and how does the candidate try to optimise the code.
How do you realize that it's time your development team needs a DevOps guy?
It depends on the nature of the project. At the very beginning of a startup, there might not be any necessity, but when it reaches higher no of customers more scalability is required and more and more automation is required in that case.
Nowadays every startup is hiring a full-stack developer who is hands on both scripting languages, as well as maintaining the code as well as deployment. So, the need for a DevOps to be hired arises when DevOps expertise is required for maintaining the cloud or the hybrid infrastructure when the startup is trying to grow into a bigger organization. Scalability and maintenance of the code is required at that point and that is the point when DevOps engineers would be coming into the organization.
For a bigger organization, there are multiple modules which interact with each other. Devops is one such person who tries to understand and make configuration easier.
How do you evaluate in the interview if the developer knows his way around *nix systems?
So, a dev should basically understand about OS fundamentals. Understanding how the OS is running for his project should be understood. Asking some questions related to those like, What are the no of process that are working on that particular OS, what is the process that would execute his code and what is the memory that is being utilized by his code, could help you understand his capability."
What are the network security protocols that a DevOps engineer must know?
So, DevOps can be limited to CSD or the deployment part, but not every DevOps is required to understand the networking conceopts. If it's required, the work profile should be coming into the Networking Ops or SysOps profile.
Again, when you go for the SysOps, it actually includes the DevOps and the entire infrastructure management and release management. In that case, fundamentals of the protocols which are being followed like what HTTP is, what are the certificates being used, how are we going to implement DNS and how are we maintaining the CDN, are required to be understood.
Many companies like Uber, OLA, tries to analyze the networking capability of the candidate by asking questions like, what happens to a particular request when it is triggered from a browser until it reaches the server, and when it goes back, what happens in the entire route of the request till the response, these kinds of questions should be asked.
How can you identify as a company, whether you need a DevOps guy or a Site Reliability Engineer (SRE)?
"An SRE is someone who is totally concentrating on the infrastructure from the client's perspective, what that means is that the SRE always ensures that the application which is deployed is up and running at all the times for the client.
But DevOps is someone who can take the responsibility of delivering the product right from the developer's plate till the production environment and also will be involved in client related activities. Sometimes the client request can go beyond the expected capacity of latencies like 4 servers can increase to 8 or ten servers.
An SRE should be taking the responsibility to scale up those things if something is going wrong he should ensure that things are always in place. But a DevOps engineer is someone who can take the responsibility of taking the code from the developer's plate in the production environment, and make it completely automated depending on what is required for the end to end infrastructure and the automation part so that the code reaches from the development phase to the production environment."
What sort of scripting languages must a DevOps engineer know? We have seen JD where companies have mentioned Python, PHP, Perl etc. What is the level of knowledge that they need to have in these languages?
"These days, many companies are looking for a full-stack developer but putting the profile as DevOps engineer. There is a lot of difference between them. A Devops Engineer is someone who is good enough in maintaining and automating the process, someone capable of taking the code from the developer's bench till whatever environment it is required to be put on.
A DevOps Engineer, at least from my perspective is not required to code the applications. PHP and Python etc are required for coding the applications, right? A DevOps engineer needs to automate and maintain the code from the developer's bench till the git repo or whatever repo and automate it using various tools.
Maintaining a product lifecycle is something that a DevOps is expected to have. If a DevOps Engineer has an idea about what are the resources that are being taken up by the scripts and if he understands the severs, he can easily scale it up. Fundamentals of programming is required, but I would not expect a DevOps Engineer to completely code for an application. Coding for the infrastructure is required but not coding for the application."
Any suggestions to recruiters while looking for good DevOps candidates?
"Every company has its own requirement for a particular role or product, but in general, OS concepts is required, basics of the platform that he has worked on and is going to work on is required.
And a technical recruiter must concentrate on the adaptability of the candidate into the current company which means what is the current platform that they are working on. If the candidate already has a good experience in this, that would be a good match.
Because if it's a big company, the person who is coming in as a DevOps engineer has some bandwidth to learn the new platform, but if it's a growing company or a startup, it is expected of the candidate to already have some good idea about what is happening in the current company and what are the platforms or the tools that they are working on.
If he directly comes in and joins the team that would be a very good plus for the team because he can immediately take up responsibilities. The learning time for a startup company should be minimal.
Hiring for DevOps Engineering is going to remain a challenge in the years to come and recruiters or hiring managers have to align the company requirement to the capability and expertise of the candidate. Hope this article helps you in hiring your next awesome DevOps talent.