Interviewing software developers: You’re doing it wrong.
Recently my wife and I both updated our resumes and started interviewing around. I ended up taking a position at a new company. What struck me as interesting was how different our interviewing experiences were.
My wife is a PharmD, this is the Pharmacy equivalent of a Doctor of Medicine (M.D.). She has to be licensed for the state she is working in and has to earn continuing education credits to maintain her license. When she goes to an interview, the questions she is asked are primarily about past projects she has worked on or are trying to determine what her personality is like and how well she will fit into the position.
I’m a self-taught software developer with about 12 years of experience, no certification and no license to practice software development. My questions consist mainly of questions trying to determine if I’m lying on my resume or about some piece of historical computer trivia. (“How would you write a linked list?” “I’d use Google as my IDE because THAT problem has been SOLVED son.”).
Granted there is a difference between a position where a lack of knowledge could KILL someone versus and position where a lack of knowledge causes a loop to run 100 milliseconds slower. But you can kind of see how most programming interviews are pretty insulting to the interviewee.1 I’ve often wondered if we could create a licensing body for software development. Some body that is corporation and technology agnostic. Something that is able to put a stamp of approval on a person and require that person to continually learn in order to maintain their license. Right now, we have certification mills that just teach a person enough to earn their Oracle, Java, or Microsoft certification. I know that lots of people are working both inside and outside of those corporations to ensure that the tests contain real-world material and not just bullet-point factoids, but that doesn’t stop the certification mills from just giving out answers.
So as it stands, programming interviews are said to be less about the technical knowledge and more about determining how a person thinks. Which is kind of wrong in a way. You’re not going to see how a person thinks by giving them a little programming quiz during the interview.
Certification and licensing should be about setting a base level of competency. You shouldn’t have to ask someone what the difference between a div and a span element is during a phone screen if they are a licensed web developer. You shouldn’t ask a C++ developer to find the memory leak in a given piece of code. What you really want to know are the intangibles. Are they a cowboy coder? Are they continuously trying to improve their skills or are they set in their ways? Will they speak up during a meeting if they see a bottleneck or problem coming or will they just ignore the problem? We, as a group of professionals, need to determine a structure and governing body that will allow us to not wonder if an applicant is lying on their resume, but instead focus on whether or not a person will be a good fit with the rest of the team.
1 – I’m not even going to mention any B.S. questions about your “biggest weakness” or trying to determine your enthusiasm level for working at the company. Those are just stupid, stupid, stupid. Did I mention I thought they were stupid?

