Sunday, December 02, 2007

The Sad State Of Programmers Part 1 : The Phone Interview.

This is going to be a three part series.
Part 1 The phone interview.
Part 2 The face to face interview.
Part 3 Some tips and observations

A while back I posted that we are looking for a SQL/.NET/FoxPro developer. I did this because we had a real hard time finding this person. I am happy to inform you that we did find this person and he will start in two weeks. Interestingly enough we hired the person with the least years of experience (on paper). This person knew more that people with three times his experience in years.

These days when looking for a programmer you have to do phone interviews if you don’t want to waste an incredible amount of time. A phone interview enables you to assess the skill set of a potential employee without wasting time by picking him up, getting a security badge, booking a conference room etc. A phone interview is also good for the candidate since he/she doesn’t have to travel or dress up to do the interview.

Some things are difficult to ask over the phone but if the candidate looks (or should that be sounds) good then you can ask those questions when you bring the person in. Some people will prepare for a phone interview by having all their books and notes in front of them. They will ask you to repeat the question and while you do so you can hear them flipping pages frantically. So you might be able to cheat on the phone interview but be assured that if you do not know your stuff that you will fall flat on your face on a face to face interview (no pun intended).

One thing I never understood is the fact that it takes a person one minute to answer a question. You either know or don’t know the question. Keep your answers concise, do not spend 3 minutes explaining to me what the difference is between a clustered and non clustered index.
I had to reword my questions slightly because when I asked a question like “Do you know what the difference is between a clustered index and a non clustered index?” some people would reply “yes”. Because of that I changed the question to “Describe what the difference is between a clustered index and a non clustered index?”

Do not shoot yourself in the foot by giving me additional information which is wrong. I asked for the fastest way to empty a table. Almost every single person who knew about truncate added that you cannot rollback a truncate statement. I wrote about that myth a couple of months ago: SQL Myth: Truncate Cannot Be Rolled Back Because It Is Not Logged

I tend to ask between 20 and 40 questions, if I see the candidate’s skill is not good enough I don’t ask everything. Some of the questions are esoteric but I simply ask these questions to get a feel of the overall skill level; it doesn’t matter if they answer these wrong. You can find a list of question here: How Well Do You Interview And Do You Use Wizard Driven Programming?

Here are some interesting answers from the interviews.
Almost every single person answered that an index scan is better than an index seek.
There were several people with SQL Server 2005 experience, these people couldn’t name one single new thing introduced in SQL Server 2005. I asked about windowing functions, DMVs, pivot, apply and more, this was all Greek to them. One person had on her resume that she developed an app in SQL Server 2005. When I asked about her experience she told me she just started to read about SQL Server 2005. This is a big show stopper, sometimes headhunters/recruiters will tell you to just add it to your resume, I wouldn’t do it because it makes you look bad. If the SQL Server 2005 experience is not true what else could be made up? One person had on his resume that he optimized complex stored procedures, when I asked how he did it, he replied that he only selected the rows he needed instead of the whole table. This obviously didn’t answer my question.

That is it for the phone interview, part 2 will be up in a day or two.


Mick said...

I usually lead with a question about how many values a bit data type can have. I've not interviewed a lot of people by any means, but most never get it right. It is an easy question that in my opinion can let you know how long you have to stay on the phone.

Nicolas Granelli said...

"Describe what the difference is between a clustered index and a non clustered index?" is not a question :)

By the way, I really hate blogger giving a link to post a comment. The form should be just after the text (or last comment)

Anonymous said...

One things that I have found when dealing with headhunters is that they always want you to meet face to face with a candidate immediately and skip the phone interview. They tried to convince me that "no candidate takes a phone interview seriously". Their pushiness in this regard is obviously just to get me quicker to hiring a candidate, and I understand that. But it does feel pretty sleazy from the headhunter...

Anonymous said...

I am no head-hunter but a trainer. While the interview over phone has all the advantages mentioned, it does not give a correct picture about a candidate's expertise, especially for freshers. The interviewer should observe some proper rules. He can always give sufficient notice. Can narrow down the area where questions will be asked.
I have written in greater detail on phone-interviews in my blog at

Anonymous said...

Why does an application programmer need to know about indexes? Is this a dba position or developer position? Regardless:

oooh, that was hard.

Anonymous said...

Yes, most people interviewed are not a match, specially if you are looking for Java software developers.

Most intervied people only learns acronyms and try to fool you into thinking they are good developers.

Ask them about reversing an string, both iteratively and recursively. Can't? Next!

Neil Traft said...

I don't understand why you would want or expect a candidate to know the answers to all these detailed and obscure procedures. He/she should be able to come up with both iterative and recursive methods of reversing a string in their head, on the spot, within the very 60 seconds that I asked them the question? That's just silly.

It's no wonder that "almost every single person" couldn't answer the middling questions you asked them. You should not be asking me about the implementation of a specific version of SQL Server; that does not reveal anything about my skill in researching a particular issue, learning what I need to accomplish my goals, and then applying what I have just recently learned. It reveals nothing about my capacity for good solutions or my potential in any way.

Ask me my general procedure for investigating a particular type of bug. Ask me what I do first, how I use my debugger, and what online resources I might use if I need to look up API information. Find out if I know how to actually do research and learn something new; something I may not have known walking into the interview. Do not, do not, ask me to memorize an API.

By asking such irrelevant questions you are not getting at the only programming skill set that really matters: problem solving.

Denis said...

Neil, I disagree. A person with at least 5 years of SQL Server experience should be able to answer 90% of the questions without a problem. These questions are not obscure (except for parameter sniffing and traceflag) I also don't expect a person to know these, I ask these to see how much the person knows. However if half he people don't know how to check for a valid date then this tells me that they have never had to import data from a third party vendor. How can you be a SQL developer and not know differences between clustere and non clustered indexes or differences between a Primary Key and a Unique Constraint? When you have tables with a billion rows this knowledge is important