Allow “Phone a Friend” during Technical Interviews?
n0tw0rthy.wordpress.com
n0tw0rthy.wordpress.com
I just hired someone for a job who's first response was to copy and paste the error code into Google and view a stack overflow post with a similar problem. From there he took what the response on stack overflow said and crafted a solid solution to the issue. It took him about an hour and I saw that he had to Google a few functions (Python language) but he showed he knew the resources he needed and the basics to coding solutions to problems.
I don't care if you know how to create a linked list in C on a piece of paper or why we have round manhole covers instead of square, this isn't useful in the real world, I want to see if you can solve a real problem and the method you go about it.
In my case, I had to show design capabilities in addition to code and being creative didn't mean just applying hacks found on the internet. But my boss had to actually see if I can get through with building the project using a combination of existing knowledge and the ability to find solutions.
My challenge was to build a discussion forum from scratch with user registration and a reasonably attractive UI. So that's PHP + Photoshop + CSS/HTML/JS
3 Tables "posts", "replies", "users" (replies was a closure table), topics index, topic view page, a form page for registration and one for the profile page. JS form validation and a simple layout via CSS and HTML5.
It was more of a Twitter-lite (a very poor man's Twitter-lite)
I'd liken our jobs to those of pilots. Most of the time, anyone can fly the plane: just punch in the flight plan to autopilot, and press 'A/P engage'. However, when a pilot is near cumulonimbus clouds with an engine failure, he is forced to step up to the plate. This is what pilots are paid for: to handle the crazy emergency situations that can arise when you're in the air. This, too, is what good engineers are paid for: handling the difficult problems that occasionally arise during development. If you're not hiring for this, you're hiring code monkeys.
What they do and how long they take to do it is totally up to them. They can call a friend, use online resources, and even contact anyone at the company with questions. They present their project at their second interview.
It has been a great way to gauge technical, problem solving, and presentation skills as well as interest in our company.
Have you seen any resistance from applicants to this method?
If the person turns out to be a no hire, you managed to avoid an expensive false positive.
If that isn't clear to a candidate when they are offered the project, or if they still are reluctant, then they aren't a good fit for us anyways.
EDIT: People have to communicate as part of their jobs. An interview is fine for determining that, because that's what it is. If you think it will help you determine how good they are to work with, or how well someone codes, you're living in a fantasy land.
I wouldn't like put one of my friends in such a position when answering an interview question. Nor would I like to be (partly) responsible for a friend's performance in theirs.
Anyway, surely a candidate that can do the question on their own is better than one that can't. And surely the friend that can answer the question is better than the candidate?
A technical interview question shouldn't be about specific knowledge of particular problems (although bad ones often are, usually having "Aha!" moments). They should test areas of knowledge: reversing a linked list is checking if they understand how pointers work, something which is not really possible to learn in 5 minutes of Googling, even if they can then answer the question. Questions should test general technical problem solving skills, which are not easily Googled, even if a specific instance is.
Finally, if a candidate requires knowledge of a particular API (e.g. the order of parameters to a function), then the interviewer should tell them. If the interviewer doesn't know, then they must acknowledge that it's not really important, and allow the candidate to just pseudocode it.
I tried to call the uni to verify his degree but they wouldn't confirm it without consent (Data Protection Act), and I wasn't going to employ him (for several reasons), so I didn't take it any further.
I would still have to test their ability to code something, as I know how good I am (if I may say so) at blagging my way through open ended questions.
But you don't want to check encyclopedic knowledge during interview talk. You want to check how well he understands what he's doing, what is his approach to problems, what kind of problems did he solve in the past and how he did it, and lot of other things that don't require the only one correct answer (and cannot even be answered by one).
That being said lately I worked hiring contractors. We give them a week long paid trial assignment (paid if they pass). Half the people I hire I don't even have a resume for. This is really the best way to hire people.
We talk to a lot of college grads. Clasically, colleges don't seem to teach a lick of web development. Just old-fashioned comp-sci uselessness. We know these kids are bright, but they're not going to be able to develop full stack out of the gate, usually, without some aide. We were all like that once.
What I want to see from a bright young talent is whether or not they know where to go to get the answer, and how quickly they can use it, and how quickly they can grok it. It doesn't take an incredibly long amount of time to start becoming useful to web dev with all the resources out there. I'm OK if they don't know some arcane bit of CSS, like that white-space: nowrap exists. They can and will find that information very quickly, and it's not difficult to remember, retain, or understand.
If I'm interviewing a candidate with a proclaimed 8 years experience in the industry, for a position of mid-to-senior level developer, they really shouldn't need that extra help. They should be shipping-ready (given the time needed to understand the idiosyncrasies of your company's style).
I've found that this approach has netted us a good deal of sleeper candidates that, on paper and on a white board, may not look like much, but end up being killer, driven developers.
Yet so many interview tests tend to have a focus on CS backgrounds. I just went through a few weeks of interviewing and some of the questions asked were really there to see if you knew your CS stuff. For some companies the questions were at least relevant to the industry and tasks they were trying to accomplish, but some were so far out there it just didn't make sense.
The company I finally decided to accept at had a sane interviewing process, one that had challenging enough questions to show that you know what you are talking about - and when there was one lesser known method I wanted to use, but couldn't remember the syntax, they allowed me to look it up real quick. In the end, I was able to teach the interviewer about this method, and it helped me complete the task in a far more efficient manner.
Everything you're saying is reasonable but this phrase reminded me, one of my favorite profs used to say, "Knowing about computational complexity won't ever get you a job, but it will keep you from being fired." Several times I've started a job and discovered my predecessor had coded himself into a corner because he didn't see the combinatorial explosion on the other side of what he was doing.
The reason they are able to pick up "web development" so quickly is because of this old-fashioned comp-sci education.
Web dev isn't a thing, it's just another platform to learn. At its core are basic CS concepts.
Sure, you won't be a super expert on day one, but it's just like picking up iOS development. I'd rather have someone who could pick up iOS dev in a day than someone that only does it and took months to learn.
In short, if you're trying to hire someone to do work that's been done elsewhere many times before, then this is probably fine. But I don't expect the most innovative companies to ever want to filter for google skills.
At the same time, there is deeper stuff that really isn't suited to this approach. If I were conducting an interview, I'd set the candidate a task the evening before their interview that involved something I knew they had know experience in, to see how well they can delve into and understand new tools.
A face to face interview is a great way to really understand how good a candidate's core knowledge is. Do they understand data structures and how to manipulate them? Do they understand algorithms and their complexity? Sure, you can look this stuff up, but it's the kind of knowledge you need to have before you even start.
Understanding the ways in which technical people find answers, and can fully grok and socialize those answers internally with options is invaluable in a technical interview.
The purpose of any phone screen I've done is that it's simple enough that no self respecting programmer would have trouble with the questions, ie they are of the fizzbuzz variety.
The point being that if you need to "phone a friend" then you've probably already failed the interview.
How many positions would you estimate (I'm an academic so have no experience) where encyclopedic and gap-less knowledge is required to accomplish a task? I envision a technical interview as an opportunity to make sure the candidate can actually do the task you need them to - the screening of non-programmers should be done beforehand.
Ahh I see where we disagree, I might have read the blog post wrong. To me a phone interview is the actual screen. I'd never do an actual interview over the phone that was the basis for the final hire/no hire.
If the OP means phone interview as the actual interview rather than a phone screen then yes, I'd certainly relax my position somewhat.
usually for phone screens I'll open a shared google doc site and get the user to do a problem like fizz buzz.
I think that if a developer knows how and where to look for the resources to solve a problem, he is worth a shot. I am sure if he has to look up "C++ syntax" when being interviewd for "experience C++ developer", then thats bad. You get the idea.
For instance, average and worst case complexity of various algos (usually sorting). This is kind of a question you might want a call/gooogle and I believe is common one. But I don't think it does make any difference in real-world practice whether you know (and can recall in a stressful situation) what is quick sort's worst case complexity and in what case it happens. If I need that, I will google it and find it less than 5mins. Obviously, awareness of worst-case is necessary but not memorizing for each algorithm.
What is your name?, "Fuck let me call in a life line".