Hiring humans at CARTO Infrastructure team

22 Nov 2017

During this year at CARTO we have given a qualitative leap towards having a good hiring process.

Justyna joined CARTO in February, and, among many other things, she has been pushing and helping everyone to have better hiring processes.

I’m going to talk specifically about the Infrastructure team. This year is being particularly active because of the need to grow and also because of some rotations in the team. Hiring is a very exhausting process. Reviewing candidates applications, doing sourcing, interviews, technical tests reviews, etc.. In the end, I want to make sure that the right people join the team. Because of this, I prefer to spend all the time needed on designing a good process so we try to maximize the number of matches.

Saying this it may seem I’m an expert in the matter. The truth is that before 2017 our hiring process was crap. It wasn’t diverse, inclusive, smooth for either the candidate or us and, obviously, it was no fun. We were able to hire mainly thanks to friends, employees contacts and the company’s hype.

Let me tell you about my first conversation with Justyna. She didn’t pay much attention to the job description I carefully wrote. Instead of that, she asked me basically five questions:

  • How will this role contribute to the company objectives
  • Why the candidate should work with my team and me
  • How will this role be evaluated
  • What are the projects and challenges on this position? What will the candidate learn?
  • What will the candidate work on immediately after joining the team

Simple. I mean, they are pretty basic questions about the job, aren’t they? You probably believe you know how to answer them accurately but you maybe it’s not as simple as that…

I started writing the answers to these 5 basic questions in a doc. While I tried to answer in detail, I began to think about many other different aspects of the job or the offer. Without noticing I ended up designing a complete hiring process with a 25 pages document, that will last forever. Of course, I relied a lot on my team. It’s important that everyone shares the same goals and values about the process. In the end, the people that are hired will spend most of their time working with the rest of the team.

These are, for me, the keys to a good hiring process.

Have a very clear idea about the skills you look for

Companies tend to look for a lot of skills, and especially technical skills. You have probably seen job descriptions with a never-ending list of technical requirements (PostgreSQL, docker, nginx, chef, ansible, python, ruby, bash, etc..). Spoiler: this is bullshit. You don’t need so much detail (and so many skills) unless new hires are going to perform always a particular set of tasks (which is not common in small/mid companies). Also, a person that knows so many things probably doesn’t know any.

You probably need only a few technical skills which will be related to those things that you work with every single day. I can count with one hand’s fingers the technologies or tools that we work with every day at CARTO: Linux in general, chef and python. This group of “requirements” can even be smaller. For example, chef and python are things that the candidate will learn if she/he already has experience with similar frameworks/languages. In summary, I’m confident that the only technical requirements a candidate needs are experience working with Linux servers and coding skills. As simple as that.

Another thing I have learned during the last years is that you want/need different people in your team. Different gender, different culture, different working experiences, etc.. You need people that share mostly the same values, but that think differently and solve the same problems from different perspectives. That’s what will make your team keep growing and innovating.

In my case, the people I look for must have several soft skills like team working, ability to analyze, understand and explain things, initiative, care for detail, ownership, and energy. In general I look for people that are going to be able to contribute to the team and bring something new like a different perspective, and of course, people that I would like to work with after knowing her/him.

Make it personal

We are hiring people, not cattle. I firmly believe in quality over quantity, no matter how much work you have. Spend time on learning about the candidate. Don’t shoot everyone you see on LinkedIn and, for god’s sake, don’t send automated emails. Don’t do it. Don’t.

If you are sourcing, you must be excited about knowing every candidate you decide to write an email to. Read carefully the candidate’s cv, hobbies, blog, comments on StackExchange, etc.. You will either get even more excited or maybe you decide to pass. In any case, once it’s time to send the email, be sure that you know how this candidate can contribute and make it clear in your email. Make the candidate understand that you firmly believe that she/he can be an excellent addition to your team, not only because you think she/he will contribute to the success but because she/he will enjoy and learn to do it too.

This is not a common practice, to be honest. Most recruiters either send an automated email or they stick to a keyword they saw in your LinkedIn profile. It’s a loss of time and generates frustration and also distrust towards the recruiters in general. Don’t be that recruiter, please.

Simple, reproducible and inclusive

It’s important that you evaluate all candidates based on the same topics. Although I don’t believe in having lots of technical requirements I need to be able to assess the candidate tech skills. We have interviews and technical tests (I will talk about them later).

When your company grows you realize that you are not able to keep hiring only friends anymore and that even people that love your company want to join your team they also have a life. Evaluate everyone equally but keep your hiring process flexible. For example, if one candidate is not able to send your technical test results in time, maybe it’s not because of not knowing how to do it or is a bad worker, but perhaps because she/he has another job, kids, etc..

Just try to be transparent with the candidate and show your support and will to help during this individual process.

Full transparency

One of the best things about writing a hiring document is that you force yourself to write every detail about what you are looking for, how the process will be and what exactly the candidate should expect when joining your team.

You realize that not everything in the job position, your team or the company is super cool. And that’s ok. However, when you identify those things you have two options, remove/solve them or just be transparent about them.

