As an engineering manager, one of the things that you will need to do from time to time is hire new employees for your team. I have been involved in hiring developers for around 15 years now. I have done everything from just being on an interview panel, all the way to the hiring manager. Each of the roles on the interview panel has different responsibilities but they helped me finely tune the hiring practice I use today. It is set up to be fair and to hopefully eliminate any unconscious biases that might be in the process.
For all new job openings, I first write up a job description and a 30-60-90. I will go into 30-60-90’s in a future blog post. For the job description, we try and keep it as simple as possible and let people know what we are looking for. We break it down into three parts. The first part talks about the team and the role, and what we are looking for. We then include a list of minimum requirements (need to have), and then a list of nice to have.
I try to keep the list of must-have requirements as small as possible and I also try not to require college degrees unless required. This is important to not exclude the non-traditional folks. Some of the best developers I have worked with didn’t have a computer science/engineering degree or didn’t even go to college. If they have the skills, I don’t care how they acquired them.
Now that we have the job description and 30-60-90 we post the job, and we wait for resumes, but we also scan our networks to see if there is anyone that we know that would be a good fit. The job market is so hot right now, if you don’t go looking it will be hard for people to fill your roles.
Once we get some candidates we do a quick 30-minute phone screen with the recruiter to filter out anyone that doesn’t fit. We gather their salary requirements, and other helpful information as well as describe the position to them, to make sure it is something they are interested in pursuing.
If they pass the recruiter’s phone screen we use an online service to send them a take-home self-assessment, and a small coding challenge. We give the same assessment to everyone regardless of the level and experience. The goal of the assessment isn’t to eliminate anyone, it is to help us gather information upfront so that we can ask fewer questions during the interviews.
The assessment is broken up into three parts 1. A list of tech skills where people self-rate themselves from 0-10. 0 they never heard of it, 10 they invented it, or wrote a book. 2. A few open-ended question, like what are you goals for the next few years, etc. 3. A few entry-level coding exercises. write a function to do blah, that sort of thing. They can take as much time as they need and they can pick whatever language they want.
We take their answers from the assessment, resume, and recruiter notes and give them to the hiring manager. If the hiring manager is happy they will set up a hiring manager phone screen. During the phone screen, the hiring manager goes over their assessment and their resume, and describes the position in a little more detail, and lets the candidate ask as many questions as they need. The manager also gives more background on the company and how their team fits in the grand scheme of the company. At the end of the phone screen, if both the candidate and the hiring manager are interested in continuing, they move to the next round.
The next round consists of two team interviews. All of the questions for these interviews were determined beforehand and signed off by HR to make sure there are no issues with them. All candidates get the same set of questions to make sure no one is given an advantage. The interviews consist of two people from the team and they last around 30-45 minutes each.
The last interview is a technical interview that takes 60 minutes and consists of two parts. In the first part, the candidate is given a scenario and is asked to peer with the interviewer to solve the problem. The candidate leads the problem solving with the interviewer there to answer questions and help move it along if they get stuck.
The second part is a peer programming exercise where the candidate is given access to a web-based IDE and given a few questions they need to solve. They can pick the language of their choice to solve the challenge. The interviewer is there it answers any questions and helps guide the candidate if they get stuck. The interview ends with time for the candidate to ask any questions they might have.
The last part of the process is a brief debrief meeting between the recruiter and anyone on the interview panel. They discuss the pros and cons of the candidate and then decide if they recommend hiring them or not.
Candidates are usually part of a cohort and we interview everyone in that cohort before we decide who to hire. After every debrief we rank the candidates we have interviewed so far and keep a running list. When we have interviewed everyone we make an offer to the person on the top of the list. If someone rejects the offer, we move to the next on the list. If we get to the bottom of the list, then we start a new cohort and do the whole process all over again.
We take our time when it comes to hiring, it is better to make sure you have the right person than accidentally hire someone that isn’t a good fit.
Hiring the wrong person can take a lot of effort to train and then if needed manage the person out. One wrong hire could set you back 6 months by the time you recognize your mistake, manage them out, open up a new job, hire and then train someone else. So an extra day or two, or a few more questions is well worth it.
In summary here are the different steps in our hiring process.
- Creating the Job Description and 30-60-90, and posting it on the different job boards
- Start the search to find good candidates and filter through the resumes that get submitted
- Recruiter phone screen
- Candidate completes the take home self-assessment
- Hiring manager phone screen
- two team interviews
- technical interview
- Debrief meeting
- Make an offer