Hunting for talent
No matter what line of business you have, you always want to have good people. People who can make things happen, who are willing push for solution and questions that you didn’t even think in the first place.
I don’t have fixed list of things I look for, I rely heavily on my intuition how I feel about a candidate, but there are some things I can list and that is what I will try to do here.
I want people that I want to work with. I want people who can contribute to a good atmosphere where people feel comfortable to talk out, provide feedback and ask questions. They should be more of a catalyst than a handbrake for communication. This social matchup is essential.
Secondly the right kind of people tend to do stuff on their own, they contribute to the community. They have github accounts, they participate in user group meetups, they don’t limit themselves to one language. They read books and blogs, they follow interesting people on Twitter. They have opinions and are not afraid to share the. They are curious. Curiosity is a virtue for software professional.
Technical skills and understanding
What separates talent from the rest and this is rather clear even in more junior candidates is that they want to understand how something works. It’s generally not enough to read tutorials and make slight modifications. Good people tend to know know also how things work beneath all the magic of Django or Rails etc.
How do I do it
First would be just talk where I try to scan how well the candidate is up to speed where things are in the software world and how well he/she understand the concepts. I always try to crack a joke or two to relieve the atmosphere. An interview can be a nerve wracking experience especially for younger people. If I can get the candidate to relax I’ll get a better read what they are all about. Before going on to the exercises I make sure the topic what is considered “good code” is raised.
Having the candidate bring over a code he has made and having a chat about is always good. Specially if it’s rather old then questions like “what would you do differently?” or “what do you think about your code now?” make for good conversation.
Then I give the candidate a small piece of fairly poorly written java code and set the question in a way that an intern or trainee would ask for feedback for that method. Good candidates tend to find bunch of things wrong quickly and the best ones also know the difference what is clearly wrong and what is more of a matter of opinion.
It’s time to walk the walk
What happens depends largely on my feel of the candidate so far. With juniors I go for a pair programming exercise where I sit with them and do something like a simple coding kata to see what it would be like to work with them. How they react to feedback and suggestions and especially what kind of suggestions they have.
For more senior candidates I give them a existing piece of (crappy) software and ask them to implement a feature. The software is of course poorly tested bug ridden mess. Good engineers quickly see what a mess and illogical piece of crap the software is and don’t waste time refactoring most of the crap before trying to implement a then trivial new feature.
If I’m not quite sure or how it went I still do the pair programming stuff I usually do with the more junior candidates. Sometimes the refactoring exercise does take a bit too long and the setup might not be familiar to some candidates (wrong keyboard, wrong IDE etc), but when we work on a small project together I can easily guide and help through the most common simple downfalls like shortcuts etc.
I tend to make some controversial comments or rather stupid design choices to see if the candidate picks them up. The good ones always eventually do, it might take some pushing or going quite extreme, but they finally do 🙂
For a while it really seemed that these exercises were too hard, but finally we got some good candidates that actually breezed through these and made them like just as easy as I thought they would be.
As you can certainly imagine this is a rather time consuming process and takes a lot of time. I don’t always have time for everything and almost always these topics are scattered into many small sessions.