India produces lakhs of engineers every year, and most of them know that coding is a sure shot way to get an impressive job. Hence hiring a programmer shouldn’t be difficult. But hiring a good programmer or figuring out how to hire a good programmer is extremely challenging. It becomes even more mind-boggling when you are hiring a full-time programmer while you are bootstrapping in early stages. In addition to coding skills, lots of other things come into play — culture fit, flexibility to change, optimising for speed and quality and work ethics. How do you vet for such traits? Paying a high salary alone is not the answer to hiring a fit for your team! How do you know you are not throwing away cash?
You do the best interviewing you can and then bring the most qualified candidate on board to join the team. If it doesn’t work, you try another candidate until one stick. The problem is spray and prays method doesn’t work in building fundamentally strong teams. We’re sharing our approach to hiring our first two teammates who have stuck with us for almost a year now. And this is the same approach we’re going to use hiring programmers — be it remote or on-site.
4-Step hiring process:
- Statement of purpose
- 6–8 hour programming challenge
- Technical screening on Hangout/ Skype -
- Culture fit evaluation
The result of this process tells us the following about the candidate
- Has done his homework of knowing the company, its business and his motivations.
- Can communicate effectively
- Is technically capable of building products from scratch
- Is flexible to change
There are minimum of 24 hours of gap between any step. The buffer allows us to evaluate the response of the candidate and decide if we want to take it to the next step. We do not spend more than one meeting (usually on Slack) to decide upon it — that’s the discipline. It’s an agile process where each step builds on the success of the last step. If at any stage, the company decides to terminate the process, we inform the candidate via email and then continue with our day.
Overall the goal of the process is to save time, both ours and the developer. A candidate who is actively seeking a job will care to spend time with us. Window shoppers are automatically weeded out. We invest time in meeting the candidate only after someone has impressed the team after taking the programming challenge. Why? Time is valuable. It's the resource we cannot renew and if I can save our team the hassle of meetings, travelling, etc. then I will do so. That’s what this accomplishes. The candidate usually appreciates it as well as it saves them time and hassle. Saving time for my company and employees is what I’m going for in these early steps.
Step 1: Statement of purpose
Objective: We are looking for wordsmiths.
Step 2: Programming Challenge
Objective: Identify if the candidate can solve problems with code and gain insights into the quality of code that is produced.
We specify the programming language to the candidate well in advance to prepare for the programming challenge. The length of the programming challenge depends on the experience of the candidate. If the candidate is a fresher, we usually expect a response in 8 hours while an experienced programmer (3–5 years) should be able to complete the challenge in less than 6 hours. A candidate is allowed to take the programming challenge at home in the comfort of their surroundings so that the candidate can focus on solving the problem than spending time getting acquainted with the new surroundings.
What happens if they cheat? They will call their friends and family to complete the challenge or hunt for a solution on the internet or find an open-source that does the same job. That’s a high possibility, and that’s the world programmers live in. If programmers do the same at their work, who cares. If the candidate is truly a hack, then we’ll know fairly quickly. Our team is going to sniff it, and at that point, we’ll decide whether to retain the candidate.
Programming challenge is a great equaliser not only because it allows you to gain insight into the quality of code that the person writes but also about how effectively the candidate can communicate, his best practices, comprehension of instructions, using git and his follow-throughs to succeed.
“This challenge has turned out to be an auspicious moment for both the candidate as well as us. More than 80% of candidates never finish the challenge — usually, they get lucky in getting a job offer from another company precisely during the programming challenge!”
Good enough a reason why you should take this challenge!
Of the remaining 20%, only 10% complete the challenge and we’re left with 1 or 2 good candidates. If there are more, then it’s a good challenge to have.
We hire the top candidate and let the others know that we decided to go with someone else, but we may be in contact with them shortly because we were impressed and we may need to grow our team. This leaves the door open for future conversations with those candidates.
Step 3: Technical Screening over Skype/Hangout
Objective: Check his problem-solving skills and ability to perform the job at a quiz level.
This technical screening is a follow up to the programming challenge where most of the questions revolve around his coding practices during the challenge and finding the reason behind it. We keep the questions open-ended so that the candidate gets to explain himself. Another programmer on the team performs these types of interviews. If the candidate starts failing on too many occasions, then it’s a red flag. The point is to save time during this process. Cut the interview short and then move on.
Step 4: Culture fit
Objective: Can we spend informal time with the candidate
At this point, most of the candidates probably are certain that they’re through the process. However, we don’t let the candidate’s excitement be the determining factor — we still need to determine if this is a person our team can work with and enjoy being around. At this point, I like to bring the candidate into the office to meet the team and work with us for a day or two. This is an excellent way to let the candidate get a taste of things and people to come. We usually have lunch and snacks together; this allows us to gauge their personality and hopefully identify any traits that are not so desirable in our team. We as a team need to be able to get along with this person and enjoy their company. We’re going to be spending a lot of time together, and if we don’t like each other, well, that probably won’t work out too well. We usually check if we can spend informal time together. We also check with the team at the end of the day — at what point the person will leave the company. If it is something that requires more of a mental shift than a physical effort, then it’s a red flag.
e.g. we had someone who got through the first three steps with desired results. We all were excited to get him on board. But we found out that he did not take up his previous job in Pune because he wanted to live with his parents in Delhi. Not that his parents needed his support, but he was not secure in living without his parents. We decided that he is not someone who would be comfortable with the dynamics of an early-stage company and hence he would not click with us. In the end, we did not offer the job.
Finding good talent is hard, and it is even harder when you have limited means while bootstrapping in an early-stage company. The steps are indeed time taking, but it has helped us save time in finding the developers our team needs. It’s about matchmaking, and we take time. We believe that it’s better to wait for the right candidate than hire a mismatch. Step 2 is the equaliser. This is where the grains are separated from the chaff. The “can-do” vs “cannot-do” emerge at this stage. I’m always surprised to see how many people with strong resumes never make it past this stage. The harder it is to get through, the stronger are the chances that the candidate will emerge as a champion in the team.