The first non trivial task is to define what you're looking for, that's one of the most critical parts in the process. Skipping this part and you can end-up with poor results.
When you're buying shoes before going to a beach party you wouldn't buy high heeled shoes, no matter how pretty they look.
After you know what you are looking for there are 2 important questions to answer when you hire a new team member:
1. Does the candidate have the required technical skills?
2. Will he/she fit in socially?
For answering these 2 questions we have a lengthy process, I would like to share with you 2 of the phases which I find very helpful:
1.Interview by the team members
2.Technical exercise – a programming exercise given on site.
Interview by the team members:
I find many advantages to interviewing a candidate by the team members. It is a vote of confidence in your team members. For me it is like saying "I trust you and I think you are capable of knowing what is 'good' for our team". I also think that being part of the decision making of the "future" composition of the team to be empowering.
In addition it gives another set of skills to your team members that they might need in the future, which is great.
By making my team members part of the recruiting process they feel committed to the success of the new team member. I find them to be more supportive and involved in helping the new team member feel at home.
There is another very important aspect to recruiting, you want to make sure the candidate wants to come to work for your company, that he is aware of how great it is.
Talking to his peers might make your candidate more enthusiastic about coming to work for your company. The candidate feels more comfortable asking a colleague questions about the day to day work and usually finds the answers to be more reliable.
Many people get to meet the candidate on the way which I find beneficial for both sides.
It gives the candidate a better understanding of the type of people working for the company and it gives the company a better chance to evaluate correctly the candidate.
A great byproduct of having your team members interview candidates is freeing up your time to focus on other tasks. Delegating in this case works great (for me it is more than a byproduct, it is a significant time saver)
It is worth mentioning that not every team member is suitable for performing interviews, for example new team members, but that's for another post…
This is a great step in our interviewing process, it separates the candidates with good theoretical knowledge from the ones that can also deliver results.
The technical exercise is about using new APIs and reading existing code, not about testing which technologies and framework the candidates already knows.
For example, I wrote a bowling simulator. Before each match the bowler has to deposit an item with the cashier and retrieve it after the match ends. The code was written for a single threaded match and the candidate needs to modify the code to run more than one match simultaneously.
This step checks the ability to handle a task from start to end and deliver results at the end. In this step I pay attention to the questions the candidate asks me, for example there are candidates who ask a lot of questions along the way, which might indicate they need more guidance, and there are the ones who don't ask questions and solve a problem which is different than the one presented them.
Another thing which I find very important in this step is that by the end of the exercise the candidate produces a program which I can run.
It is less important if there are bugs or if his program solves 100% of the problem. I find those who are actually capable of delivering some kind of solution to have more potential.
I also put less emphasis on the time it takes, obviously it cannot take 2 days but I don't think that if some candidate takes 1 hour and another takes 2 hours has much significance, I usually tend to relate it to the stress the candidate might feel during an interview.
Anyway there is no guarantee for the results of the recruiting process, it can always surprise you.
Make sure you take into consideration all the things you have noticed along the way, the candidate's technical skills, behavior and general attitude. If you have a clear picture: "Yes, I would like to work with this candidate in the future" or "No, this candidate is not suitable for the team needs", then you probably did something right.
I would like to thank Oded for helping with this post.