Recently, I red an article about 4 Ways To Avoid Hiring The Wrong Person. While I agree with all of them, the first one resonated the most with me. Having been in my share of interviews myself as applicant, having done them for a lot of years now as interviewer and talking to a lot of applicants, it strikes me how many software engineers are hired without having to demonstrate their most important skill – coding. This mistake has been known for a long time now – the earliest reference I am aware of being the all-time classic book Peopleware by Tom DeMarco and Timothy Lister. That book was published more than 25 years ago initially, which is an eternity in our profession. Here is a fictional conversation from this book:
Circus Manager: How long have you been juggling?
Candidate: Oh about six years
Manager: Can you handle three balls, four balls, and five balls?
Candidate: Yes, yes and yes
Manager: Do you work with flaming objects?
Manager: …knives, axes, open cigar boxes, floppy hats?
Candidate: I can juggle anything
Manager: Do you have a line in funny patter that goes with your juggling?
Candidate: It’s hilarious
Manager: Well that sounds fine. I guess you’re hired.
Candidate: Umm… Don’t you want to see me juggle?
Manager: Gee, I never thought of that.
Peopleware by Tom DeMarco and Timothy Lister
Hiring is the most important task of a manager in my humble opinion. You are not doing yourself a favor by skipping over the due-diligence – be it for an engineer, or really for any profession. Make them juggle :-) .
Here are some ways to do so for a prospective software engineer:
- Make them send you a code sample to look at. Tell them it should be something nice. Don’t be surprised by how many people send you code they have written for a previous employer. For me, this is an immediate show-stopper, as it shows they have not understood the very basic fact that all code they are writing while on the payroll of a company belongs to the company and NOT to them.
- Some people will point you to open-source projects they have participated in. Good for them and for us, as it gives us something to review AND shows they care about their profession so much that they even code in their spare time.
- Program something with them. This can be done in the personal interview, but also during phone-screens. I have used the collaborative editor collabedit for this with good success. A small example will usually show you how fast they are in practice. Even if they have pointed you to a great open-source tool before, this is the only way to verify that they have written the code themselves and in a reasonable amount of time.
- Some people are having difficulties programming during interviews. If all other indications in the interview were good, I sometimes give candidates the chance to finish the task after the interview and send the result to me again. After all, being good in interviews is not a primary skill we are looking for ;-) . But beware: even if the results are good then, they need to be taken with a grain of salt or two, as once again there is no way to prove that the work has been done alone and in a reasonable amount of time!
- If there are still doubts at this point, there is the possibility to negotiate a trial with them. Three days working in the company on a small, but real project with extensive code-reviews will usually tell you enough about their skills to be sure. If the candidate is hired, he get’s the three days as extra vacation back. If not, he must write it off.
- And last but not least, contracts usually contain a trial-period of a couple of month. I usually don’t like letting people go during that period, as you will have already invested a lot in them at this point AND it will disturb the team. Not to talk about the pain this usually means for the applicant :-( . But if it turns out that after all this juggling the work is not good enough – you owe it to the team and your company to make the right decision.
This is what is in my toolbox to see if people are actually up for the job they are hired for. What’s in yours? How do you make them juggle? Feel free to leave a comment!