Filtering for better tech
In a previous article, we discussed a redesigned hiring process based on generating inbound demand coupled with effective automated filters. Ensuring that this process is streamlined requires further filters that determine the quality of your candidates with minimum friction at each step from application to employment. In this post, we’ll talk a bit more about the steps in that filtering process, how to design them, and what to consider along the way.
The goal of designing these filters is to provide candidates with ways to demonstrate their capabilities and potential. It is also to allow both the candidate and the company to determine if there is compatibility between the working environment the candidate prefers and the working environment that the company provides.
The basic hiring process is as follows:
- Automated filtering
- Phone screen
- Short tech project
- In-person or videoconference interview
Before we discuss screening, we should first consider how the candidate is exposed to the job opening and factors that might influence their decision to apply.
The applicant is your customer
With the wide availability and accessibility of job boards and job application resources available these days, it’s highly likely that your ideal candidate has applied to more than one position, including yours. It serves your company well then to treat the applicant as if they are your customer. Nothing will kill their consideration of your offered position faster than a tedious or disorganized interview experience. It’s important to remember that while tech and HR staff are being paid for their time, the candidate is donating their time in order to be considered for a position with your company. This fact should be respected throughout the screening and interview process.
Not only does an efficient and time-considerate interview process make things easier on your HR staff, it also provides the candidate with a solid first impression of the inner workings of your company. This impression greatly affects their engagement as an employee in the long run.
As a practical application of this, I often require that companies provide go/no-go feedback to a candidate within 24 hours of the completion of a step in the hiring process. Don’t keep candidates waiting on the back burner while you evaluate others. With an effective hiring process and robust inbound recruiting, holding candidates in limbo is unnecessary. Regardless, it only reflects negatively on you, your company, and your team.
A few considerations will affect the success of our job posting. The challenge is to create a posting that attracts the best possible talent to apply, without unintentionally discouraging any candidates based on genetic or social factors. With mindful wording, we can ensure that possible candidates are not deciding to exclude themselves from applying.
Some general points to consider and things to avoid:
Avoid using exclusionary language such as, “If you are X, Y, or Z, then this role isn’t for you.” Instead, use inclusive terms and describe the qualities of the candidates you seek.
Avoid describing your team with phrases such as “dynamic” or “agile,” or stating that you seek candidates with a “founder’s mentality.” Experienced people know those are all euphemisms for a chaotic and unproductive environment where people are overworked. Unless you’re offering double-digit common stock allocations, it’s unreasonable to expect candidates to have the mentality of a founder. They aren’t one.
Be aware that anything you list as “preferred” is likely to be interpreted as “required.” To the extent possible, avoid listing any preferences at all. Instead, consider framing it as a list of topics that your ideal candidate will have the opportunity to learn, if they aren’t already familiar with them.
Avoid overselling the position, or attempting to present it as more exciting or complicated than it is. Describe the real work. If you are unsure of the real work, talk to a few people who are currently performing well in the role and ask them to describe their normal day. Use the overlap of their accounts to form a picture of the common tasks of the role. Many HR professionals I’ve encountered seem to believe that they need to juice up job descriptions to excite and entice candidates. This only serves to cause qualified people to feel like they don’t measure up. It is of more importance to talk about the vision for the product and the technology. Emphasize that you want to hire people who want to grow alongside the company as these product and technological advances transpire.
Having created an inviting application environment and job posting, we’re now prepared to discuss filtering and screening our candidate pool.
Step 1: Filter at the top of the funnel
In poorly designed hiring processes, the onus is on the recruiter (or a company’s founding members) to facilitate the initial candidate screening process. This necessitates hours of human effort that is ultimately fruitless when spent on candidates who turn out to be lacking in fundamental development skills. In our previous article, Rethink hiring: how automation helps tech startups get ahead, we discussed how to redesign the hiring process to improve this initial screening.
The first step is a top-of-the-funnel filter that requires no human involvement. This has the benefit of offering a more accurate and relevant pre-screening than human opinion may provide. Since the automated screen accounts only for the ability to interact with APIs and no other factors that may, intentionally or subconsciously, cause exclusion, you can be certain that there is nothing preventing potentially well-suited candidates from reaching you.
With this redesigned process in place for initial applications, the focus of human effort is no longer on outbound recruiting, but on generating inbound leads. Following the success of your team’s outreach and community building, you’ll still need a reliable screening process to help narrow down your hiring decisions. Since the basic capability of interacting with APIs has already been accounted for, your further screening can focus not on evaluating basic skills, but on discovering the candidate’s individual suitability for the position through relevant checks and projects.
Step 2: Phone screening
This step is best executed as a phone call lasting no more than 20 minutes. It can be completed by HR staff, or even an outsourced service. The purpose of this screen is solely to evaluate the candidate’s verbal communication skills. It’s okay to be upfront about the goal and just have a friendly conversation.
I often caution against underestimating the value of this step. Contrary to popular belief, amazing products are not built by isolated geniuses writing code. They are collaboratively created by knowledgeable developers who work well with their teammates and with colleagues in other departments. Communication is critical to success in modern technical teams.
Ask the candidate to explain a recent work or side project, and to elaborate on thought processes and evaluate results. The conversation should be sufficient to evaluate whether the person can communicate effectively as part of a team. If interviewing for a senior position, ask them to describe a situation in which they had to communicate bad news or fire someone. Make each question about the candidate, and use the opportunity to learn more about them as a person. If they have questions about the role, you may choose to answer them, but keep in mind that this step in the process is intended to evaluate their ability to communicate things to others.
Step 3: Complete a 2-4 hour tech challenge
At this stage of the interview process, the candidate has already been evaluated for basic technical competency and communication skills. Your company should have a general idea of whether or not your staff might enjoy working with them from a personality perspective. The goal of this challenge will be to evaluate the candidate’s technical skills.
It’s a waste of time to rely on contrived measures like whiteboard coding or algorithm tests in order to evaluate development skills. Such tests are almost entirely irrelevant to the majority of development work, and likely do not represent the day-to-day challenges the candidate will face with your company. Instead, it’s up to your company to create a relevant and comprehensive tech challenge. It should be demonstrative of the work that the candidate will be expected to do in the role they’re applying for. The time to build something to satisfy the challenge should take no more than 2-4 hours of the candidate’s time.
In order to ensure that the task is representative and fits within the general time range, have some of your technical staff who are involved in hiring complete the challenge themselves. If they cannot, then it’s likely the challenge is either too difficult or too extensive. Ask your staff to recall their level of ability when they were hired. Have them use that knowledge to provide constructive feedback on the design of the challenge project.
You may choose to integrate technologies that your company uses, or give the candidate a chance to display their own creativity and style. Whatever the challenge, it should be unique to your company’s field. The scope should be narrow enough that there is no concern on the part of the candidate that the company will simply take their code and use it in a company project without compensating them. There should be zero concern that your company is attempting to crowdsource solutions to existing technical problems The challenge should not implement something new that the company has never worked on before.
The goal is to gain an impression of the candidate’s process when it comes to building software. The evaluation of their work should include basic checks for things like copy-pasting from Stack Overflow, and if their code compiles and runs as intended. Further, you can evaluate how they handle comments, automated testing, monitoring, deployment (e.g., docker/docker-compose), database interaction, performance, profiling, and anything else your company specifically values.
I’ll provide a concrete example. For some data science/engineering positions, you may ask candidates to build up a processing system that fits the following criteria:
- It takes a JSON or CSV file of arbitrary size and with arbitrary keys/fields.
- It processes each record using all available CPU cores, and store the results in a SQLite database.
This example is essentially an examination of whether the candidate understands that they cannot do things like read the whole file into memory (instead, they should use per-record/stream processing). Since candidates must use all cores, this challenge should lead to consideration of topics such as parallelism, concurrency, queuing, and shared state/stateless processing. Developers who are familiar with these topics would find this to be a very straightforward task, making it surprisingly useful for filtering out people who may not be effective in a data engineering/science role. A project such as this serves our purposes of evaluating and screening applicants without being overly time-consuming nor overly advanced.
Ensure that senior devs understand how to do code reviews on the challenge, and which factors are to be considered a fail versus simply requiring further discussion with the candidate. The project should be judged on the expected capabilities of a person who is entering the role, not compared to those of an experienced senior who might be nearing promotion. Ensure that the evaluation is held to high standard. Anyone who meets that standard should be invited for an in-person interview.
Step 4: The in-person interview (or for remote hires: final phone interview)
At this stage of the process, all the necessary checks have been completed. The candidate has demonstrated the communication skills and technical competencies required for the role. Barring any last-minute red flags, your company should be comfortable hiring this person. The objective of the interview is to have some in-depth conversation to determine if any dealbreakers arise, and if none do, to offer the candidate the position.
In keeping with the goal of making the process as fast as possible for the candidate, have a contract prepared beforehand. Following the interview, have your decision makers give a quick thumbs-up or thumbs-down vote. If it is decided that the candidate should be hired, offer them the contract right away. It is important and in your company’s best interest to emphasize that the terms are open to negotiation. Some people, especially strong introverts and female candidates, are statistically less likely to negotiate offers confidently on the spot and in the moment. To take advantage of that fact is unfair and will reflect poorly on you, the company, and the team. To ensure the long-term job satisfaction and retention of your new hire, it is prudent to invite their input for a fair and equitable environment. Once you’ve emphasized that it is open for negotiation, and ask the candidate to consider the offer and give a reasonable deadline for them to return with their decision or counterproposal.
Step 5: Onboarding
Now that you’ve successfully chosen and secured your new hire, it’s time to consider onboarding. Onboarding is critically important in ensuring that the employees you’re hiring are comfortable and productive in their new environment. Ensure that you have the proper materials and documentation to assist candidates during the onboarding process. It is common for startups to want to rapidly increase their headcount, but without established onboarding practices to support a strong company culture, rushing is almost universally harmful. Poor onboarding results in a fragmented and unproductive company. You’ll have better output from your teams if you hire at a sustainable pace that allows team standards to be kept high. If too many people are quickly onboarded to teams with weak company culture, standards are lost and chaos ensues.
Many companies consider onboarding to be a process that starts on the candidate’s first day as a new employee. While that’s true to some extent, there’s no reason to wait that long. If you have documentation prepared, provide it to the candidate at the soonest possible time so that they can start familiarizing themselves with the state of things. For technical hires, this documentation typically consists of system architecture diagrams and documentation, operation flows, and coding standards. Providing onboarding materials at the earliest opportunity also gives your candidate the chance to review them when they are most excited about their new role. This can further increase engagement, for the benefit of all.
Additionally, if you are hiring multiple candidates, consider having them start in cohorts. Everyone comes from different backgrounds, so take full advantage of the opportunity to clearly communicate how things work. Having a number of technical candidates simultaneously exposed to the same information and processes helps ensure consistent standards when they begin making contributions to the company. This is the best opportunity to discuss and instill company standards in all areas.
When executing each step of your hiring process, constantly consider the effectiveness of the steps you’ve designed. Like any other process, prevent stagnation by evaluating your successes and improving wherever possible. Keep in mind that the steps suggested here are a general guide and starting point. Your company’s own unique culture should be on prominent display to candidates throughout the hiring process, allowing the best possible chance of a compatible partnership. With an inviting, effective screening process that celebrates your company’s culture, hiring can be more efficient, sustainable, and successful.