Why
Hiring is important. Your team is the most valuable asset of the company. Products come and go, markets and technologies change. The team is what makes a company a success! If you’re running a tech company, your software engineers are going to play a vital part in your success. This post explains how to hire best engineers.
If you give a good idea to a mediocre team, they will screw it up. If you give a mediocre idea to a brilliant team, they will either fix it or throw it away and come up with something better. - Ed Catmull. Co-Founder of Pixar and the author of Creativity, Inc
1. Sourcing candidates
The first step, source a lot of candidates. Hiring pipeline is a funnel. There should be a lot of candidates at the very top of the funnel. Only the best engineers who are the right fit will get the offer. In my experience, from 10 engineers there is 1 decent engineer. Also, keep in mind that about 50% of candidates accept the offer. In order to find the right people, source a lot of candidates. Here are the places to look at:
- References. This is the most effective way to get candidates. If a person you trust recommends you an engineer whom he/she worked with before, you should contact this candidate as soon as possible. Great developers want to work with more great developers and this kind of candidates tend to fit well culturally.
- LinkedIn. Look at some top developer profiles on LinkedIn. On each profile, there is usually a section called “People Also Viewed” with even more profiles. You can click on each of them and then, rinse, repeat. Reach out to developers asking for their interest. You never know who is looking or who is ready to move on.
- Job Postings. Create a job posting on Github, StackOverflow or Angel List. Keep in mind, the market is hot, so make sure your posting looks attractive.
2. Phone screen
Now that you got in touch with your prospective candidates, schedule a phone screen with them. You’ll have to do a lot of phone screens so it’s important to keep it efficient. I usually do a 45-minute call which is broken down into 3 parts:
- Ice-breaker. I tell about the opportunity and ask questions about the resume. Starting with a question like “How much do you know about the company X ?” can save you some time so you can focus on filling the gaps. Then I ask a couple of questions about the resume. The key here is to keep your questions focused. In this case, you can verify whether they really have the experience listed.
- Simple coding exercise. I usually do interviews over a video chat like Google Hangout. I ask a candidate to share the screen and implement a simple coding challenge. The candidate is encouraged to ask questions and walk me through the implementation. This step is meant to be a conversation rather than coding in silence. Seeing a person code in real time reveals a lot of things like debugging skills, algorithm choices and communication skills.
- Finishing questions. This is where high-level architecture or framework knowledge questions go. At the end of the interview, I answer questions the candidate has for me.
3. In-house interview
Be mindful about your and candidate’s time.
Bring the candidate on-site to show them around the office and meet the team. Your team’s time is valuable, so is the candidate time. Some companies prefer to have a full day on-site interview. I usually keep it short with just two rounds of interviews with developers. Developers go in pairs. Make sure the team synced up before the interview and everybody knows which questions to answer. It’s important to probe for these things:
- Code quality. The most important thing is to figure out if they can write great quality code in a reasonable timeframe. It’s good to give a candidate a moderately complex problem and work with them on coding a solution. You want to make sure the candidate makes reasonable choices. It’s ok to make minor mistakes if they can see it and fix it. Keep in mind that the code you see during the interview will be the code you’ll see in your code base if the person gets hired.
- Cultural fit. Would you want to work next to this person every day? Does the candidate communicate well? Do you like the person’s attitude? If you’re interviewing a person, these are the questions to ask yourself.
Treat the candidate the same way you would like to be treated.
Developer time is a finite resource. If it’s clear that the person is not a fit from the first pair of interviewers, tell the candidate so and stop the interview. Have you ever been in the interview where you didn’t hear anything back? It’s not fun to be in this situation so treat people the way you would like to be treated. Tell the candidate why it’s not the right fit and what they can improve. If you see the potential, tell the candidate that you would like to touch base in the next 6 to 12 months to see if the situation is improved. If you’re not comfortable delivering this feedback in person on the day of the interview then walk out the candidate and follow up the next day over the phone or email.
On the other end, if the candidate made it to the end of the in-house interview, communicate to the candidate that the interview is finished. Tell the candidate that you’ll get back to him/her in the next couple of days.
4. References
Request at least 3 references and call each of them. Ask them about their experience working with the candidate. Ask what the person is good at and what he/she needs to improve. Keep in mind that it will take time since people have their own schedules. It’s important to move quickly. If you’re super excited about the candidate you can make an offer contingent on a reference check.
5. Offer
You should be excited about the candidate you would like to hire. Get all participants in the room, have each interviewer to write down their outcome. Each person’s outcome should be unaffected by anybody’s opinion. Go around the room where each person reveals the score with the reasoning behind it. If there is a consensus in the room, it’s a pretty easy decision to make. If you’re on the fence, it may be tempting to bring the candidate for another round for more information. From my experience, you don’t get more information after the in-house interview. Make a decision with the information you have. If you’re not sure, the answer is no.
Keep in mind, great software engineers are not on a job market for a long time. You have to move quick. After you know the outcome, communicate it to the candidate. If the answer is no, explain why politely. If the answer is yes, communicate it to the candidate and send the candidate an offer letter. Give a candidate some time to think and follow up on a decision. Good luck!
Final words
Hiring is a long play game. You should never hire people you don’t like. Even if you have a lot of work to do, it’s never worth it. Be patient and keep interviewing. Every person counts and hiring the right software engineer will greatly increase your chances of success!