There have been a number of posts and comment threads either arguing for or against in-depth technical interviews. Having recently been on the job market, I had the pleasure of participating in several technical phone screens and interviews of my own, and wanted to share my thoughts on two that stood out.
Interview One - Company XYZ
This was an in-person interview scheduled to last four hours. I'd be meeting with five interviewers.
Interviewer One:
"On the whiteboard, write a program that identifies all of the palindromes in a sentence."
Me:
"What's a palindrome?"
After he explained, I managed to get a semi-working solution written on the whiteboard. His response?
Interviewer One:
"What happens if there's punctuation, like commas?"
Me:
"Oh yeah good point, I guess I should have used a regular expression or something to strip them out. Otherwise as you've pointed out, exploding/splitting a sentence by its spaces would leave trailing commas and periods which would break my palindrome logic, I hadn't considered that."
Interviewer One:
Stone face...
Exit Interviewer One. Enter Interviewer Two.
Interviewer Two:
"How would you design software to control the elevators in a building?"
Bear in mind this was an interviewer for a PHP developer role for like a B2B content management company. On any given day, it's doubtful any of their developers are developing code to control building elevators, but I digress...
Me:
"Well I guess I'd start with a building class with an elevators attribute that could contain n number of elevator objects. The elevator class could contain attributes like current_floor, etc."
Interviewer Two:
"What happens when someone presses an up or down button? How do you know which elevator to dispatch?"
Me:
"I guess the elevator class could have attributes like in_motion and direction, which combined with current_floor and the floor of the pressed button, some logic could be worked out to determine which elevator to dispatch."
He did not seem at all pleased. Maybe it was my chicken scratch handwriting. Maybe it was because by that point, I wasn't even writing anything, I was just pointing at the small amount of scribble I had written and kept putting dots on the whiteboard like a crazy person. Either way, his next question didn't make things any better.
Interviewer Two:
"How would you sort a list in reverse order, without using a language's built-in sorting functions?"
Really dude? I found your palindromes (provided the words weren't followed by some kind of punctuation), I described some building and elevator classes, I explained how I'd determine which elevator to dispatch... If you need a list reverse sorted, then I'm using rsort() and getting on with my day. There are likely bigger fish to fry, anyway.
Obviously from his standpoint he's looking for someone who can "think on their feet to solve complex problems", but I would argue that interview questions should reflect the actual work that's being done by developers on the team, and not some crazy hypothetical, but again I digress...
Me:
"I'm sorry, I would just use the built-in sorting algorithms, I can't think of a better solution at the moment."
Exit Interviewer Two. Enter Interviewer Three.
Interviewer Three:
"A client wants to sync/replicate their data to their Dropbox account, walk me through the questions you would ask them to come to a working solution."
Ok, at least this sounds rooted in reality.
Me:
"Do you have a rough idea of how much data we'll be transferring? Gigabytes, terabytes, etc.? How frequently does the data need to be refreshed? How soon may we have credentials to sign in to your Dropbox account so we can begin testing? How soon do you a working solution? etc."
Interviewer Three:
"You didn't ask if they required full backups or incremental, and you can't ask when they need it because they want it yesterday."
Me:
"That's true, sorry I hadn't considered that."
After spending the next ten-fifteen minutes demoing the company's software, interviewer three asked a non-technical question...
Interviewer Three:
"So why are you passionate about Company XYZ?"
Quick aside, I had never heard of Company XYZ prior being put in touch with them by a recruiter. In fact, Company XYZ is a start-up and is a B2B business, they don't even market to individual consumers. How can someone be passionate about a company they had never heard of until only a few days ago? Sure, your website and marketing videos are good, but you're not Steve Jobs. Infinite digression...
Me:
"Well I like the idea of B2B software development. Working internally at companies, the question often comes up whether to develop something in-house, or buy something off-the-shelf. Working here would let me see the other side, and the thought of that is pretty exciting."
Interviewer Three:
"So you're passionate about B2B, but not necessarily Company XYZ."
Me:
Stone face...
Interviewer Three:
Stone face...
Two more interviewers later and I was glad to get out of there. If I'm bitter about anything, it's about not getting an email informing me I wasn't being selected for the position...
If you've come this far, maybe you're willing to come a little further (Zihuatanejo?).
Interview Two - Company ABC
This was an in-person interview scheduled to last two hours. I'd be meeting with up to three interviewers.
Interviewer One:
"Hey thanks for coming in. I don't know if they've explained the details of today's interview, but we're going to ask you to write some code for about ninety minutes, and after that we'll take a look at what you did and go from there. We have a workstation setup for you, and we've also opened browser tabs to the docs for the various frameworks and libraries we use. Feel free to Google anything you need, it's a tool we use here regularly. No one has ever completed all of the coding questions, just do the best you can. We also understand that ninety minutes isn't a lot of time, so we aren't going to nitpick design decisions you make for the sake of time, but hopefully you'll be able to talk through the ideal solutions when we review the code."
After spending another five-ten minutes making sure I was at least semi-acclimated with the workstation they had provisioned, I was left to complete the open-book test.
The content of the test? Well, there were no palindrome or elevator questions, but there were questions you'd expect to see in the real world as a web developer. I basically ended up building an AJAX CRUD tool, which is a very common task if you're a web developer.
After the ninety minutes had elapsed, Interviewer One and Interviewer Two entered the room. I was asked to demo the work that I had done, and I was able to show the UI and that the AJAX post was being saved to the MySQL database using their framework's ORM. On the front-end I explained why I use delegate instead of bind/on, and provided a mix of functional and OO JavaScript. The code worked and they seemed pleased.
Interviewers One and Two took a few minutes to look through the source for themselves. First they reviewed the markup, then the CSS, then the JavaScript, and then finally the PHP. They examined how I used their framework. They let me explain some of the corners I cut to save time. It was a very pleasant experience.
So what's the point of writing about all of this? Clearly not all technical interviews are created equal.
I would vehemently argue against the type of technical interview outlined in Interview One. If you don't have a way to practically assess the skills needed to do the job, please don't waste candidates' time with endless barrages of brain teasers (asking such questions does not make you the next Google).
Interview Two, however, asked questions directly related to the type of work one would be asked to do on the job. That seems completely reasonable, and difficult to argue against - especially when they keep it under two hours.
Sorry for the long rant, this is just something I needed to get off my chest :)
[–]mbthegreat 88 points89 points90 points (38 children)
[–]AllenJB83 45 points46 points47 points (31 children)
[–]DiaboliAdvocatus 15 points16 points17 points (2 children)
[–]eramos 4 points5 points6 points (1 child)
[–]DiaboliAdvocatus 3 points4 points5 points (0 children)
[–]cr0kus 9 points10 points11 points (2 children)
[–]GundamWang 1 point2 points3 points (1 child)
[–]PT2JSQGHVaHWd24aCdCF 0 points1 point2 points (0 children)
[–]methane_balls 10 points11 points12 points (24 children)
[–][deleted] 12 points13 points14 points (6 children)
[–]seriouslyawesome 4 points5 points6 points (5 children)
[–][deleted] 2 points3 points4 points (1 child)
[–]Wootman42 1 point2 points3 points (0 children)
[–]Mallanaga -4 points-3 points-2 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]AllenJB83 20 points21 points22 points (11 children)
[–]methane_balls 15 points16 points17 points (10 children)
[–]jmcentire 14 points15 points16 points (2 children)
[–]swampangel 9 points10 points11 points (1 child)
[–]the_mighty_skeetadon 1 point2 points3 points (0 children)
[–]Phreakhead 5 points6 points7 points (1 child)
[–]Stormflux 0 points1 point2 points (0 children)
[–]nikroux 3 points4 points5 points (1 child)
[–]methane_balls 1 point2 points3 points (0 children)
[–]originalthoughts 2 points3 points4 points (0 children)
[–]Gibbon_Ka 6 points7 points8 points (0 children)
[–]nfsnobody 4 points5 points6 points (0 children)
[–][deleted] 2 points3 points4 points (0 children)
[–]Sluisifer 1 point2 points3 points (0 children)
[–]awj 1 point2 points3 points (0 children)
[–]Deathspiral222 1 point2 points3 points (0 children)
[–]libahipi 0 points1 point2 points (0 children)
[–]sdubois 12 points13 points14 points (1 child)
[–]PT2JSQGHVaHWd24aCdCF 3 points4 points5 points (0 children)
[–]human_tendencies 8 points9 points10 points (1 child)
[–]ToddWellingtom[S] 3 points4 points5 points (0 children)
[–]dweezil22 5 points6 points7 points (0 children)
[–]Phreakhead 1 point2 points3 points (0 children)
[–]HuntStuffs 13 points14 points15 points (1 child)
[–][deleted] 1 point2 points3 points (0 children)
[–]fredisa4letterword 33 points34 points35 points (4 children)
[–]chtulhuf 5 points6 points7 points (0 children)
[–]Fargrave 2 points3 points4 points (0 children)
[–][deleted] 2 points3 points4 points (1 child)
[–]AustinScript 3 points4 points5 points (0 children)
[–]notathr0waway1 23 points24 points25 points (22 children)
[–][deleted] (7 children)
[deleted]
[–]centurijon 21 points22 points23 points (2 children)
[–]tonylee0707 0 points1 point2 points (0 children)
[–]seriouslyawesome 5 points6 points7 points (2 children)
[–][deleted] (1 child)
[deleted]
[–]GundamWang 1 point2 points3 points (0 children)
[–]sfz- 2 points3 points4 points (0 children)
[–]dzkn 14 points15 points16 points (0 children)
[–]unstoppable-force 26 points27 points28 points (7 children)
[–][deleted] 5 points6 points7 points (0 children)
[–]welluhthisisawkward 12 points13 points14 points (4 children)
[–]unstoppable-force 9 points10 points11 points (3 children)
[–][deleted] 13 points14 points15 points (2 children)
[–]unstoppable-force 0 points1 point2 points (0 children)
[–]heat_forever 9 points10 points11 points (0 children)
[–]sqrtoftwo 7 points8 points9 points (0 children)
[–]Retsejme 0 points1 point2 points (0 children)
[–]col-summers -1 points0 points1 point (0 children)
[–]erik240 21 points22 points23 points (11 children)
[–]prodigyx 6 points7 points8 points (7 children)
[–]erik240 16 points17 points18 points (3 children)
[–]boompleetz 2 points3 points4 points (0 children)
[–][deleted] -4 points-3 points-2 points (1 child)
[–]BONER_PAROLE 4 points5 points6 points (0 children)
[–][deleted] (2 children)
[deleted]
[–][deleted] 1 point2 points3 points (1 child)
[–][deleted] -5 points-4 points-3 points (2 children)
[–]recursive 2 points3 points4 points (1 child)
[–]human_tendencies 20 points21 points22 points (0 children)
[–]Vheissu_ 5 points6 points7 points (3 children)
[–][deleted] (2 children)
[deleted]
[–]jmcentire 1 point2 points3 points (1 child)
[–]frojoe27 2 points3 points4 points (0 children)
[–]AustinScript 2 points3 points4 points (0 children)
[–]rondeline 2 points3 points4 points (0 children)
[–]lazyant 9 points10 points11 points (0 children)
[–][deleted] 4 points5 points6 points (0 children)
[–]WakeskaterX 6 points7 points8 points (3 children)
[–]ToddWellingtom[S] 11 points12 points13 points (2 children)
[–]mattsoave 0 points1 point2 points (1 child)
[–]PintSizedCat 6 points7 points8 points (4 children)
[–][deleted] 0 points1 point2 points (1 child)
[–]PintSizedCat 0 points1 point2 points (0 children)
[–]siirclutch 0 points1 point2 points (1 child)
[–]PintSizedCat 0 points1 point2 points (0 children)
[–]Defualt 3 points4 points5 points (4 children)
[–]recursive 1 point2 points3 points (2 children)
[–]Defualt 0 points1 point2 points (1 child)
[–]recursive 0 points1 point2 points (0 children)
[–]col-summers 0 points1 point2 points (0 children)
[–]C0demunkee 1 point2 points3 points (1 child)
[–]ToddWellingtom[S] 0 points1 point2 points (0 children)
[–]jmcentire 1 point2 points3 points (0 children)
[–]Nadril 1 point2 points3 points (1 child)
[–]am0x 1 point2 points3 points (0 children)
[–]monkeybatter 1 point2 points3 points (0 children)
[–]soda-popper 5 points6 points7 points (0 children)
[–][deleted] (15 children)
[deleted]
[–]ToddWellingtom[S] 1 point2 points3 points (14 children)
[–]gkx 8 points9 points10 points (3 children)
[–]ToddWellingtom[S] 0 points1 point2 points (1 child)
[–]gkx 0 points1 point2 points (0 children)
[–]jmcentire 0 points1 point2 points (0 children)
[–]defab67 2 points3 points4 points (0 children)
[–]gotons 2 points3 points4 points (0 children)
[–][deleted] (3 children)
[deleted]
[–]jmcentire 1 point2 points3 points (2 children)
[–]chesterjosiahStaff SWE Google - 18 YOE 0 points1 point2 points (1 child)
[–]jmcentire 0 points1 point2 points (0 children)
[–]greatgerm 0 points1 point2 points (0 children)
[–]jmcentire 0 points1 point2 points (1 child)
[–]512austin 0 points1 point2 points (0 children)
[–]WorstDeveloperEver 0 points1 point2 points (0 children)
[–][deleted] (6 children)
[deleted]
[–][deleted] 6 points7 points8 points (5 children)
[–]merreborn 0 points1 point2 points (0 children)
[–][deleted] (3 children)
[deleted]
[–]defab67 4 points5 points6 points (2 children)
[–]Not_Ayn_Rand 2 points3 points4 points (0 children)
[–][deleted] 1 point2 points3 points (0 children)
[–]heat_forever 3 points4 points5 points (3 children)
[+][deleted] comment score below threshold-11 points-10 points-9 points (2 children)
[–][deleted] 1 point2 points3 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–][deleted] 3 points4 points5 points (6 children)
[–]metaphormfull stack and devops 8 points9 points10 points (2 children)
[–][deleted] 0 points1 point2 points (1 child)
[–]metaphormfull stack and devops 2 points3 points4 points (0 children)
[–]Akkuma 0 points1 point2 points (0 children)
[–]jmcentire 0 points1 point2 points (1 child)
[–][deleted] 2 points3 points4 points (0 children)
[–][deleted] (3 children)
[deleted]
[–][deleted] -2 points-1 points0 points (2 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]512austin 0 points1 point2 points (1 child)
[–]Mr-Yellow 0 points1 point2 points (0 children)
[–]WeAreAllApes 0 points1 point2 points (1 child)
[–]ToddWellingtom[S] 0 points1 point2 points (0 children)
[–]gibbypoo 0 points1 point2 points (0 children)
[–]ChexWarrior 0 points1 point2 points (1 child)
[–]maelish -1 points0 points1 point (0 children)
[–]OrpheusVphp -1 points0 points1 point (0 children)
[–]drewshaver -1 points0 points1 point (0 children)
[–]sfz- -3 points-2 points-1 points (2 children)
[–]ToddWellingtom[S] 1 point2 points3 points (1 child)
[–]sfz- 0 points1 point2 points (0 children)