3

1

We're a small company (2 main developers) looking for a new developer to replace someone who is leaving. Because we're a small company, our developers have a very wide range of roles: typically, a customer will come with a feature request (usually one or two lines that barely make sense, you know the sort of thing I'm talking about...) and they typically have to go from that to design, implement and test the feature all the way into production.

So when finding a new developer, we didn't want to do those sort of "write an algorithm to reverse a string" type questions, since they don't really test the sort of thing that the candidate will be doing in the real job. Besides, anybody can study a bunch of those questions and ace the test without really knowing what they're doing anyway. As a small company, we can't really afford to hire someone only to find out after three months that they're hopeless.

So instead, we decided to come up with a small project that should be doable in an hour or so. Basically, the project we came up with was:

  1. Download a (C#, we're a .NET shop) library for interacting with the Twitter API
  2. Write a program that uses the library to fetch the public timeline from Twitter and insert them into a database table. The project should loop every 30 seconds, fetching the latest tweets and inserting them.
  3. Write a separate program that perferms a couple of queries on the database table (queries like "top 10 users", "all tweets with a particular hash tag", etc)

I did the project myself just to test whether it was actually possible, and I finished it in about an hour. I did it at home one evening with the TV going and all sorts of distractions, so I figured with no distractions, 1 - 1.5 hours should be plenty.

So anyway, we've had a few candidates come in who look great on paper, but then when we give them this task, they just sort of fall to pieces. One guy left after an hour with no code written at all, mumbling something about "I've never used twitter". Others get some things done but they get stuck on a certain aspect and don't really go all the way. One guy had downloaded the first library he found (which was pretty crummy), decided it was no good and ended up getting stuck doing raw HTTP requests to the API.

I tried to make it clear to the candidates that if they have a problem or they don't think they can finish, to call out and one of us will give you a hint. But I don't know whether they think they'll loose "points" for asking for help or something but nobody ever seems to do that. They all get to the end and just tell us where they got stuck.

I don't know, after all this trouble, I'm starting to think this isn't the best way to go about it. Are we expecting too much of people? Is the pressure of being in an "interview" making it hard for people to get what I think should be something pretty simple, done in time?

flag

5 Answers

5

I suspect your test is sufficient, but not necessary. I would expect that a senior dev, or a go-getting intermediate, would be able to do that task as part of their job whenever the need arose. So if you find someone who can do it in the interview you probably have a keeper. But I bet there are people who could work their way up to doing that in their job but who just can't pull it off in the interview.

Rather than abandon it, perhaps you could partition it a little. For example say that you want to test their architectural skills, so assuming there's a decent API to call that will get you tweets, please design this app for me on the whiteboard. Hm, thanks. Now then, I need to test your Google-fu (or Bing-fu.) Let's stay on topic, find me a free library to interact with the Twitter API please. Talk out loud so I can hear how you search and how you evaluate libraries. Which one would you choose to implement that thing you designed? Ok. Next, a little UI design. Can you open up Visual Studio and throw together a WPF UI for the Twitter thingy we've been talking about? Let me see how you like your apps to look. Ok. Well the last thing is I need to see how you type code and how you debug, so - and I've alloted an hour for this, so there's no pressure - I need you to wire that guy up and get it working. And as you go if you need to revisit your earlier choices - change the architecture, the library, the ui - go ahead. It will help if you talk out loud so I can learn about you, but in the end the code speaks, right? I'm going to sit in the corner and do my email but ask me if you think you're getting stuck, because I know job interviews are stressful times.

That one I think will show you what you need, and probably a lot of candidates will be pleasantly surprised what they can do if they're led. They should like you for doing this to them, and I doubt that's what's happening now.

link|flag
Yes, this is a fantastic idea! I think I'll be trying that with our next candidate. Thanks a lot! – Dean Harding Jul 31 at 0:52
0

I'd question how far from this Twitter experiment is the work that the candidate would be doing, personally. If the applications being developed are similar to those using he Twitter API then what you may have discovered is that there is a lot of bad developers out there and it'll take some time to find the few good ones out there. At the same time, if the application isn't like the Twitter API, then you may well be barking up the wrong tree.

Did you ever consider how well some people may not know Twitter's API? Do the candidates know how long they have? I'll concede that there may be a bit of a "Hero" complex that candidates can have as I know I've been there myself a few times. Depending on how long a cycle is from feature request to a release in production, it may be useful to take pieces of that and see what they can do. For example, how well can the clarify the requirements, what kind of testing do they know to do, etc.

link|flag
0

Is knowledge of Twitter API libraries a requirement of the job and listed in the job posting? If so, but you still called in candidates like the one who muttered that he never used Twitter, then it's your bad. If it's not part of your job description, then it's not very nice to spring that on someone in an interview. They're going to have "interview nerves" and lots of people also have test anxiety, so they really need to know what is expected going in. I also like Kate's solution very much. Her approach would make me feel less like I'm under a microscope and more like I'm demonstrating an ability to collaborate as well as the specific skill you're asking me to demonstrate.

link|flag
0

Some people can't code, or can't code well. But you want to find this out as early and cheaply as possible. A long, complicated programming test is as likely as not to piss off senior candidates who are used to being paid for their time. You need to find the shortest, simplest test that nontheless gives you useful data about whether the candidate can code. I've found that, rather than asking them to code, you can get plenty of insight into their skill level by giving them a few pages of low-quality code and asking them to list what's wrong with it.

link|flag
0

I think it is better to do that as a take home test. And here's why. 1) if someone isn't that familiar with twitter it gives them a chance to brush up if they want to. And 2) there is a lot of pressure in an interview already and adding a complicated task much more than reverse the string is hard anyway. While in a real job no one will be looking over their shoulder as they code. Anyway I had one place where you would have meetings and have to do SQL queries on the big projector in front of the whole meeting. Anyway you always made way more mistakes and forgot a lot more things when everyone was watching.

I had one interview where they did give you a take home test. It was actually very simple, sum up the numbers, find the mean and the standard deviation, and then print the list, the mean and standard deviation. The wrinkle was it was in the J language... Anyway that weeded down the candidates and was more realistic as well, because it weeded out the people who didn't care to learn J enough to do the challenge. But anyway I have been on an interview where they give you a simple reverse string task as well in Java. Even this was unrealistic because in a real situation you could go java.sun.com/j2se or java.sun.com/tutorial (okay I think the links changed now that it is Oracle owned... but anyway) and use the API to figure it out. So doing it in an interview is not realistic. Also the 1 hour estimate is crap. Because I think that probably you work with twitter or you wouldn't have thought to do the challenge on twitter. And I'm betting you already used some libraries so you are used to them. Further more you were relaxed and calm. So if it took you one hour, you have to expect it will take a job candidate more.

A take home task seems fine. It's true that some might be able to ask rentacoder or on stackoverflow or something to get it done. But once they come in you can question them on it and quickly find out what they know. Most places I have been give some type of logic test. My current company gives a C test and SQL test, even though they use C# and Java mostly. But there was nothing super obscure on there. You can belt out the C if you know Java or C# because nothing was peculiar to C mostly except the pointers. Anyway other places just give a general logic test or a test that tests basic school skills from high school. I'm not sure how valuable those things are though.

Getting back to your challenge, in my case I know what twitter is. However I haven't used it myself. I get the basic idea. I have no clue what a timeline is. I would have to google around for the features you asked for on twitter in order to understand what I'm looking at. Then google around for libraries to do it. Finally slap a program together. I suspect it would take me more than an hour. Heck quite often it can take an hour just to find/set up a library. But anyway I doubt I would get up and leave. I would probably work until you said time out. But anyway I suspect good progress in an hour would probably be enough. Still the same guy/girl can probably do it much quicker without it being a high pressure interview so it isn't a full test of their programming potential.

But at the same time if you go crazy and send some take home test that is going to take 12 hours, I'm going to wonder if you are trying to bum your way to free work. And I probably would not even bother with it.

I propose you find some obscure task that requires learning something very specific that your company is interested in. So that in order to pass the test they have to learn the bit of knowledge as well as use some programming skills. One of the biggest failings of software developers is a lack of ability/desire to learn new things outside of the direct domain of software development. Heck even within software development often people get in their comfort zone and don't want out of it. When all you have is a hammer everything else looks like a nail....

link|flag

Your Answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.