How to interview a Senior Engineer
⋅ 5 min read ⋅ ★ Featured PostFor the past few years, I've been interviewing a lot of engineers and helping improve and streamline the hiring process. I've also had multiple job interviews myself across the world, and I wanted to just write about what, to me, is a good way to hire great talent.
Write a thoughtful job listing
First impressions are important, so here's how you nail a great job listing.
Include roles & responsibilities
The first thing that most candidates look for is the role and what it offers; it helps to emphasize the keywords (for example, "senior frontend lead" or "principal software engineer"). Also helpful is what is expected of the role in terms of responsibilities - they work with product teams, they're expected to interface with the CTO, they're expected to contribute to the organization's OSS projects, etc.
Include benefits & perks
This is a no-brainer. Include team activities & outings (pictures too if you can), food/catering options, yoga/gym memberships, conference tickets and discounts that employees can get.
Equally important are the work-from-home policy, maternity & paternity leave policy and vacation policy. Keep in mind that senior engineers tend to prefer these more than the usual perks like your swanky office space or your office pet.
💰 Include the salary range
You're the one offering the job, and you have a budget for it, so be upfront about the salary range. I've run into a few interviews where the recruiter would insist I quote a number first — I politely declined, because it shows that they're trying to lowball me.
Highlight visa sponsorship and relocation assistance
If you're building a diverse team, you're bound to have candidates apply from different parts of the world. It is immensely helpful when a job listing includes searchable keywords like visa
, sponsor
and relocation
.
Good examples
- A lot of Tile listings say what the candidate will be doing in 1, 3 & 6 months on the job.
- Monzo explains all the steps in its interview process.
Be nice and set expectations
Everyone involved in the interview process, from HR (or the People department, because it is 2019) to the engineers have to make sure they're friendly & empathetic to the candidates.
Be warm and welcoming at every step
Once the candidate's resume has been screened and you're initiating the interview process, have a friendly tone in all communications — check if it is a good time before every call, let them know they can ask questions any time of anyone and that you'd respond and tell them that it is okay to reschedule whenever something comes up.
When I interviewed for Indix, they sent me a take-home assignment right on the night of my birthday. I was just getting off a flight to go see Coldplay live that night, so I called HR and told them that I couldn't work on it for the next 2 days. They were very understanding and let me take additional time, and I went on to join the Indix family.
Let the candidate know when you'll write them next
Make sure the interviewer knows when the hiring coordinator can get back to the candidate, because there's going to be a "do you have any questions for me?" at the end of most rounds and the candidate can ask "when do I hear back about the next step?". Make sure you have an answer for that.
Explaining the next steps along with timelines can help reduce the candidate's anxiety a lot. They're probably at a regular day-job, interviewing at other places too and really hoping they get this job. If they get rejected, still write back and let them know so they get closure and can move on.
Give feedback
They've spent a good amount of time for you (as have you), so it is only fair that you explain why they got rejected. Any good engineer would love to hear constructive feedback to learn from their mistakes and fix their flaws, so you'd be doing them a great service by providing feedback from their interviewers. If you don't have good feedback to give, you're doing it wrong.
This also creates goodwill and they can still recommend other engineers to apply for jobs at your organization.
Set expectations for each round
Let the candidate know what they'll need for each round (for example, a computer for screen-sharing). Share the agenda for each meeting — what will be discussed, who will be in the meeting, how long the meeting will last, etc.
Make the interview challenging yet fun
The technical interview is the most important of the interview rounds, and also the most difficult to get right.
Avoid HackerRank
Try to avoid a standardized test tool like HackerRank (at least for senior roles) — time-bound tests are stressful, and real-world problem-solving is wildly different; engineers have the wealth of time, experience of their teammates and Google/StackOverflow to draw from.
Prefer submissions via Github instead — there are more signals to glean from; their git
history & commit discipline, documentation, CI/CD integration, etc. It is also easier for interviewers to quickly clone it and try it out themselves.
Give them a well-designed assignment
Design a take-home test that is mapped to a real-world problem or something the candidate will actually be solving at the job. For example, you can build out an app with missing pieces and ask them to fill them in.
- Set expectations upfront about what you expect (for example, unit tests).
- Make sure engineers at multiple levels (at least 1 senior and 1 junior) review them. This is to reduce bias and make sure the reviewing is balanced.
- Walk through the code with the candidate, and create opportunities for refactoring or adding small features - this can help interviewers understand the candidate's thought process (and as a bonus, eliminate candidates that have plagiarized code).
Face/off
When the candidate comes in for a face-to-face interview (or perhaps the post-assignment rounds are conducted via teleconference if the candidate is remote), make sure you set them at ease. A small amount of small-talk (about the weather or local news, perhaps) can help make the candidate feel comfortable.
- Do not white-board! The take-home assignment's solution has already proven their problem-solving abilities. Do not spring an algorithm or any other random problem at the candidate. Instead, pose a systems design or an architecture problem and ask them to solve it, perhaps from the domain/field that the candidate will work in. Set expectations upfront and gently nudge them towards the solution. If they can't get to it, explain the solution anyway and move on to the next problem.
- Play to their strengths; dive deep into their strengths and assess their level of technical proficiency and self-awareness.
- Culture fit - look for flexibility, their ability to introspect and their overall character traits.
- Remember that the goal of an interview is to understand the candidate's problem-solving abilities, and not to paint them into a corner by asking really hard questions.
Treat them like an employee
- Please do not ghost them - they've put in time and effort in the interview process, as have you. Make sure you pass on feedback if the candidate asks for it.
- If they get rejected, let them know when they can apply next or offer similar positions in other teams.