Background
While a DevOps engineer candidate’s aptitude should factor heavily into your team’s recruiting strategy (it deserves at least as much weighting as their experience with any specific tech stack), certain technology knowledge simply has to be there on Day 1. So is it ever too early to start funneling candidates on the hard technical dimensions?
Interviewing is big investment in time and effort. A great hire can have an immediate and lasting impact on your organization. But so can a misfire, right? For this reason, getting your internal recruiters involved upfront on things like technical questionnaires can save everyone (including the candidate, the recruiter and your team!) a number of cycles down the road.
A candidate is stating senior experience with Red Hat-based Linux OSes? Ask the recruiter to verbally prescreen the candidate on those questions below. Because either such a candidate knows how many bits are in a byte, or they’re probably not going to be a fit. It’s the same for any scripting languages for which they indicate expertise.
You’ll likely want to ask your recruiting colleagues to cover both Linux and the candidate’s preferred scripting language during the prescreen. So in addition to the one for Linux, I’ve included example questionnaires for both Python and Perl below.
Overall, an effective and efficient DevOps interview funnel might look like this:
- Resume review [DevOps leader].
- Technical prescreen, 10-15 minutes [tech recruiter].
- Technical phone interview, 30-45 minutes [senior DevOps team member].
- Onsite/video team interviews, 2-3 hours total [various DevOps team members; at least one internal dev/product team customer; and the DevOps leader, who should get preliminary feedback and then take the final interview slot].
- Offer.
Suggested Prescreen Passing Thresholds
- 9-10: senior DevOps engineer candidate.
- 6-8: midlevel.
- 5: junior.
The Importance of Verbalizing Concepts
An ideal prescreen question is easy for a non-engineer to ask and easy for an engineer to answer– verbally.
(It’s also a good idea to ask the recruiter to transcribe and share with you the candidate’s answers, just in case the answer given is actually an acceptable alternative.)
Linux Prescreen Questionnaire
1. On the bash shell, what does $?
(“dollar sign question mark”) indicate?
The exit status of the last command.
2. What’s the easiest way to determine the number of inodes (“eye nodes”) available on a file system?
df -i
3. What is the process ID of init?
1
4. What does ldd (“L-D-D”) do?
list dynamic dependencies
5. What command lists the open ports on a system?
netstat
6. What is the default run level of a running system (non X Window)?
3
7. Where are failed login attempts logged by default?
/var/log/btmp
or /var/log/secure
8. What are the default file permissions if the umask is 022?
644
9. How many bits are in a byte?
8
10. What port number does DNS use by default?
53
Python Coding Prescreen Questionnaire
1. What’s the syntax for importing only the “date” submodule of the “datetime” module?
from datetime import date
2. In terms of error handling, what are the three clauses which can follow a try statement?
except/else/finally
3. Which of these are mutable and which are immutable? lists, sets, tuples.
mutable: lists, sets
immutable: tuples
4. What is the syntax for declaring a function called “timer”?
def timer():
5. What would print(‘hi’ + 3)
produce?
An error.
6. What would print(‘hi’ * 3)
produce?
“hihihi” (it will print the word “hi” three times.)
7. What file extension does Python store its bytecode in?
.pyc
8. How can you print only the final element of a list named “groceries”, when you don’t know how many elements there are?
groceries[-1]
9. How can you determine the length of a string named “email”?
len(email)
10. How would you run a Bash command such as “uptime” within the Python interpreter (either single or double quotes are OK in the candidate’s answer)?
import os
os.system(‘uptime’)
…OR…
from os import system
system(‘uptime’)
Perl Coding Prescreen Questionnaire
1. What variable types are there?
Scalar, Array, Hash
2. How do you debug a Perl script on the command line?
use “-d
” switch
3. How do you remove the last element of an array?
pop
function
4. What switch is used to execute Perl code on the command line?
either “-e
” or “-E
“
5. What is the operator used for Perl regular expression substitution?
"s"
, for example "s/foo/bar/"
6. How do you access parameters passed to a subroutine?
"@_"
7. How do you declare a variable when the strict pragma is used?
prefix the variable with “my
“
8. What function is used to return a specific non-zero value?
exit
, NOT die
9. When you require a module in Perl do you need specify the extension?
Yes
10. What is used to execute an external command from a perlscript and capture the output of the command?
backticks, for example: $system_uptime = `uptime`