One of my clients was interviewing web developers and asked me about how I go about performing technical interviews. I have interviewed 15 developers of all experience levels for Excella Consulting in the past year. My style and questions are still developing. This morning when I read Facebook Lost A Great Engineer I felt like it might help my learning process if I synthesized my thoughts with a blog post.
There are different interviewing philosophies so this is my opinionated perspective.
Before an interview I always check out if a person has open source projects on Github or Bitbucket. If they don't, that's a huge black mark to me. I do know some really great engineers who do not use Git and do not have open source work to their name. In general though I am very leary of anyone who does not have some sort of public project or website. I need time to peruse their code outside that one hour interview. That process helps me understand how someone approaches problems.
Once the interview begins I start by asking a mix of behavioral questions to determine what roles a person has performed on a team. The behavioral questions also help to discover what a candidate's strengths and weaknesses may be. For example, "Tell me a time you were developing software with a team." They give a bit of background then I ask simple followup questions. "What went right about the project?" "What could have been improved?" "What was the most difficult technical challenge you faced and how did you overcome it?"
Simple questions of that nature to help the candidate get loosened up a little bit - there's no "wrong" answers because it draws on their own experiences. I watch out for people that pass a lot of blame around - "so and so didn't do their job, I had to fix everything" - even if that truly happened, it's a sign of team dysfunction.
That's pretty standard stuff so far. Once we get past some initial questions which allow me to determine if they can communicate, whether they work well with a team, what their general technical interests are, I ask some blanket, open-ended technical questions. Here are some examples:
I never ask "teaser" or puzzle questions like they do at Facebook. I don't feel like puzzle questions are highly correlated enough with filtering out if a person is going to be a "gets stuff done" type of developer. Facebook and Google probably have better luck with those questions since it fits their culture.
To me most puzzles are a waste of time. I would rather be solving real client and customer business problems by using technology. This is my philosophy - not judgment on the cultures where puzzle interviews are prevalent. If that works for them that's great. I just would not fit in well in that culture. It's likely that the people I want on my development teams would feel the same way so that's the path I take.