July 22nd, 2008 - 08:31
I think what you’re looking for, SWEBOK is working toward – http://www.swebok.org/
In order to license / certify software developers, there has to be a common, well-known body of knowledge that is generally accepted within the industry. SWEBOK is attempting to define that body of knowledge and get it accepted.
Licensing of Software Engineers is a hotly debated topic. It was a week-long topic in one of my grad classes, and I can tell you with no uncertainty that there was no agreement on the subject.
But you’re right, why should we need to reinvent linked lists in an interview? The point is understood (do we know data structures), but the methodology leaves a lot to be desired.
Regards,
Dave
July 22nd, 2008 - 08:40
I completly agree that _most_ companies do it all wrong. Too often this process leads to hiring people that are not capable of doing the job or who leave soon after being hired because they don’t “fit in”.
I’m currently in the process of interviewing with a company that _so far_ is doing it right. We’ve talked about my experiences but not actual code structures. They sent me homework, a list projects I could pick from and code at my own pace and using my own tools, with the oppourtunity to write an explanation as to why I did what I did. The in-person interview is later this week but supposedly for part of it I will actually sit down and pair-program with someone as we refactor the code I originally wrote.
Personally, I see the above process as showing both the employer and employee if they have the right “fit” and style and coding chops to do the job.
I can let you know thursday night if the in-person is as good
.
July 22nd, 2008 - 09:29
Great information, especially for all of us that are doing it wrong
July 22nd, 2008 - 13:45
@John: That sounds awesome! I would like to hear what you find out.
@Scott: Darn! One of my favorite questions to ask is “What are your 3 biggest weaknesses and what do you do to mitigate them?”!!!!!!!!!!
I like what John said though! The homework thing, I think we should try that.
July 22nd, 2008 - 14:35
I was under the impression that the likes of MS, Cisco and others created their own certification streams to try and solve this very problem? In the case of MS, you have, say, MCPD qualifications which “should” tell you that someone is qualified to use a certain technology to a decent level.
The problem here is that getting those certifications is INCREDIBLY easy, and most people don’t even bother learning the material, they instead read Braindumps or Certkiller papers. It makes the whole thing a farce.
Degrees are hardly an indication that someone is capable of writing good software, and hence aren’t really a great yardstick. Masters or PhDs aren’t good either, as most (and I mean most, not all
) people who fit into this category are too academic to be of use in the “real world” (I hope I don’t get flamed too much for saying that!).
So how would you go about licensing a dev without the above issues biting you in the butt?
I certainly don’t know the answer
I don’t think the likes of Sweebok do either (with all due respect). So for now we’re down to relying on experience and references which should be evident from interviews.
Great post by the way!
July 23rd, 2008 - 01:38
Why not let the developer sit and work out a few coding tests in a programming language used in the organization. Seeing a developer code is a way to get an idea about the skill. An example for Perl:
One exercise where regular expressions are a good solution and one where hashes are a good solution. If the developer doesn’t know how to use both, then he’s is not a Perl developer.
For other programming languages there should be other tests.
July 23rd, 2008 - 08:16
I think I would have to generally agree with your statement that the interview process is to see if the candidate is lying. In fact at my last job my boss basically used this as his only criteria for hire/no hire. Lets just say, we lost a good candidate who forgot how the observer pattern works.
I’m not sure I like the idea of a board certifying software engineers. I think this profession is still to young to make that work, we just don’t have enough figured out yet in regards to practices and methodology. Besides, things vary between language and platform by a wide margin. I think a board might just stifle creativity at this point.
I’ve run into a few people who lied on their resume, but they’ve always been easy to pick out. I like to use candidates resume as a starting point for a discussion. I think this is far more interesting, and more often than not I get to learn something new.
Oh, and I’m glad to now be working with you.
July 23rd, 2008 - 21:50
I agree, and that’s what the SWEBOK is supposed to accomplish as David Good mentioned. Just one comment on this:
“Granted there is a difference between a position where a lack of knowledge could KILL someone versus and position where a lack of knowledge causes a loop to run 100 milliseconds slower.”
Depending on which software you’re working on, lack of knowledge may cause financially or human loss as well.
July 24th, 2008 - 03:44
@ Lazycoder,
I m same as you. Thanks for sharing.
I also thanks for all the valuable comments for this post…
July 29th, 2008 - 12:48
I am one to believe that developers need to unionize. Never been too much into the union thing, though as a teenager I worked for several companies and was part of their unions (i.e. grocery store clerk)…
Why? Because. Corporate America doesnt care for the developer. They dont know how to deal with us, they dont know how to pay us, they dont know what to expect from us. They dont know, also, what person is right or wrong, for a position — as is the point you’re making here.
They consider us as an “expense”. A loss as I have heard all too many times in the past. The expect us to develop software that has little to no specifications, in unreasonable amounts of time and for pay that makes some of us laugh. They expect overtime without pay. Would you ever see an attorney work a moment of overtime without charging the client? Would you see an electrician change the entire plan to wire a house after he began his job, without renegotiating his contract?
We need representation of SOME sort. Agents, Brokers, Union Boss – whichever works best. Certainly, a huge percentage of us dont represent ourselves very well.
For example: @John. Why are you doing an assignment for your interview? Thats absurd. Companies love to do that, they give potential employees “assignments” which are nothing more than work that they need done. Attorneys are notorious for doing this with their interviewees. They’ll give them a “typing test” to see how they do and what is it? Its work. They get free work, especially if they dont hire the candidate. And with John, they’re getting free work and/or IDEAS.
People, our skills are in our brains. It is our commodity and there is no reason to share it. These corporations demand that we, contract types, sign non-compete clauses which I personally refuse to do. Why would I want to cut off a portion of the population from my ability to earn a living from?
There is no need for certifications (MS, CISCO, etc). There IS a need to get organized into a nation group, however. Much like Hoffa did with the truckers. It may LOOK bad to some people who do not understand it too much but let me tell you, people protected by Unions do NOT work at 5:01pm unless they’re respected and they get paid.
Too much BS about “your biggest weakness”, I agree. My answer to those idiotic questions always is “My biggest weakness is taking a job with a company that asks me what my biggest weakness is”. The look on the faces of those who hear that is priceless. Amazingly, I’ve earned the contract work for over 75% of those places even after answering that way.
People – take your own lives into your hands and dont take crap from these companies.
August 9th, 2008 - 18:58
I’d have to agree with you, Scott. I also would have to say I am an offender. I didn’t ask about linked lists, but I do ask some basic questions about C#, OOP&D, and agile terms. Most of my questions are not standard right/wrong answer questions, they are kida “see where this person is” in terms of their skills. But I’ve had guys that nailed the (short) Q&A part of the interview and foundered on the coding & design parts. I DO like the idea of actually pairing with someone for an hour or so to see where they are.
Thanks for the post, I will be revising my interviewing techniques as a result. I LOVE learning/getting new ideas.
~Lee
January 5th, 2010 - 15:25
The “stump-the-chump” technique is how most folks try to get at the “how do you think question” and I don’t think it works well, either (to a degree).
I have suggestions for 21st Century Interviewing for Developers: http://www.lessonsoffailure.com/developers/stop-dumbing-world-bad-interview-questions/