Hiring at ACV
In 2021, the software engineering market is booming, making it harder and harder for companies to attract top talent, especially since remote opportunities have become widely available in the past couple of years. Statistics show that in Canada Q2 2021 job vacancy in the industry increased by 40% compared to any quarter in pre pandemic 2019.. This changed the market dynamics a lot. For example, a cover letter becomes less of a common practice, candidates would simply not apply to the positions they are not interested in.
We talked to quite a few extremely talented Software Engineers and they shared their experience with changing jobs. Almost universally they would mention that there is still a disconnect in the industry between ability to be a great software engineer and ability to pass interviews. So, at ACV, we do our best to deliver a world-class candidate experience and make sure a candidate is feeling positively about the company independent of the result. It is always a work in progress and we adjust as we learn and collect feedback. Let us walk through the current process and explain our motivation and philosophy behind it.
In general those are the guidelines we use for ourselves:
- We drive to make the application process as easy as possible. When applying through our website only the most important information, like name, phone, desired compensation and resume is asked to be provided.
- We strive to always follow up and always keep the candidate informed on the next steps and decisions made. Candidates appreciate an answer, as there is nothing worse than not replying.
- We want to be quick. We know that good candidates will not stay on the market long, so the entire process should be very fast.
- We aim to be prepared for each interview, be on time and have no distractions (We do not read email, slacks or multitask during interviews.)
First step in the process is a job application. Each team creates one that is tailored to their needs and works with a dedicated recruiter to make sure the expectations are set correctly. Working with a recruiter is extremely important as they are the first to talk to candidates. In this initial conversation important topics are clarified. That is:
- Describing ACV and the team work. We want to be upfront and honest about what a job requires and what type of work to be expected. Many Software Engineers have specific preferences regarding type of work they like to do, be that front-end vs back-end or specific feature vs platform type of work
- A recruiter can help a candidate choose a right team for them as well as very often there are quite a few openings which are similar in description and a recruiter can help clarify options for a candidate
- Understand candidates’ salary and work expectations
- In case of a very specific need, verify the candidate has it. In general, to succeed in a company it does not matter if a candidate wrote code in the same programming languages or used to deploy to the same type of a cloud vendor. However, sometimes you might want to hire to fill a very specific gap. Let’s say your team needs to take over some Native React app, and you need somebody to guide and mentor the team on this work. This is where React knowledge comes in as an absolute must and a candidate should be told the expectations of this role
- Talk about the interview process and set the timeline
A hiring manager will have a regular conversation with a recruiter to review candidates and agree on the next steps. Even though all the feedback for every candidate interview is available written down in our system it is very useful to sync and chat about candidates and next steps in the interview process. Sometimes, if there are some who are unsure whether they are a fit or not, a quick hiring manager phone call could be scheduled to clarify with the candidate experience points and get an early assessment.
Next step would be a hiring manager or a technical interview, which we did not find the order of being important. Let’s talk about the technical Interview process first. We believe it is quite important to have a separate approach based on the seniority level of a position. That is, the tasks and questions you might want to ask a new graduate to solve should correspond to their skills. Normally there is a single Technical interview round, but sometimes teams do a second one if the first one was inconclusive and interviewers’ opinions are split. After all, we understand that it is hard to be your best at an interview even if everyone is friendly and helpful.
We leave it up to engineers who conduct an interview to decide on what type of questions to ask, however we have a set of general guidelines to help make the process as streamlined, fair and objective as possible.
- We make sure that one of the interviewers representing a team the candidate has applied to
- We make sure that one of the interviewers is a very experienced interviewer who has done a lot of hiring and can help us set the interview bar correctly
- We know a candidate could be quite stressed and would not be able to be their best. We are there to help and guide
- What we ask would be applicable to what a new hire would do day-to-day.
Let us clarify the last point here. The questions themselves would be very different based on a position. For example, for new graduates the questions asked would be quite an “ordinary” ask to write up a solution for a problem which could be rather artificial. At the end the task itself is not as important and we prefer tasks where there are no “gotchas” and in fact the problem is rather “boring”. The motivation behind this is the following:
- The candidate could be quite stressed and would not be able to be their best.
The goal of the technical exercise is to access the following:
- Ability to understand the problem and ask clarifying questions. Making sure as a junior engineer you are on the same page as other before you start coding can save many hours of work
- Ability to explain oneself. We all get stuck, but explaining what is blocking or where the help is needed is very beneficial
- Understanding of the computer science basics. After all, coding is an essential part and a candidate is expected to prove they can use their knowledge
Now, for Senior and Principal Engineer roles we prefer not to ask any algorithm or tricky questions unless that is exactly what they will be working on when hired. It could be an exercise that mimics what they do on a daily basis, that is helping and mentoring other developers, like a code review for a specific code section. We would give a bit of background and ask a candidate to read through it. There are a couple things to look for:
- First, an overall ability of a candidate to read and understand code, spot issues and potential issues.
- Secondly, minor suggestions on code quality and overall style
- Lastly, how those issues are being presented. At the end, once hired, this person will help others and it is important to see how this feedback is communicated
Another option would be, and this is based on the position’s need, is to ask a system design question. Ideally a domain specific one, which would be close to what they would be working on once hired, rather than something generic.
As for an technical interview structure we recommend to have an hour session with the following agenda:
- 5 min - greetings and introductions. The goal is to try and calm down a candidate as much as possible, as they would perform their best if they feel comfortable.
- 10 min - questions about past experience and relevant technology questions for Sr SE roles or basic Computer Science questions to probe their knowledge for new graduates.
- 35-40 min - technical task as described above.
- 5 min - some space for a candidate to ask questions. It is less likely that a candidate would have a lot of questions in the technical round, however they might have specific questions that want to hear answers from other engineers.
We don’t pretend to know best and constantly on a lookout how to improve and streamline this critical step in the interview process. We tried and are trying different approaches including hiring a professional firm to do a technical assessment (we would review a recording of every interview) to make sure the process is as objective as possible or an async assignment. Surely, there will be people who would argue that 60 minutes interview is too much time or too little to assess a candidate, but this is what we found as a reasonable compromise as we are not fond of both whole day interview or a huge “homework” exercise (it is too demanding of a candidate as they have in most cases their daywork) or rushed 30-45 minutes ones which leave no ability to get an assessment done or leave no time for questions.
Hiring manager interview
Next, let’s talk about a Hiring Manager interview. This is a combined behavior/ culture fit/ hiring manager session, so it does not have to be one-on-one. Another team member can participate and ask questions. This one is particularly hard to give specifics about, as teams work differently and have unique team dynamics, values and might look for very specific things. So, every hiring manager would decide on their own and there is no strict interview scenario to follow. This would also help a candidate to learn about the team and the hiring manager and see they share the same values and would be a good fit as teammates. We could provide an example though, to give a sense how we do these types of interviews.
As for the technical interview portion, we would start with introductions, specifically explaining one’s leadership style and how the team works, see if a candidate has specific questions about the team or wants something to be clarified. In the end, a hiring manager is the best person to answer those questions. Next, naturally it leads a candidate to give an overview about their experience. We would probe a bit deeper about the specifics of the previous jobs, but not going back more than 5 years. For example, if a resume mentioned “performance tuning”, we could ask about the specifics, some examples of issues and how they were resolved. It helps us understand the actual experience and what part of the project the candidate was involved in. Those conversations help us understand the overall candidate’s attitude towards coding, their beliefs and values around software engineering, so we can correlate them to the ones we have in our corresponding teams. With seniority level we would expect a candidate to have a deeper understanding on how the overall system worked, as well as an ability to clearly explain it to an outsider with some technical background, but might not be familiar with all the technologies involved.
It is important to understand a candidate’s teamwork style, but this is a bit tricky and subjective we have to admit. It could be asked, for example, an experience where a candidate’s project failed and what mistakes they made. Looking for an honest answer as we all make mistakes and need to acknowledge and learn from them. If a candidate struggles to find any or, if in their example, mistakes are not theirs and they did everything right, we would continue to ask questions differently, exploring the same area, seeing how a candidate reflects on their past experience. Another example would be to see how a candidate approaches disagreements with others and what are their techniques to get those solved.
In our experience 3 interviews (recruiter screening, technical and hiring manager ones ) is sufficient to accurately assess a candidate. Even Google, who were famous or rather infamous for their long hiring process and many interviews conducted for all roles changed their mind and now argue that 4 interviews is more than sufficient to determine one’s skill level and company fit. The only exception, which is important to mention, is when a candidate could fit multiple teams. Working with a recruiter and with a candidate’s blessing there could be more than one of those hiring interviews scheduled to help not only a team but, equally importantly, a candidate to choose the team they are most interested in.
So, in our mind, the next step is a debrief, ideally right after the interview, latest by the end of the day and it is time to give a job offer. It is essential to have an offer approval process streamlined. At this point you already know that the candidate is a good fit for the team, and it would be extremely unfortunate to lose them just because “it takes about a week for an offer to get approved.” Typically, at ACV, this approval takes a matter of hours and almost never comes later than the next day.