Nobody’s job is perfect. However, there may be some unnecessarily bad things. Sometimes you don’t realize about those things until you don’t put yourself in the candidate’s shoes and try to explain it transparently. That’s an excellent exercise. A hiring process design can help you identify deeply rooted problems in your organization.

Let me use an example. I believe you have all seen job descriptions saying things like “required ability to handle multiple simultaneous priorities.” I have. It depends on the job when you see that, that’s probably a smell. This is similar to when you see an apartment advertisement that says “very well illuminated basement.” This probably means that there are big lamps in the apartment when what you imagine is an apartment with wide rooms with natural light. So, if you require a candidate to be able to handle multiple simultaneous priorities maybe you have an organization problem and your employees are frustrated or stressed.

So, don’t try to hide anything in the process. If you identify something really bad, try to fix it. If you cannot, or there are just some parts of the job that are boring that is entirely ok. But be transparent. I’m sure that for every boring or lousy part that the job position has there are also several pretty good that the candidate appreciates.

Salary range

This is a controversial topic. Some people don’t like to publish a salary range and some people get mad when you don’t do it. I don’t usually publish a salary range. Not because I’m trying to make a fool of the candidate or pay less money. It’s because I don’t know the candidate in advance and I use a process to try to learn how the candidate will contribute to the team so I can finally present the best financial offer I can according to the skills seen during the interview.

Said this, in the very first phone screen we describe the different salary ranges depending on the candidate skills. All the involved people in one person hiring process talk constantly to give internal feedback. We pay much attention to these conversations in case we identify, at any moment, that the candidate’s expectation may not match with what we are seeing in the process. In case this happens, we tell the candidate directly that may decide to continue or not. We don’t like to waste the candidate’s time.

So, we don’t publish the salary range because unless you want a person that will contribute in a particular way you cannot commit to a salary in advance. But I believe in being very transparent and clear during every step of the process, so everyone has a pleasant experience.

The current process

First of all, I believe there is much room for improvement in our current process. We pay attention to every step of every interview and ask a lot of feedback to the candidates. That way we can keep improving it. Actually, during this year, it has already had a couple of slight changes.

Very important. Although the candidates want to join your team, it doesn’t mean that they should do whatever needed to get the job. Nobody should need to sacrifice a goat in order to make it. They have a life.

In the other side, your team is very busy with the daily routine. You want (you want) your team to be fully involved in the process, but you should not demand a lot of time from them. The key is to find the right balance, always focusing on effectivity. Every step of the process must serve an objective. They must be insightful. And the insights must be wholly related with the required (good to have) skills that you defined previously. If any specific step of an interview doesn’t help you decide if that person is going to contribute somehow or doesn’t give the candidate a better idea about what to expect in the future, probably you need to either remove o modify the step.

Our current process is something like this:

  • First, one person from HR has a phone screen with the candidate. It’s a friendly conversation focused on telling the candidate a little bit about the job position and to understand the candidate’s expectations and motivations to join the team
  • We send a take-home test. It’s a very enclosed code test with precise inputs and outputs. We also give direct information about what we expect to see in the code. The exercise is simple and fast to do and to review
  • We have a 1-hour conversation with the candidate where we talk in detail about the company history, our values, how we work and what type of projects we work on. We also ask the candidate to tell us something she/he’s passionate about the job or about one technology or something like that
  • We have a 1-hour technical interview about some Linux systems scenarios where we help the candidate to debug the problem like in a role play
  • Finally we have two face to face interviews. The first one is an architecture problem also in a format of role play and the second one is a general conversation with our VP of Engineering.

During the first phone screen, our recruiter explains how the entire process will be and keeps giving feedback to the candidate after every step. We try to make the candidate’s life as easy as we can. We do this by providing flexibility to choose the schedule of every interview and to give flexible times to complete the take-home test. We also give flexibility about the type of the interview (remotely or face to face). We like to meet the candidate in person in the last interview though but, if needed, we offer help to the candidate to come to the office in the interview.

Everybody likes numbers. During the first months, this new hiring process took more or less 11h (for every candidate) to us and, at the very least, 11h to the candidate. After several improvements, now it takes around 4.5h to us and 5h to the candidate. Not perfect. But we are working on it.

The feedback

When you design a hiring process, you design for people. Candidates will meet a lot of companies and companies will meet a lot of candidates. Most of the times there won’t be a match, for any reason. You must expect that everyone has a nice (and, if possible, rewarding) experience.

Our process is not perfect and it won’t ever be because every candidate is different. However, we make a lot of efforts to, at least, keep improving. We always ask feedback. I have to say that I’m tremendously satisfied with the feedback we usually receive. Very different people have told us that they have either enjoyed or learned during our process and that they have been delighted to know us (either if they finally joined or not). I’ve done a lot of interviews and hired people in the past and I never received this type of feedback and in such amount. Of course, we have also received some critiques, most of them constructive, that we have used to improve the process.

At the same time, we always give feedback about the reasons why we decide to finish a candidate’s process before the last step.

I personally can say that hiring, although well done, is exhausting. However, if well done, it’s a rewarding experience. I’ve got to know a lot of interesting people that I hope to see again in the future.

By the way, besides this is something I really wanted to tell I was also extra motivated by some conversations with Félix and also by the blog post he wrote some time ago that you really need to read.