Intro

As someone who’s worked as a data lead or head of engineering for the past years, I’ve learned a lot about finding and hiring great engineers. In this post, I want to share my insights, tips and tricks, and tactics to succeed in recruiting software developers, data engineers/scientists, and other related software roles in the context of a tech startup.

What will you get to read

  • Recruitment process
  • How I evaluate candidates
  • How to find good candidates

This blogpost is written from the perspective of a head/VP of engineering, CTO, or similar at a small startup.

The process

Interview with you

The first meeting with you is crucial: it’s 50% about you evaluating the candidate and 50% about trying to get them excited to work for you. I look for three things in my candidates during the first interview:

  • Passion for our field, technology, or anything, really. If a candidate has a sense of wonder and curiosity, and uses that to explore, it’s awesome to work with them as a manager. If you can direct passion into a productive path, you’ll have a fantastic team member in this candidate!
  • Ability to communicate hard problems, and read the room when they need to change their approach in their explanation.
  • Ability to reflect on their own performance in a constructive and insightful way.

To find these traits, I ask them to “tell me about a project they have done.” It could be a spare-time project, school project, or work thing—it doesn’t really matter. I then ask a lot of follow-up questions! I let them explain the hard and tricky details, ask them if they made mistakes, why those mistakes were made, and what they would do differently in the future to avoid those mistakes. People are usually excited about their projects, and this usually becomes a great conversation.

Next, I showcase all the “cool things we do” as a startup, demo our product, and explain how fun it was to solve some of the cool problems we’re working on. I look for follow-up questions from the candidate. Do they get excited when I say we use graph databases? Do they start pitching ideas for improvements?

Finally, I wrap up this interview by going over the full process, benefits, and discussing our culture and what it’s like to work for us.

Case

The case is a topic of much debate, but in my experience, I prefer assigning home assignments where the candidate has one week to solve a problem and return their results and code. A case should take no longer than 4-5 hours, preferably closer to 3 hours. It is essential to test the actual qualities you are looking for, rather than just the quality of the code. For example, I typically look for someone who can solve problems under uncertain or ambiguous descriptions, so I intentionally keep the case open-ended to see if the candidate will make the necessary assumptions and reach a final result. Additionally, I expect candidates to have a good understanding of the domain they are working in, so it can be beneficial if they research your problem, read up on the domain, and gain extra knowledge that can help solve the case. For instance, in my case at Debricked, I mention “different vulnerability types,” which directly translates to the Common Weakness Enumeration (CWE) standard. If a candidate spends five minutes googling, they will likely find the standard and have a significant advantage in my case.

In addition, it is crucial that the case is representative of the work the candidate will be doing. Generic programming cases can be dull and may not accurately reflect the skills needed for the job. Instead, ask them to use the frameworks you use, ensure the problem is within your domain, and incorporate a genuine business issue into the case.

Furthermore, the case should be exciting and enjoyable! If the candidate responds positively with, “If I get to solve these types of problems at your company, that would be fantastic!”, that’s ideal! Most cases can be tedious and unengaging, so making yours fun and intriguing can give you an edge in the competitive hiring landscape for software engineers.

But what about not having a case at all? In my opinion, the best indicator of a good hire is a successful result from the case, and it also demonstrates the seriousness of the hiring process to the candidate. Hiring exceptional engineers requires thoroughness in the hiring process, and promising the candidate that all their future colleagues will be outstanding engineers is an excellent selling point.

Second interview

The second interview is a critical step to obtain a second opinion and mitigate the risks of a bad hire. Investing time and effort in the hiring process can save significant expenses down the road. Depending on the position, I conduct the second interview either with another manager or a potential teammate. This interview can be more relaxed, with the aim of assessing the candidate’s cultural fit within the team.

During the second interview, it is essential to ask open-ended questions that allow the candidate to share their experiences and work style. Additionally, it’s an opportunity to clarify any questions or concerns that may have arisen during the initial interview.

The selection of the interviewer for the second round depends on the role being hired for. Sometimes, I let another manager handle the interview, and in other cases, I may choose an engineer from the candidate’s future team. If I am particularly impressed with a candidate and want to showcase our team and culture, I may opt for the engineer to conduct the interview. However, if I am seeking a second opinion, I usually ask another manager to conduct the interview. Of course, the opinions of the engineer and manager are not mutually exclusive. I value the input and opinions of both, especially regarding the candidate’s technical skills and cultural fit within the team.

Close the candidate

I don’t have any particular insights here, other than that if the candidate is excited to work for you, this should be easy! Just be clear and direct with the responsibilities of the role, and work swiftly in answering questions for the candidate. Speed is always of the essence in recruiting.

How do I find good candidates

Collaboration with my local Uni

Thesis Projects: Having 1-3 thesis projects ongoing at all times can be an excellent way to showcase the best side of your company to potential candidates. It can also be an opportunity to build a relationship with the university and its students. Moreover, reaching out to your previous students who completed their thesis projects can be a valuable source of talent for your company, and they may be interested in joining your team if there are suitable job openings.

Summer Workers and Interns: Another way to collaborate with universities is to offer internships and summer work programs. This can help you identify talented and motivated individuals who can bring new ideas and perspectives to your team. Additionally, it can be an excellent opportunity for students to gain practical experience and enhance their skills while providing your company with additional support during busy periods.

To attract the best candidates from universities, it’s crucial to showcase your company’s values, culture, and work environment. Provide clear expectations, feedback, and growth opportunities to foster a positive work experience for interns and other students.

Friends

If you have close friends who possess the skills and qualities you’re looking for, consider hiring them! While there are some risks associated with hiring friends, it can also be beneficial because both of you have skin in the game to succeed. Additionally, since you have a personal relationship with your friend, you both have a vested interest in maintaining that relationship, which can lead to greater accountability and dedication to success.

In my opinion, hiring friends can provide an unfair advantage for both the employer and the friend, so it’s worth tapping into this network when looking for potential candidates. Moreover, hiring friends can significantly reduce the cost of recruitment, as you may not need to interview as many candidates or review as many CVs. In my experience, some of the best hires I’ve made have been through personal connections. However, it’s important to always get a second opinion when hiring your buddies.

Generate a good reputation

A good reputation at local universities can be invaluable when it comes to attracting smart and talented junior hires. Consider partnering with universities by offering internships or sponsoring student projects to showcase your company’s values and culture. Having great thesis projects, internships, and hackathons has worked best for me so far.

Active participation in local dev-communities and conferences can also help create a positive reputation. Attend and participate in meetups, tech talks, and other industry events to build relationships and gain exposure to a broader pool of potential candidates. Additionally, speaking at conferences can help establish your company as a thought leader and attract interest from talented individuals who share similar interests and values.

TL;DR + Conclusion

As someone who’s been fortunate enough to have had experience recruiting software engineers, data scientists, and other tech roles for the past years, I’ve learned a thing or two about what works and what doesn’t. It’s a challenging process, but with a bit of luck and a lot of effort, I’ve managed to find some great candidates along the way. During the initial interview, I try to get a sense of the candidate’s passion, communication skills, and reflective abilities. And while I like to think that my case assignments are representative of the actual work they’ll be doing, I’m constantly learning and evolving my approach. When it comes to finding good candidates, I’ve been fortunate to collaborate with my local university and offer internships and summer work programs. And while I’ve occasionally hired my own friends, I always make sure to get a second opinion and not let personal bias cloud my judgment. Ultimately, I’m just trying to do my best and make a positive impact on my company’s growth, and I hope this post brought some insights to you as well!