Tech sector job interviews assess anxiety, not software skills: study
news.ncsu.edu
news.ncsu.edu
https://news.ycombinator.com/item?id=23848039&p=2
https://news.ycombinator.com/item?id=23848039&p=3
We're working on performance improvements that will hopefully allow us to go back to HN's original style of one big page per thread (not infinite scroll, don't worry). In the meantime please look for those 'More' links when the total number of comments is over 250 or so.
Then I interviewed for another company and utterly bombed. It became suddenly clear to me that I had been an idiot. Of course nearly all of those candidates were perfectly good programmers. They had had shit interviewing days, probably mostly due to nerves, but they probably would have mostly been perfectly good employees. How frickin' arrogant I had been for concluding that people who couldn't solve incredibly high stakes algorithm riddles on a whiteboard in 45 minutes with enough speed and flair were somehow not qualified to be my coworkers.
The interviewers didn’t know I’d gotten a call from my cat sitter that morning and one of my cats had to go in for an emergency check up. (He ended up being fine but didn’t know that at the time).
Later that week I got the rejection from FB and then, 15 minutes later the positive response from Google. Really made me realize how much impact the day has on an interview outcome.
I already know where my strengths and weaknesses are. I'm fine with 1 on 1s and all that, but when it comes to the technical part of the interview process like a take-home design project or a live design challenge, I usually fail.
I know I have the skills. My work has always been well-received, and I've always received good marks on reviews and feedback, but I haven't been able to translate it to the interview process.
I've tried to assess where I go wrong, and I think I panic and put too much effort into trying to figure out what they want to see or come up with something innovative rather than just doing the work and following my normal approach.
The stress of the time crunch (and sometimes not knowing anything about the product or problem) only add to my inability to improve in this space.
--
When I've sat on the other side of the table, I know that most interview processes aren't that well-structured or set up to actually evaluate the candidate. Even when there's a good process, it's often too easy for one person to influence the results.
So sometimes I tell myself that it was a crappy interview process and it just wasn't set up for someone like me to succeed. But I still end up stewing over it and feeling depressed for a few days.
The whole process is missing a feedback loop to the evaluators, resulting in the OP's situation. In my own situation, it took several years after that mess of being forced to shotgun candidates to pick apart what in the experience was actually predictive of success and what wasn't. To this day, the most successful hires from my perspective were those who just really wanted the job and wanted to contribute to the product; definitely no strong correlation with "leetcode" ability.
It's not just that the coding quizzes are poorly administered, but that the hiring mangers and leadership industry-wide have been obstructive to getting evaluators feedback (for starters, what did a candidate's other offers look like? where were they 3 months after the interview?) and especially tight-lipped on sharing interview questions. That last bit is particularly obnoxious because people monetize their insider knowledge either through things like Rooftop Slushie or they take a more Gayle Laakmann angle. (Just to be clear: while many questions are "protected under NDA," many questions are also stolen from other companies-- interviewers asking them are already violating their own NDAs when asking them, or potentially when feeding the question bank of their new employer).
What you can do is go to your manager in your 1:1 and ask for interview feedback. Ask what happened to candidates 3-6 months after the interview, even if they were hired (perhaps not just to your team). Start to get feedback, and then work from there. You'll probably do better interviews, and at least curtail some of the information arbitrage culture in the C-suite.
The leetcode stuff is just masochism. You will spend X months beating DS&A into your brain until someone can pullout a random question and you immediately know what questions to ask, what steps to take, and how to write it out on a whiteboard.
I've often wondered if this is because, from the HR perspective, false positives are much more costly. I.e., Those who would be helped by limiting the false negatives are project managers who are too downstream in the process for HR to care.
It gives so many advantages: - people will have some fun trying to solve a real issue / build a little software - they will show how good they are at stack overflow, general methodology, cleanliness, test coverage, deployment and even git (how many we see who can't even gitignore their project files, make a build script that works, or test for real) - horrible candidates who can't even cheat will not be able to lie their way around a fake resume, cheaters will bomb the code review quite fast - candidate will also discover their future team mates general work attitude during the review and if the reviewer is good, will lock the candidate faster than "how many billard balls can you put in a Boeing 747" type of interview. - candidate will even LEARN during the code review => you get away with something out of the interview even if you fail
Since I've been interviewed that way, doing my little project on my wife's pregnancy bed smiling like an idiot at solving the challenge, then fell in love with my manager showing me new tricks during the review, I'll never do any other kind of interviews myself.
1) How good they are 2) How much they actually care about the job offer -- the more detail and the more passion they put in the exercise, the more into the job they are.
https://hbr.org/2017/03/teams-solve-problems-faster-when-the...
I would stand up in front of 80 or more engineers, go in to esoteric aresa of the operating and talk eloquently and at length about the structures and code found there, and live code on a projector, answering questions about the code and debugging the code of everyone in my class as they followed along. Day-after-day. 40+ hours a week. It was intense. I became an independent advisor to teams and a consultant for some of the groups on how to bring up Android on new devices, create device drivers, and so forth.
Some of those classes, I wondered how some of the people I was teaching was actually able to hold down their job.
Months later, after I stopped teaching, I interviewed at Intel and PayPal and Cisco. I bombed every interview. I was, by all accounts, unable to program my way out of a wet paper bag.
Everyone has off days.
You can feel the pressure mount - any algorithm that doesn't run on the first try or second (with a couple of quick fixes) and you're being mentally discounted.
The same for silence - if you're thinking through something, take abnormally too long, you're discounted.
The Perfect Dismount. A 10.0 is what's needed to land a FAANG job.
It was received pretty positively; especially early on (2012-2015) we had a lot of candidates indicate they had never done anything with JSON or REST before. (later on they mentioned having done nothing with XML before, lol).
And we got to see some interesting solutions and creativity; one guy we hired did it all in J2EE, while we were a Spring fanclub. But the code was sound, he showed that he understood how it worked, etc.
The conversation during the technical interviews were entertaining as well.
That went very well and I was feeling pretty good.
Then the CEO had a quick chat and happened to ask me a very simple technical question and my brain would not work - I completely failed to do it even though it was trivial.
I think that's how I discovered that mental context switching is a real thing - I had spent a few hours preparing and giving a presentation and then when asked a simple technical question those parts of my brain were completely offline. I think the shock of not being able to do it had a big effect on me and I went to bits (possibly the first time I've ever done that).
I've interviewed 6 candidates within a week, and hired one. Never regretted of the outcome.
I've set up a test code so: an input variable, comparison variable, and an empty function. Function takes input variable as an input, and output of which is compared with comparison variable.
Interviewee would be asked to fill in the body of the function, and play with it until function gives the expected output. I've set up a computer with two screens, put IDE on one, and Google on the other. Two chairs, and some coffee.
First I've chatted with the interviewee for about 10 minutes, tryin to make them comfy as possible. Then before the test, I've stressed very much that I am also a programmer, and I know how awkward it is to be coding while someone watching, and that'd alone would make me do silly mistakes, so I was expecting same from them and that was completely OK.
Afterwards, I've encouraged them to use Google in plenty, and feel free to stay silent or explain as they go.
So I got to assess their fluid intelligence, their ability to break the task down and progress efficiently, their English proficiency[2] (if they use Google in English), their usage of keywords, their choice among in stack overflow responses, etc.
At the end I've rejected a guy with 8 years of experience on his CV, and hired a junior. Looking back, that turned out to be an amazing decision, best I could have made, for work went good with the junior and I've had the (mis)fortune of working side by side with the 8yr guy several years later.
PS 1: Task was to write a recursive function to travelse a multidimensional array, and find out whether the first letter of every "value" was a capital letter. PS 2: The work was to maintain and develop mid-scale SaaS project along with me.
1: https://www.joelonsoftware.com/2006/10/25/the-guerrilla-guid... 2: Country's mother language was not English, and English proficiency was not good on average.
I think Fizzbuzz can be actually a reverse test: if an experienced programmer can fail fizzbuzz in an interview, then maybe it's the interviewer who screwed up.
In practice whiteboard interviews assess this pretty well. A new senior engineer must immediately be shipping optimal, tested, and well designed code. Otherwise you'll have Junior Engineers coaching Senior Engineers and the Junior Engineers will just get frustrated and leave. Worst case, you'll have an "architect" who never learns how to actually deliver independently in the environment.
What's different from you and many other people is that you admit and face your bias rather than justify it.
I'm seriously curious what google interview board members have to say about this study. People like Gayle Laakmaan have been saying things to justify the whole process for years; but now that there's actual science, what do they have to say in the face of science?
> incredibly high stakes algorithm riddles
Yeah there you go. This is your problem (Google/Facebook I assume?). It's more than questionable to expect candidates to solves complex algorithmic problems on a whiteboard in 45 minutes. You should ask moderate algorithmic questions that offer many solution approaches and accept solutions that are "good enough". It is not about having a candidate gaining some magic insight that some MIT student had 30 years ago during his master thesis (and reproducing it in 20 minutes lol). It's about giving a reasonably complex problem, that is not too easy but also not too difficult and allows you to focus evaluation on:
* Does the candidate write proper code that isn't far from compiling? (If they can't, they don't have the experience. It's like not being able to write without a spell/grammar checker. Small mistakes are fine. Big mistakes indicate lack of understanding.)
* Does the candidate have a structured approach to problem solving (all the time I see people starting to write code immediately and getting completely lost in what the problem even was. This is a red flag to me and baffles me each time again.).
* Does the candidate debug his code and walk me through. Does he find obvious bugs while doing so and can he convince me that his code works? (If not, and that happens often, its another red flag)
* Can he rank the speed of his solution with other theoretical solutions? Let's say they found an N^2 algorithm. I usually ask if there is anything faster (even if there isn't). This shows if they have some decent fundamentals in CS and are able to think about the boundaries of an optimal solution and how far they are from it. This is something, people without a CS major usually can never do and unfortunately also not too many with a CS major. It's kinda relevant though, if you optimize for performance and have no clue what the theoretical limitations are, then you are grasping for straws.
There is one big secret for getting A LOT out of easy questions:
I start to modify the problem statement and see if they understand how this changes their solution and their algorithm. People who don't have a good grasp of CS will fail miserably at this task, because this isn't something you can memorize.
There are questions being asked that full academic papers have been written on. What's even worse is typically I get interviewers that are not experienced+prepared enough to give hints or work with you.
I am happy that you've had an epiphany to see where you were wrong. If you ever are in a situation to build a quality team. Interview people for the skills to work with others+ teach others, look to optimize, experience, and that they're willing to learn. You'll have a fairly good group of candidates to pick from as that don't do well in these coding interrogations.
I worked for a FANG and conducted over 100 interviews. Most of that time I thought I was asking really hard questions and wasn't sure I would have been able to answer them if I hadn't seen the question before.
I later interviewed at a different FANG, surprised myself and answered harder questions than I typically gave and answered them better than most of the people we hired.
Not sure what to make of that.
Once I had this candidate. Damn, I know my questions are deceptively simple on purpose, but he literally couldn't do anything. Not even a trivial brute force. Not even any related simple knowledge questions. Couldn't tell an average from a median. The only good thing I could write in the feedback was "seems to know some basic syntax".
It was quite a learning moment to read that everyone else was praising how this was the most brilliant candidate they've seen in years. Well, mine was the interview just before lunch, in a schedule that was atypically later than usual. I guess starting an interview after most people start their lunch break was asking for it. He also got hired - apparently the committee agreed that "can't think when hungry" is not really that important a flaw.
I'm not sure I know how to write anything from scratch anymore, because I just search/read/alter/test. The breadth of what I work on is 100x wider than it used to be, and so I've become absolutely dependent on quickly reading docs, copying code found online, and then deep diving into testing and rolling it out the door.
I deliver a TON more, but I'm convinced I'd bomb literally every interview I go to today. Today, for example, I updated our firewall rules, updated some Java business logic, tweaked some javascipt and PHP on the site, reversed an odd macro email-phishing virus we got, configured a new RDS server VM for clients, and updated some network GPOs. 20 years ago, I would have never worked on ALL of those things in the same week - let alone the same day.
Maybe we should interview with small take-home tasks to be submitted with some write-ups to test how people research, reason, and write-up problems, rather than writing code on the spot on a whiteboard. ...but maybe that's just me.
Without meaning to attack you personally (especially in the context of the rest of your comment), a comment like this annoys me a bit.
I presume by "average" you mean arithmetic mean, but the median is also an average, and depending on the context the median might be a far more useful statistic than the mean. Confusing the mean and the median is one thing, and perhaps you actually used this terminology in the interview; "confusing" "the average" and the median isn't really worthy of comment, and sounds more like a breakdown in communication between interviewer and candidate rather than a lack of technical knowledge. It just seems vaguely hypocritical to me to be expecting a certain level of ability from the candidate and then using imprecise/informal terminology.
before lunch or 4pm or later interviews we’re worse across all candidates
certain rooms we knew were smelly, loud, or poorly converted from like a storage closet scored worse across all candidates
we took some rooms out of the rotation and made sure everyone was well fed/had drinks. the effect is real
It seems like there's probably some value in a "MoneyBall" company that identifies a way to interview without most of the anxiety. Perhaps hiring a few people with remarkably high EQ who customize the interview setting who review the inteviewees' work and watch them program over a few days in their own computer and IDE.
I know I've interviewed people that have frozen up, but for whatever reason I didn't pause the interview and address the anxiety, but rather I tried to adjust the questions (which generally didn't work).
I hope you suggested that this employee get tested for hypoglycemia. It'd probably greatly improve their quality-of-life to go from "my brain isn't working and I don't know why" to "my brain isn't working and I know exactly why; I need to drink some fruit juice."
Shouldn't that be tell a mean from a median?
That's all there is, really. I've had no problems in the past implementing complex algorithms, if I needed it to get the job done. Today I'd barely be able to tell you their names. But to get to the point of knowing most of them by heart and being able to implement them with no help whatsoever, would take a lot more work and dedication, knowing that you'll probably end up not retaining most of it anyway.
The same system is used in competitive sports and academic tests. They mostly measure how much you really want to be part of that league/team/school, rather than whether you'll do well or not. If there was a perfect correlation between pre and post entrance test performance there wouldn't be PIPs, performance based layoffs etc.
Or in other words it tests how much free time you have to spend on unpaid activity, which can be a good proxy for ageism.
No kids or mortgage? Then you're a perfect candidate to spend countless unpaid hours studying for months, going through mock interviews, reading books, testing your skills etc. to have a shot at working for us.
This works well for tech companies because many don't care about your experience with languages and frameworks of yore. More so whether you can put in 80 hour work weeks.
>If there was a perfect correlation between pre and post entrance test performance there wouldn't be PIPs, performance based layoffs etc.
Nothing is perfect, saying it's useless because it's not perfect is a silly argument.
But the same skill is transferable across arbitrarily many companies. This is why many prefer interviews to take-home tests, so that they do not invest too much time in any particular company.
Here's the truth that nobody wants to believe: you will never know how good someone you've never seen perform will perform until they actually perform.
The vast majority of people who work at FAANG type companies do not do any of this.
Companies that don't do the above usually advertise requirements for X technology with Y years of experience. A smart programmer without knowledge of X can learn it easily, but he won't even be called for an interview.
For large companies like FB or Goog, if they lose a few people to false negatives, it's fine because there are hundreds more lining up.
Either way, from the large company perspective, the system works. Most notably, it's really efficient.
The issue is when small company A starts asking you to implement Tarjan's or something. That's where this interview process seems particularly damaging.
After the usual "tell me about yourself" stuff, the HR rep asked me what I knew about the company and was noticeably disappointed when I said I had only accessed the homepage and Glassdoor reviews. She swiftly ended the call after that, leaving me with "homework" to go through (go through more of their web page/web presence, meditate about their mission) after which I would be qualified to resume the screening call.
Later I re-read their Glassdoor reviews and they had other people had had basically the same experience. Strangest interview I ever had.
FWIW, all of my friends who somehow managed to get into FAANG or other top tech companies swear that were they to go through the interview again, odds are they would fail. This despite all of them being great engineers.
The second guy was rejected but later hired as a contractor and he's worked out well as well and now we're looking at offering him a full-time position.
My conclusion is that our interview process isn't good at determining if a candidate would be a good employee.
My preference would be to hire someone as a contractor and give them a project then use that to determine their quality and fit. Unfortunately, HR tells me that's not feasible for reasons I don't understand.
He kinda blew the interview. He did okay, but not even close to the level of experience he had.
It was very obvious he was nervous, so we hired him anyway. No regrets.
Getting good at interviewing should also be a priority, and is doable.
Getting good at interviewing is largely about developing (a) genuine programming skill; and b) at least some people/communication skill.
When you have those skills, you have less anxiety about the interview, and can perform well.
That and debate gave me the ability to just start a sentence without knowing where it will end and then talk my way to a conclusion that sounds like it makes sense (useful when you have 2 minutes to prepare a 3-5 minute speech on a topic you've never seen before). So when I get up in front of a whitebard, I just start talking confidently, and even if by the end haven't solved the problem quickly or efficiently or at all, it sounds like I've been thinking sensibly about it.
My takeaway, I guess—parents, make your kids do debate!
You're effectively advocating for more bullshit. The problem is that this works in the first place - we shouldn't be rewarding it.
A downvote is warranted for giving a bad advice on gaming a system and giving both parties in an interview process a poor indication of what is expected in possibly years to come.
Thus, no vote given.
I think given what I read about debate teams -- on podcasts and here in HN, I am on the fence on suggesting that to my kids. There are certainly great benefits, but not too certain if those out weights the drawbacks.
I've always structured my interviews to weed that kind of thing out.
One of my very worst bosses had this quality. Perversely, it was about the only thing I admired about him.
The guy could walk into a meeting of NASA flight engineers and engage in conversation without uttering a single fact that would betray his total lack of any knowledge/qualifications.
n.b. He was fired not long after I left the company.
That sounds like a good skill to have in marketing, sales or politics. It sounds like a bad skill to have for engineering.
Now before you dismiss the idea because you are "too good" to do C2H hear me out. Everyone knows that actually working with someone on the job is the only way to get an accurate evaluation of an engineer. Everything we currently do in technical interviews (whiteboard coding, pair programming, take home assignments, etc) are just attempts to recreate a working environment. If you are hiring a contractor first, you can do a light-weight interview process and then just bring them on and start working together.
As the dev being brought on you can prove your value before you negotiate your salary. You can also try out the company and manager before committing to an offer.
It's crazy, I know, but I think it would drive dev salaries up if it weren't so hard to change jobs because of the tech interview gauntlet we've created for ourselves.
Negotiating your salary upfront is likely going to give you the best deal you can get. Don't kid yourself into thinking that you can "show your value" to improve your negotiating position. Your first few months on the job are usually when you are at your lowest performance, since you are learning the company's processes. That is your trial period.
You are in your best negotiating position when the company needs you more than you need them, and that is absolutely NOT after doing contract work for them for a while.
Once you're at the point of converting, if you get a lowball offer, the contract position is a black mark on your resume that hurts your negotiating position with other firms.
That said, I would be happy to do C2H if the following conditions were met:
* Signing bonus paid in full at point of signing the contract, with no clawback.
* Full health coverage during the contract portion (extra money plus the option to buy from their plans).
* Severance pay at full salary for at least 6 months if you choose not to convert.
* Non-exclusivity during the contract period (I can do other work if I want, and you don't own any IP I produce other than what I produce explicitly for you).
I think this is sufficient to equalize the negotiating disadvantage that I get for taking the contract. I don't think any of your clients would go for it.
How does C2H help me jump jobs as a dev who is already employed?
Since I already work 9-5, typically my only free days are my weekends. I might be willing to work for a few weekends if it would lead to a hire, but are those really compatible with what the hiring company wants? My guess is that they want me to take the step of leaving my current job, which comes with loss of health and dental insurance, which is often a big concern.
I don’t disagree that it would be nice if every candidate could take the time to try a company out before they join them, but the real world really can make that impractical. Some of the suggestions this thread makes around “buying” ones way out of these problems (such as knowing to have paid for COBRA ahead of time and being able to afford it) represent knowledge and opportunity that is all together distinct from ones ability to do the job.
No I dont want to quit my current role until I have a secure job. I'm not going to c2h to be told six weeks later I'm on the street.
A short time later, I did another conversion interview, got people who were willing to tell me "look, we know you can code" because they had SEEN me code and design systems they were using every day. They still did some interview questions, but lo and behold I didn't feel like jumping out the window every second.
I put up a few PRs, then a final assessment was a discussion that was essentially, "Now that you've seen our codebase, what are your thoughts on how we could improve our architecture, etc.?"
I was paid for my time as well (because I was legally able to accept payment at the time). I think that's actually a larger hurdle — companies that disallow contract work that prevent engineers from getting paid for this type of interviewing, although I suppose it's in their best interest.
Besides, from the hiring company perspective, only unemployed people or people who really hate their jobs would end up sending their CVs. The competent people who are currently happy where they are would never try C2H. So they are missing a lot of potential good candidates that way.
I would certainly move, even internationally, for the right job, but I'm not going to relocate for a shot at a job.
Temp-to-hire is problematic for its own distinctive reasons:
* It's difficult to generate apples-to-apples comparisons of candidates in a temp-to-hire setting because the engineering workload isn't constant; candidates are getting the luck of the draw with whatever the tasks are during their contracting period.
* There's as much subjectivity built into the projects candidates get during their temp-to-hire as there are in whiteboard interviews, so culturally preferred candidates are just as likely to get fast-tracked in a temp-to-hire process as with interviews.
* Interview processes routinely evaluate many candidates for a single opening --- that's expected in basically all hiring, across every industry --- and can't reasonably offer temp roles many candidates simultaneously, so in effect temp-to-hire just pushes the qualification problem to a higher level of the funnel, where the recruiting process decides who to extend temp offers to.
* Temporary contracts draw out the hiring process and potentially make it take far longer to finally fill a role than other processes do; you're required to trade accuracy of evaluation against the time taken to fill a role, bearing in mind that when candidates wash out of their temp contract, you likely have to start all over again with another candidate, making it even more important to pre-screen candidates before offering roles, which just recapitulates the whole problem.
* The tech industry is notoriously bad at evaluating on-the-job performance too; every developer I've talked to has stories of dead weight team members† that were kept on the team interminably because no process existed to evaluate their performance accurately. There's a whole cottage industry of people who have failed up† through role after role, because there's no resume difference between people who phoned in a role† for a year or two and then decided to move on, and people who did well.
* Perhaps most importantly, temp-to-hire is deeply unfair to candidates; a career norm in tech is that people secure their next role while winding up their previous one (in fact, that's a norm in most white collar industries, which is why there's so much written career advice about how to handle counteroffers). Taking a temp-to-hire position requires a candidate to forego income security for a chance at a job; when that job doesn't work out, they're now in a distressed position when looking for their next job.
(I'd add, though it's a nit, that temp-to-hire positions virtually never compensate appropriately; contractor wages are routinely 2x+ what FTE wages are, in large part precisely because of what makes temp-to-hire so attractive: freedom to fire on a moment's notice with no commercial/reputational cost.)
† Shut up, Kurt
That's when I get an offer.
My first time interviewing with Google (in 2008), the press was reporting that they were in a hiring freeze, I had no big names on my resume, so I figured it was basically hopeless and I'd just do the best I could and enjoy my trip to Silicon Valley. After my interview, I was like "Well, I did okay, but you really have to be perfect to work at Google and I wasn't perfect. I'm never coming back to California anyway, so I might as well do all the tourist stuff [I'd held an extra day to interview with Twitter, but they ended up not moving forwards with my candidacy] and just treat it as an all-expenses paid trip to SF." So I just went to Alcatraz and Fisherman's Wharf, treated myself to a nice dinner, and took the red-eye home to Boston. As I'm groggily waking up after a post-red-eye nap, the Google recruiter called me to say "Your interview feedback looks great. We'd like to fast-track your application on the assumption that the hiring committee will say yes."
Been living in California for 11 years now, and I just started back at Google after working there for 5.5 years, leaving, and doing startups for another 6. The most recent round of interviews was the same - I was super nervous for Lyft, Stripe, Coinbase, Netflix, etc. and ended up not getting the job, but with Google it was like "Hey, I worked there once, I know people who also know my interviewers, I used to give interviews like the one I'm sitting in now, what's the big deal?"
My previous startup I worked at had gone under, and I was thinking about starting my own. An old coworker of mine invited me to lunch. We had a couple of margaritas, and he asked if I wanted to see his office.
I went to check it out, and suddenly he asks if I can talk to some of his coworkers.
So I basically interviewed while drunk and not fully realizing I was being interviewed.
They offered me the job, and I have been working there for 8 years now.
Maybe the best way to be relaxed during a job interview is to not even realize it is happening. And having a couple of margaritas can't hurt.
Like it or not, interviews are a game. Smart people will figure out how to play them after losing enough, though maybe some of us take a bit longer ...
Somehow the recruiter was still interested.
Maybe this should be my strategy for every job application? :-)
(I'm older now, have hangovers less often, and find them much more tiring, so this might not apply any more)
Then my brilliant plan was spoiled.
The role of anxiety in interviewing became very clear to me during a season when I failed all my interviews until I got my first (and a very good) offer. Suddenly I started passing all of them. It was night and day. I was very surprised having always had much longer and frustrating recruiting processes.
My conclusion was if I interview to gain interview experience, not to get the job, I do far better, and I gain interview experience. This is the local maxima I found from that, but there could be better.
They asked students to find the "Longest Substring Without Repeating Characters".
For the formats: "We created two interview settings: public setting and private setting (see Figure 1). In the public setting, wearing an eye-tracker, participants solved the technical interview problem in the presence of an experimenter. The participant was instructed to talk-aloud while solving the task, which is a standard practice in technical interviews [28, 47]. The lab space contained a whiteboard at the front of the room. An experimenter was situated near the participant for the entire session without interrupting participants’ thought process. If a participant asked for clarifica- tion, the response was brief. For example, if a participant asked, “Does this look correct”, the experimenter was instructed to reply, “Complete to the best of your ability”.
In the private setting, participants solved the technical interview problem in isolation. Participant were provided a private room with a whiteboard. Participants were informed that the experimenter will step out the room and will not return while they are solving the problem. Thus, they had to make sure that there is no questions left for them. When the participant was ready to begin the task, they wear the eye-trackers, the door was closed, and the participant worked in privacy, until the task was completed within allotted time. After the experiment, we clarified with participants if they had any uncertainty about the problem they just solved."
They ran a randomized controlled trial on the effect of having another person in the room, which is interesting. It does not, however, show that these interviews fail to assess software skills.
This is also essentially the worst case for having another person in the room: they are completely superfluous, just watching you, not helping, not communicating, not collaborating. Not even saying things that might make you more at ease.
The headline of the linked article is indeed heavily editorialized. There were differences between the two groups, but the study didn't conclude that the interview was only assessing anxiety.
> This is also essentially the worst case for having another person in the room: they are completely superfluous, just watching you, not helping, not communicating, not collaborating. Not even saying things that might make you more at ease.
That stood out to me, too. In an attempt to remove the influence of the observer from the equation, they simply put a silent observer standing over the person's shoulder. In the example photo, they have an observer standing almost literally over the person's shoulder, silently, observing their every move. It's not clear if that's how the experiment was conducted or if it's just an example photo, but it's not how any real world whiteboard interviews are performed.
Even the study participants noted how strange the situation was:
"P25 felt unnerved that someone was “watching me and they are not commenting on my progress”
Being ask to solve a problem without your typical tools does as well.
I assume these tests don't actually get to the root of the issue but only represent a portion of behaviour.
- Take home: 2 days to read a newly released Deep Learning paper.
- On site: explain the paper to the hiring manager.
- Evaluation: (1) Did the candidate understand it? (2) Did the candidate go farther, and look into the cited papers and understand that? (3) Can they explain Deep Learning concepts and talk their way through related problems?
In 5 months of searching for a job, this felt like the most relaxed interview, because it was really a conversation between people in the field. It was also the most demanding and interesting job I encountered in these five months. I got the job, but this happened especially because the manager actually did the work of respecting my experience and talking to me, instead of going for the traditional and "safe" BS.
An opposite experience:
Technical Interviewer asks me whiteboard SQL question. I answer it, only to be corrected on a minor point. Turns out, when I tried it out on my own, I was actually correct. This person was to be my manager.
I did get an offer from them, but this and other red flags made me decline.
Takeaway for managers who actually care about hiring well:
- Don't force your candidate through one off tasks that don't represent their day to day. Is your Data Scientist really just running SQL queries and optimizing computational complexity of their algorithms? Isn't the main point that they can think critically?
- Hasn't their previous experience shown they can code? Their Github? Sure, give them a (quick) take home project if you really want to make sure. In the rare case they faked their way through the whole thing and you really couldn't tell after talking to them for a few hours, you will surely notice in the first few weeks.
Sadly, I'm coming to the conclusion that this is at best completely orthogonal to anything most people care about, and at worst, it's a liability.
I know the take home assignment is a divisive subject, but I think it's the perfect way to evaluate a person's coding ability. Did they use dependency injection or did they reference globals straight in the code? Did they break down the code into small testable chunks or write one giant file? Would their code pass code review? These things are way more important for most codebases than shaving an order of magnitude of big 0 complexity.
The only issue with the take homes is that they take a ton of time. Most companies say that it should only take a few hours but also ask for production grade code. Thats impossible - clean code takes time. Companies should at least start compensating for the time taken to do the assignment.
My favorite interview process involved a take home assignment which if you pass takes you directly to the final onsite interview. There the live coding sessions involved building more features onto the take home. As an experienced programmer who sucks at Leetcode I really hope the industry moves in this direction.
The worst take home assignment I ever had was an extremely tricky brain teaser, the answer to which could not be found on google, and had to be done in the not very popular language this company used. So I not only had to write useless brain teaser code, but I couldn't do it in a language I was already comfortable with.
It's somewhat common during a data science interview to be given the actual problem you would be working on if you took the job. Often times you're given multiple days as a take home or multiple interviews to go through it, because the problem is difficult enough it does take research to begin to hypothesize a possible solution.
Most software engineers would cry murder if you gave them a 3 to 5 day take home interview that is an actual problem the company is trying to solve. "It's free labor. They're taking advantage of you." but in the data science world solving a problem can take 3 to 12 months, not 3 to 5 days, so you can't solve it in that time frame, just come up with ideas that lead to paths forward. The company can't take advantage of you this way.
On the SWE side, a near equivalent would be pairing with someone on the actual code base with an actual jira issue for a day, learning the code base, seeing the problems in the bug tracker, and then deciding from there if those are the kinds of problems you want to spend the next handful of years of your life on.
I like this kind of problem because I know what my 9 to 5 will be for the next year to years and if it is what I want to be doing with my life.
When she left that job 10 years later, her boss noted, that "one of the things she learned from her was that it was ok to hire someone who shows up 45 minutes late to their interview.."
I guess it's possible that the jobs I wanted are at more prestigious companies and therefore are more picky and the interview is just harder to pass. But I suspect it's not just that, and psychology plays a part too.
[1] https://onlinelibrary.wiley.com/doi/full/10.1111/j.1949-8594...
[2] https://eric.ed.gov/?id=ED542116
[3] https://www.theatlantic.com/magazine/archive/2014/05/the-con...
But interview stress is very different than work stress. It doesn't seem to translate well. Some people do fine during the interview and then crack under real pressure, and some people it's the exact opposite.
I've changed my interviewing to involve very little coding. I might do FizzBuzz on the phone screen just to weed out the folks who really can't code anything on the fly, but that's about it.
After that, most of my interview is me explaining some real works tasks that they would have to perform, and then asking them how they would try finding the solution and if they have ever solved a similar problem in the past, and if so, how. I also ask them about difficult problems they've solved, how they solved it, how they found the problem, etc.
My goal is twofold -- try to figure out how they research problems they don't know the answer to, how they investigate issues; and give them lots of examples of what will be expected so that they can bow themselves out of the process if they don't think it's a good fit for them.
This obviously works much better with people who already have a job, and are more likely to take themselves out of the process, but so far it's worked pretty well.
Granted, you need to be able to program. But being able to recall and implement particular algorithms from memory isn't particularly valuable to the job. I want problem solvers. People who have dealt with complicated problems and found solutions. Or at least know how to find them.
Somewhere around halfway through, when the candidate is floundering and failing on an objectively quite simple problem (I promise it really is that simple), they'll say something like "sorry, I would usually have no trouble doing this in Scala". At the outset I give the option to use their own setup or Coderpad, either one works; they'll choose Coderpad and then halfway through say something about wishing they had such-and-such from their preferred IDE.
I think there is some psychology at play here, where candidates think if they do it on hard mode, it's extra points or something. I really just need them to solve a simple problem so we can be sure they know how to code. The ability to code with both arms tied behind your back is not a signal we're interested in measuring.
In reality human to human interactions, sometimes stressful, are part of the job. Customer & PM requirements, technical debates, giving feedback, explaining your technical solutions, etc. are common.
Maybe part of the problem is the education that does not prepare people to reality of the job.
Note: I do realize that SWE interviews suck, and I'm not trying to defend them. Just making comment on the study.
But if I'm interviewing you for a senior SQL engineer position, and you can't talk me through whiteboarding a simple query with one join and one aggregate function... you're not senior material. I'm sorry. We need people that can communicate and explain themselves, and talk through their own line of reasoning, where I work.
Again, I'm not defending SWE interviews... but of course people are better at expressing their skillset when they're in a controlled environment. The trouble is, the workplace isn't a controlled environment. Life isn't a controlled environment.
I don't want to work with brilliant programmers that have zero social skills. If devs can't muster up the courage to answer interview questions... maybe that means that they should work on themselves a little bit?
Sure - you can find yourself in very stressful situations at work, but I have never in my life been in a situation where you're given 45 mins (or hours, for that mater) to solve some problem, or you get fired.
Simply but, there's an incredible discrepancy between the stakes at play, between interviews and work.
To put it a bit more extreme - but to hammer down the point: Imagine working on some problem, with no help whatsoever, and that in front of you, there's some guy pointing a gun against you.
Just imagine how stressful that must be, and how much of your focus is distracted on reading that guy.
Same goes for interviews. For a lot of candidates, that interview is their way out of poverty or lower-class living. And the judge and executioner of your future, is sitting in the same room as you. It's a very stressful situation - probably one of the most stressful situations in your life.
If I had to land that customer for the business, I would surely botch it. That's why I didn't go into sales.
I think that the difference is you have much higher stakes in an interview. If you make a mistake with a co-worker or customer, you can usually just go back and fix it. If you make a mistake in your interview, it can cost you the job and it's not so easy to go back and fix.
This is the genesis of the infamous behavioral interviews where people ask about conflict resolution skills, how and when you'd escalate problems you can't solve, name a time when you had a problem and how you solved it, etc.
> For this study, researchers conducted technical interviews of 48 computer science undergraduates and graduate students. Half of the study participants were given a conventional technical interview, with an interviewer looking on. The other half of the participants were asked to solve their problem on a whiteboard in a private room. The private interviews did not require study participants to explain their solutions aloud, and had no interviewers looking over their shoulders.
> Researchers measured each study participant’s interview performance by assessing the accuracy and efficiency of each solution.
[...]
> “People who took the traditional interview performed half as well as people that were able to interview in private,”
I was a wreck. Worst interview of my life. Didn't get the job. I am pretty sure I would have if I wasn't falling apart.
Companies that are serious about avoiding gender discrimination in their hiring practices need to carefully consider what they are really looking for when certain candidates seem to have "the right stuff" after a whiteboard interview. We need more research in this area.
I remember talking to a Google interviewer and I came up with a better solution than they expected. Since my solution was non-standard for online median finding-they wanted a unbalanced binary tree where I wanted a tree with the values at the leaves and using a fixed height, in this manner you could easily find successor and predecessor and I'd have actually found a better solution than their expected solution. They wanted the standard binary tree solution with predecessor and insertion, where I failed.
Everything will still jovial, until I mentioned that I consider the tools I use and how to operate them as part of my skill-set. Apparently this is false.
This was me interviewing at Google for a potential job using computer graphics or computer vision. I wouldn't even be working with problems anywhere close to this.
I've found that everyone is just copying Google's process because of all of Google's cash and success, but don't realize that most of Google's success is not due to any investment but rather just one solid team doing search well.
Anyways, I'm glad I didn't get hired, I have a better job (pay and work). Both of the projects I would have worked on have already failed or nearing failure already, it's been like 3 months.
I take a small fairly self contained function from the existing code base. Give them 10 minutes to read the function.
You can also add a few actual bugs into the function if you like to see if they are picked up.
I then generally ask them a couple of questions. First to step through what the function is doing. Then what the larger context of the function might be and finally if they have any thoughts on improving the function.
It's a quick test usually under 20 minutes you can even hand it over to non technical interviewers if you describe what kind of answers they should be looking for.
I did 14 interviews at Google (two applications, first one after being contacted by them, for second one I contacted them to try again). As far as I could tell, I passed most of them, and for some of them I even provided new, unique solutions that the interviewers were amazed by. That being said, both times I got reject in the last step before the offer without being given any reason why. The only think they told me was that I should learn less from programming books and have more experience actually building things. I have never read a programming book, only learned by doing and had many projects to showcase. Some interviewers were not even paying attention to what I was saying, seemingly working on something else on their laptops. My recruiter was both times so certain that I would get the job (based on the very positive feedback she received from some of the interviewers) that she started telling me about the relocation process.
Today, 4 years later, I am not mad about it as I got to work in a very cool gaming startup for 2 years and now I run own company where I have created a product used by thousands of webmasters. I am honestly just confused about the process, as I know that I am a top-tier programmer and, based on what others said, a nice person to work with. I guess that ultimately it was their loss, but it's just a machine so no one really cares if X gets the job or not.
Interviewers need to do their due diligence. Coding tests can have their place when interviewing for certain kinds of positions, especially for new grads and entry level positions. In the end nothing can replace checking references and looking into a person's work experience.
There is no algorithms and data structure whiteboarding test that can differentiate between a junior and a senior developer. Being senior is a product of acquired wisdom, not just skill. And in fact senior devs can easily bomb out a whiteboarding test because we're further from university CS experience.
Whenever I've conducted interviews in the past, I've gone out of my way to help the candidates relax. Need to use Google? Go ahead, I do literally all the time. Need some advice, something explained? Just ask, that's why we have peers. Nobody writes code on a whiteboard, with no docs, with three people watching, silently taking notes.
Interviews should reflect the environment within which the job is actually done, and allow the candidate to demonstrate what they're good at, instead of treating them like a circus animal jumping through hoops, giving them performance anxiety.
For my most recent job, they circumvented my interview entirely and just did a few days of contract work instead. That way the company gets usable work, the candidate gets paid, and it filters out those who can interview really well but may not be a good company fit.
Seeing how they deal with a stressful situation is an integral part of the interview in my opinion, and I imagine it is a feature for any IT role where that is the case. Standard dev roles, or other roles where time-based stresses aren't as prevalent, may be different.
Only yesterday I had a candidate bow out 10 minutes into the whiteboarding exercise, which is probably best for both the individual and the company if that kind of situation is untenable for them.
Companies should trust the people applying based on their resume and ability to talk about what they have done in the past or how they would approach real world problems (organizational, interpersonal, technical). Maybe have them write some small bit of real world code using libraries and frameworks they are familiar with, while they are alone without anyone watching [key|pen]strokes.
Maybe I'm lucky but after 20 years in the industry shipping products to consumers I've never ran into a Software Developer or "Engineer" in the real world that couldn't get things done in a normal working environment in private industry (now in government, don't get me started). Some are slower, some are faster, some can handle bigger problems, but I have no idea how to reliably filter for that in an interview having tried many things.
The "OMG this senior person can't write FizzBuzz on a whiteboard or while videoconferencing and knowing someone is watching your every keystroke so they must be a horrible programmer" approach is just wrong.
I've only ever failed interviews where I had to solve problems or write code with someone watching (virtually or in person). Let me be alone and give me a product to build, though, and it'll get done. Customers will love it and it will be great. See: resume and products in the wild. The Math-oriented abstract tech interview is missing out on all the practitioners that care about the product and can build reliable maintainable systems in a team environment.
These days I'm primarily management, though, so I get to set the hiring guidelines. Yay!
One thing that stands out to me about the process is that everyone gets the same interview, doesn't matter if you are fresh out of school or have a lifetime of experience. Experience counts for nothing in these interviews. Can you design twitter in 40 minutes, thinking through every possible failure mode and issue along the way, or not? Apparently, I can't or not well enough. I think these companies really want folks with great public speaking and whiteboard skills - I'm kind of an introvert and that is a challenge for me where the day-to-day work is not.
* Give people a take-home test that mimics the real work we do.
* Pay them to do it.
It's amazing how many candidates we find that are great at the actual work we need to do, and happy to do it, and how many people it weeds out who wouldn't be happy doing our normal work.
The best way to hire good developers is to take them out for coffee/lunch/beer and talk shop for an hour or two. That's it. Make it more of a discussion than an interview. Ask them about the their experience, what have they liked working on, what have they hated, but also tell them about what you've been working on and see what feedback/ideas/questions they have about it. I find fielding their questions and comments just as valuable as asking them my own. Joke about things that have gone spectacularly wrong, trade war stories, that kind of thing.
I think it's a great way to assess whether a dev "knows their stuff" or not. A couple of other notes: - If you're not a dev yourself, get someone who is and you trust to do it. Try and keep it "dev only" if possible, remember this is supposed to assess their dev ability, but is also a good indicator of communication and cultural fit within the dev team. - Try to do this one-on-one or at most 2-1, any more than that and it becomes a panel interview. - If someone is regurgitating theoretical or blog-post-scanned information without much understanding, it becomes more apparent the longer you chat with them. So an hour or two is a good length of time.
We usually also do a quick take home coding test too, but have found the chat/discussion to be better indicator of long term success. As many have already pointed out, I also find the coding tests (whether take home or in person) don't really assess "real world" ability and can often be gamed.
I'm not particularly upset at either case, I'm happily employed. But there was a nagging feeling in the back of my head that I was disappointed that I didn't get to convey 'the true me' to either company, whatever that means.
Imagine you want to hire a comedy writer for a TV show. However, you conduct your interview by having your candidate perform stand-up improv comedy like "Who's Line is it Anyway". While you want to hire someone funny, you don't need to hire a performer.
In my experience, programming interviews are basically an improv programming performance. I didn't pass an interview until I had enough practice performing while others watched.
Talk about buying the lede. If there's any justification for abolishing this practice, that's it right there.
That meant carefully controlling my emotions when their answers were bad, and having a smooth transition when the answer didn't come at all - a situation that typically causes tension. You have to essentially hand out the answer or transform the question into a trivial one so that the candidate can have a small win and relax. If you're not doing that, chances are you're screwing up the whole process by throwing the candidate off-rails after a simple non/bad answer.
That's why the interviewer has more control over the outcome (besides the scoring) as his / her bias will heavily reflect on the dynamic.
Writing working code well and fast is important.
But so is communicating with your coworkers!
Being able to talk about your code is not a weird thing you only do in interviews. It's an essential part of your everyday work, and the programmers who don't do this well are in a sense underperforming.
So just removing the talking part, as this study did, removes an important part of the interviewing. When I interview people, I value their ability to talk about the problem and how they think about it more than coming up with great code quickly. I need people who can talk to me, not just the compiler.
That said, talking through your whiteboard programming task might not be the ideal way to measure this skill either.
When I “cracked” my Google interview and got the job, I joined a team I never met. Of course we all could code , since we “cracked it”, but did I enjoy the team dynamics or team culture? Nice people but if they were a 10 person startup I wouldn’t choose them or would they have been successful.
None of the social dynamics which are important to teams was there or even fostered, acknowledged.
You just did a transfer and kept fishing.
Why, b/c Google just believe coding skills are all that mattered.
Yet they matter, but so do other things.
If you understand that a technical interview assesses anxiety, and you roll that into the plan, if you know what the game is, then you're 1/2 way to a win-win already.
There are still challenges with contract to hire but overall I've had great success with it. First of all, we get a realistic deep look at candidate capabilities before we commit and they get a look at what it's like to work with us. Then we're very prepared to part ways because that is the entire point of the contract to hire. If feels 10x more successful in hiring great people than any other approach I've personally seen and, very critically, it is more humane and respectful.
There is a hypothetical concern that highly pursued candidates won't wait around for that but we've found exactly the opposite is true. The best developers are happy to see we have a more sound hiring process and are psyched because we have a credible case that our teams are really high quality and free from the random bad apple that spoils the work experience at most other companies. Great devs aren't worried about being hired today or in two weeks, they know they can get a job anytime they want. What makes great devs great is usually their passion for great craft, process, culture - if we can credibly promise that, they overwhelmingly are happy to do contract to hire.
On the first challenge, I only completing coding and did a first run of my solution with 90 seconds to spare. It didn't give the correct answer, and I had only about one minute to debug and try again. In that case, I felt immense anxiety and nearly gave up. But somehow I managed to keep it together long enough to spot a misplaced array index [ ] reference and produce a correct result.
On the second challenge, on my first run at about 17 minutes in I discovered that my entire approach was not general enough to meet all the possible cases. As I recall, while the rules of the problem are stated, you are not able to see test cases until you run. With three minutes left and the understanding that my approach was fundamentally flawed, I just gave up.
The experience was demoralizing. On the plus side, when I did live coding challenges for job interviews after that, I found them all comparatively easy and relaxed.
What would be better, in my opinion, is an overnight problem to solve, followed by a detailed walk-through of the solution the next day. That presented walk-through can prove to the interviewer that the candidate did not simply copy a solution (without understanding it) from elsewhere on the internet. Of course, if the solution was copied by understood, that should be positively accepted in many cases. There's a reason we use trusted libraries instead of writing our own code where possible.
Having said that communication and interpersonal skills are big part of most jobs even in tech. We hardly develop software in isolation these days.
I don’t know about other industries, but in Tech there are some really inexperienced interviewers out there, who’re impulsive and lacks discipline in conducting objective and meaningful assessment.
I would love to see what a control group of non-tech interviews looks like. Not sure what the equivalent "whiteboard while out of the room" is, but it's hardly just software devs who get nervous and can panic in interview situations.
The ones with the best data are the company themselves, especially those who interview thousands of candidates a year. These companies (e.g., all FANG) have enough data to assess which interviewer, which interview questions and which interview process have positive correlation (and even causation) with future employee performance. And they can optimize the pipeline to interview most candidates with the interviewers that can actually assess future employee performance for instance.
Either these companies have already done these optimizations and analyze the trove of data they have, and the process is what it is for a reason. Or they haven't yet and there is still much room to optimize the process, and applicants have a chance to see those processes updated for the better (although here better means better for the company, not necessarily better for the applicant).
In the back of my mind I was always thinking I had to do more than "enough" and be exceptional. You read studies about how two people with the same qualifications might not get the same results after an interview due to unconscious biases by the interviewer. I felt like I had to be good enough that'd I'd overcome any kind of bias the interviewer might have. It's stressful.
Then my first phone interview came, and I totally bombed it. And the next one. And the one after that. All in all, I think I bombed about seven code interviews (didn't even make it to an onsite) before I started to get some traction. One of the interviewers outright told me that I wasn't a very good coder.
After that I managed to get a couple of decent offers, but the process was quite humbling. If I interviewed again today I'd probably be in the same boat. Whiteboard interviewing is definitely an acquired skill.
I was rejected in the end, and I believe I either a) wasn't a culture fit or b) they found someone with more experience (I'm 6 years in at my first tech job). What was nice about it though was that I was very calm and collected throughout.
> One of the interviewer asked me to recite the algorithm for constructing a Convex Hull. > ... > we struggled together for an hour, with him frustrated that I couldn't remember the details of an algorithm I last had seen 6 years earlier and couldn't recite in 60 minutes what took our professor 180 minutes of lectures to cover, and me frustrated that would have taken me 30 seconds to look up.
At the end, I started feeling a really negative association with them. I would never sleep well the night before the inevitable next interview and it just got to become a really tough thing. And most of the interviews were totally no-nonsense, no pleasantries, just tough.
I ended up getting the job but I turned it down. The interview process told me everyone I needed to know about the company culture.
As a really quick reaction it's worth noting that coding is probably less than 25% of my job as an engineer.
In others' experience is this also the case for you?
Employers are so focused on the well shared "the worst hire is a bad hire!" that they implement obtuse and ineffective hoops candidates must jump through in attempt to weed out "bad" candidates. This results in hiring those who survive the process, not those that will do the best work.
I am looking for people who can handle pressure, who can communicate clearly, who can handle the unfamiliarness of the experience, who can handle time pressure even though most of the time they wouldn't face that at work. If an experienced engineer cannot split a string in less than a minute on a test then they don't figure as a valuable emplyee to me. Why? Because anyone can Google something or apply deep thought in a private room but good employees imho can work with noise around them, with distractions, with changing priorities etc. in other words the interview is a poor representation of a real environment.
Sure, it means you might lose out on someone who just needed a few hours to calm down but how are you supposed to know that? Maybe they needed another few hours, days, weeks? Maybe the test you gave them was hard but if you asked them about something else, they would have done better.
It's no different than someone turning up late. It very likely wasn't their fault but you use it as an indicator anyway because you don't know them and don't have much else to go on.
* Companies doing a "centralized" process that ignores the candidate. The questions are always overly generic and it really boils down to, "You need to want to work here enough to basically take any job we'll throw at you." Sorry, I don't want to work any company enough to just take any random job.
* Coders asked to complete academic problems that will NEVER come up for them in their real work.
* Coders not being allowed to leverage external resources like they will literally do EVERY DAY in their real jobs.
* Managers being asked to be coders in interviews.
* Questions that have binary "right" and "wrong" answers.
* Asking questions that have a million ways to do it and then honing in on one specific disagreement the interviewer and candidate had.
* Interviews that are more about the interviewer stroking their own ego and proving that they are smarter than the candidate.
* Completely ignoring that the absolute best indicator of future performance is past performance; not, "what quiz could this person solve in 45 minutes in an interview."
https://en.wikipedia.org/wiki/Dr._Fox_effect
I'm genuinely curious - do whiteboarding and code exercises mititgate this at all?
Clearly there has be some minimal standard of ability. But given two similar performers, do performance-interviews favour those who project confidence? Or is there no influence on outcomes?
I enjoy interviews (I like meeting people and chatting about their projects and problems) and I think running a VC backed company for nearly a decade has set me up well for detaching my performance in the interview to my self worth/abilities (ie. I’ve grown a pretty thick skin).
Ultimately it comes down to “can I do the job?” and “is their process set up to accurately reflect that?”. If the answer to the first is no then that’s cool, I’d probably have a miserable time in the role and under perform even to my actual level. If the answer to number two is no then I probably don’t want to work for them anyway as they are unable to accurately measure and analyse prospects/opportunities beyond just hiring.
- First section is "pair programming". We try to replicate what coding on the job is actually like: you can whatever IDE/REPL/language you want and can use google to look up docs. Our problem is specifically designed to be a fiddly problem which leads to edge-case handling with no possible 'beautiful algorithm' answer. Once they get the first solution, they have to revise their code to support a new fiddly use case. One interviewer actually provides help: pointing out syntax errors and suggesting alternate approaches if they appear to be heading towards a dead end. Most applicants "succeed" - so we evaluate on how well they can keep their code organized and readable, how they respond to suggestions, and if they are easy to work with/good communicators.
- Second section is code review. We give them several snippets of not-so-great code and ask what they would suggest we change before putting it into production. Does a great job of showing us where the candidate has depth of knowledge, and is a good approximation of a portion of the duties we expect them to perform. I was surprised to learn that very few companies do this - we find it extremely valuable.
- Third section is a conversation about tool familiarity (can you linux/aws?), depth of knowledge in the various domains we use regularly and designing an architecture (indicative of developer seniority). This is probably the least remarkable section.
Every section is set up so there are no gotchas and there are always multiple correct answers. I think we do better than most at minimizing the anxiety inherent to the interview process.
I thought I had discovered a clever hack when I was interviewing. You ask enough closed questions about the problem that the interviewer tells you the answer. Then you repeat the answer back to them, as code or aloud, and you pass.
Now that I am interviewing, I am desperate to find anybody who will ask me enough questions to have me reveal the answer, and then repeat it back to me.
It worked great. It also gave me (the interviewer) some time back in the day.
I swear that for 90% of the typical software interview loops, someone with some minimal understanding of computer science that spent 2 month studying the typical Leetcode problems would probably have been fine and do way better than a software engineer coming out with 10 years of experience that didn't take the time to review his leetcode problems.
My current company does a few rounds of low-key chatting, some about technical stuff, then a 1 to 2 month trial period with the understanding that there is no guarantee of a job at the end, it only becomes permanent if it's a good fit on both ends. Obviously this is time consuming and expensive, but it works because we're a small and very stable company, which I realize is very much _not_ the norm. This does work great, though. They've managed to build a team of excellent, autonomous, highly skilled developers who stick around for the long haul. Wow, that sounds a bit self-aggrandizing -- I'm really thinking of my co-workers, I hardly count myself in that category. Maybe someday.
Anyway, I'm genuinely curious what other models you all use that work well. By "work" I guess I mean result in high quality and long lasting additions to a team.
* Resumes can be exaggerated, falsified, or perhaps more often often leave out important details or relevant experience. Reviewers often also put unconscious emphasis on formatting or style (I had one colleague that I swear would accept anything in Computer Modern). * Take-home projects (if not carefully designed) can be a considerable time sink and reviewers may be biased toward particular coding styles or languages. * Prior employers are often not allowed to provide meaningful references, and even when able to, won't often have the time or motive to do so. * Referrals will be biased towards the friends of your current workforce, making it hard to improve the diversity of your workforce, and are a pool that will become exhausted as you scale or if your employees stick around. * Behavioral interview questions are biased towards candidates that know to prepare for an even more contrived corpus of questions with even less bearing on day-to-day job performance. * Candidates may not have prior code that their are able to share; certainly most employers make that difficult or impossible. Expecting side projects or open source contributions biases towards candidates that have means or desire to program outside of work.
I think it's ridiculous to think that a programmer should be hired without any part of the process evaluating their programming ability. The key is to do this while minimizing stress for the candidate. Explain the format of the interviews up front. Tell them about the people they are interviewing with. Let them have breaks. Help them through tricky parts if you have to. Avoid things that aren't realistic (whiteboard coding) but don't shy away from things that are (whiteboard a system design). If leetcode doesn't represent what you do at work, don't make them do it.
Had to go through half the article before this showed up. You could be learning something new and useful rather than spend so many cycles trying to master trick problems.
One of the things that terrified me when I read it was Ken Thompson's description of his interviewing process.
Paraphrasing: He would ask about a project the interviewee was proud of, then drill them with critical questions about it.
I actually like the general idea. But the social pressure of this situation seems to be quite intense.
My count on applications is well past fifty and I have done so many phone screens(HR and technical) that all of them seem like a blur to me. At this point I wish I could throw a portfolio of my work at a company and get a job. From a Reddit thread about "unrealistic car mods" shows my overall skill set in my ability to get the job done. https://www.reddit.com/r/cars/comments/hdrgv1/car_people_of_...
My current job I got because I found a major vulnerability in the company's authentication system and recovered the private key for the client to server encryption.(I didn't make much money at the time and didn't want to pay the subscription cost for the premium service.)
I have interviewed/hired nearly every person on my current team. One of them was almost denied by a senior manager because the candidate wore a backwards baseball hat during the interview.(Lack of professional attire, etcetera.) The rest of the interviewers over ruled the manager saying that was a dumb reason. Turns out this candidate was super conscious of a balding spot on his head and he wore hats to hide it. He turned out to be an amazing coder and great at solving problems that came up.
One of the most enjoyable interviews ever with no whiteboard and no one around me to check on my progress. I was blank for first half an hour or so but made great progress by the end. Eventually got the offer.
My biggest problem with algo interviews is most of them are trying to determine if you happen to be familiar with one particular algorithmic solution to something - if you don't happen to know that one algorithm, you fail. In the real world, you have to learn as you go. You never know the solution to every problem in advance.
- Pair programming with a problem that neither the interviewer nor the candidate has seen. Doesn't matter if they can't find the optimal solution. It would show how good of a communicator and how proactive the candidate is.
- Make the candidate implement a solution to a problem that's already solved. The interviewer shows the problem, explains the solution, and the candidate needs to code it. It would reveal the coding fluidity, understanding of specs, how they ask questions, etc.
Thoughts?
My interviews therefore end up being conversational, and definitely non-confrontational. I want to hire someone who the team will get along with, who knows what they are doing, but in the end I have to remember that if we hire them I'd prefer we didn't start off our relationship with an over-the-top technical interview.
So far I've been successful at finding good candidates this way. Maybe it's just luck. But I don't think leetcode interviewing is the only way to get well-qualified employees.
I got asked to bring in my laptop with some code of my own we could discuss. I had a side project at the time so wasn't a problem. I got asked some questions, asked to add a simple feature. It was pleasant. I knew the code, so I was relaxed and didn't need to look up stuff. I think the interviewer learned some stuff as well.
The only problem people might say is that you used someone else's code. Even if that was the case, if someone else can talk confidently about code that they didn't write and jump in and add a feature easily, you have probably found someone good.
Can we try and push this as the new way of doing interviews. Low stress and respects peoples own time.
IMO, there's Moneyball-like opportunity for companies who can utilize (or, in another word, exploit) this aspect. A tech company may conduct tech interviews with a private environment & a traditional environment, and if one's performance is much better in the private setting, they might be able to offer a job with a reduce salary than the candidate's capacity shown in the private setting.
Sadly, it's all a game, but the good thing is that interviewing is a skill and can be improved with continued practice.
48 subjects and we can make a generalization? People's stress reactions seem intimately tied to enormous number of contextual factors. Looking at the abstract it seems the "goal" of this study is "to make problem-solving assessment more equitable and inclusive". A noble and worthy goal but this does not sound like academics or science. It sounds like its conclusion was sought for.
A large amount of false negatives, like candidates that would otherwise be great employees but maybe just suck at whiteboard coding, is considered acceptable by most employers because research shows the cost of bad hires is much much higher than missing out on many good hires. Employers know the current process is miserable and leaves a lot of good people behind.
That said, it did filter out people who had trouble handling the new stress of a whiteboarding interview and people who did not practice whiteboarding. If I ever interview for a FAANG again I'll make sure to do a lot more preparation.
To me, asking LC or the same algo and data structures questions (implement DFS .. wow genius) is just gatekeeping via a measure that most people can pass by just memorizing stuff for a month.
usually this line of thinking is summed up as the follow question: Can I see myself working with this person for 40+ hours a week?
then they bring down the axe with the following: not a good 'culture' fit and move on to the next candidate and the broken cycle continues.
This is all in addition to the broken whiteboarding challenges.
In retrospect, I was extremely anxious the first time, but the company was about to enter a high-growth phase and didn't seem to have fully-developed hiring practices (I got a tentative, very informal verbal offer on-the-spot, and a phone call to confirm I had the job about 24 hours later).
The second time, I was interviewing with a big US bank so I assume they had a better eye for details. Maybe I'm getting better at not showing my anxiety.
And I believe this applies to most job interviews, not just in tech.
And having skills retained under pressure is actually a valuable trait in this industry. And at least at desirable companies, the process is designed to minimize false positive, it doesn't care that much about false negatives. This is by design.
My guess would be that they filter out orders of magnitude more people with poor resume-writing skills or that didn't go to the right school.
Although I do agree that interviews that you can/must practice for are silly and there's a lot oof that around.
When you avoid terrible engineers and hire by the tens of thousands, you get plenty of good engineers and a few great ones. You also miss a ton of qualified candidates, but Google has more of those than it needs. It can afford to miss them in a way that small companies can't.
At my current job, we have our candidates do a short take-home assignment to assess coding skill, but we also have them do a live presentation to assess their pre-sales skills and ability to present under pressure.
We try to separate the two tests to get a better read on the two skill sets we're looking for. So far we've hired strong candidates. We prioritize avoiding false positives over false negatives; in other words, we prioritize turning candidates away over hiring someone we're unsure about.
A friend of mine would have fallen on their face during that sort of interview, but they're more book smart than me and write quite well.
If we were the two candidates there, I would have got the job, but they would have done it better. I don't know what the solution is, but it isn't more of the same
This happens all the time. People complain and complain, something comes out proving them right (or at least confirming their opinion) and all that happens is people relate. Politics, jobs, healthcare, interviewing practices, work conditions...
If programmers actually joined a union and organized themselves to make a db of companies with shitty interviewing techniques, bad business practices, etc. maybe something would change, but hey, complaining is easier, right?
At a lean startup or smaller team though this isn’t unheard of. I’ve had to debug and code up multiple things while everything was on fire around me.
Mistakes are guaranteed to happen no matter how many precautions are in place. You can reduce the probability of a mistake happening but when it does whoever is fixing it needs to understand how to stay calm and work well under pressure.
Not by choice, but because I cannot sleep the night before an interview. I have difficulty sleeping in general, and the anxiety of an interview drives it through the roof.
Whiteboarding is also terrible, pretty sure it is used intentionally to skew hiring results toward certain types.
If someone is looking over my shoulder while coding I can't think, I think best when there are no external inputs(no noise/eyes closed).
Assign a short coding challenge and rank candidates on their solutions.
Then, one at a time, hire each candidate as a contractor for 20 hours of work. Let them fix bugs and do code reviews. See how effectively they communicate through code and in code reviews. Invite them participate in the weekly standup meeting.
Finally, have team members who worked with the person write confidential feedback with a hire/no-hire rating and justification. Hire the first candidate who gets all 'hire' ratings.
It's like that parable.
2 students approached the master, wanting to become swordsmen.
'I want to reach your level in 10 days', said a student. Master replied 'It will take you 10 months'. The other student said 'I don't care if it takes 10 years, Master'. The Master said 'and you will learn in 10 days'.
> “Our study suggests that a lot of well-qualified job candidates are being eliminated because they’re not used to working on a whiteboard in front of an audience.”
This is a common daily task at any company I've ever written software at. People who can communicate their ideas effectively are better at their job.
It’s a problem that most people seem to not want fixed until they are themselves negatively impacted. Since the very concept of ethics is so utterly foreign its need and application cannot be effectively communicated without resulting in some manner of embarrassment or hostility.
In most of my programming jobs, explaining your work was most of the job and writing code was less important.
The whiteboard environment is a bit unnatural but I don’t want to hire someone who gets the right answer if they can’t explain it to me.
I think the problem often lies with the interviewers’s ego that results in this strange paradox where they’re trying to demonstrate their competence to the interviewee by way of technically “outwitting” them.
That way, in the event the interviewee is personable enough to get hired, the working dynamic is that much closer to being formed between the two, and chances are reduced that the interviewer is hiring a potential rival.
The test is rigorous and well designed. Few minutes of questions are designed to be so easy any can answer them. "How do you spell your name?" etc. This is by design as people can be extremely nervous when taking a foreign language exam.
If you are interviewing people, do what you can to put them at ease at first.
This doesnt' happen to me after I grinded leetcode for a couple of months.
you are anxious if you feel unprepared.
I eventually found that a moderate does of phenibut 5 hours prior was an ideal balance of social inhibition vs the types of impairments that come with these drugs.
The best interview I had was when they asked me a whiteboarding question, gave me a pencil and paper, and left the room. I solved it, they came back, and we talked about my solution. They still got to hear my thought process.
Looking back, my life is dramatically better working remotely for the same level of income with friendly helpful coworkers in a non toxic environment.
If you skilled but you neuroticism makes you less productive even compared to someone less skilled who cares about skill level.
You could end up with a skilled team that folder under low amounts of stress.
Something to think about, especially if you're involved in a startup...
interviews also assess communication and thought process. and working code isn’t necessarily good code. also wonder if the people in the private room used their phones to research answers
For example, in our study, all of the women who took the public interview failed, while all of the women who took the private interview passed.
That is an amazing statistic! From 100% failure to 100% success!
But with practice, that stress goes away.
Let's make good use of this discussion and compile a list of practical suggestions.
Would you have moved companies earlier or moved more often if a coding interview was not standard practice in hiring?
I think we should come up with new software engineer interviews techniques
I've become pretty much convinced that many of the leetcode tests are "young-pass filters."
I recently saw an ad for a two-month, intensive course on how to pass interview questions.
The heck with that. I want to learn relevant stuff.
If people don't want me working for them, then I'm not particularly interested in working for them. Too bad. We could have made beautiful music together. I'm no slouch.
Tinder generation, swipe next.
You don't ask plumbers to show how they do the job before hiring them.
- I try hard, and I believe with a certain success, to follow a sound approach to interviewing. I read the resume, I see where their contribution to the team I am hiring for can come from. Then, false positives and negatives never go to zero, and such is life (although some people are much better than others at observing and judging). I mean, people get married and divorced in 6 months, and it follows that there are inevitably bad assessments also in tech. But I try to ask questions that can allow me to gauge the skills of the person in front of me for the job that they are hired for. A conversation, more than a test. Things that can get googled are of no interest to me, for example. Or theoretical and never-to-be-used-IRL knowledge. Can you imagine do a try-out for a hoops team, you are a guard, and they try you out as a play? Or you do a try out for the Patriots as a quarterback and they test you on punting? Which is what happens in tech more times than expected by chance.
- Among the most nightmarish experiences I had as an interviewee, I remember: a hiring manager yawning for the whole interview; another time, I successfully (brilliantly?) completed a coding test in a few minutes and the interviewers said it was all great, I have no other questions. But then the recruiter told me that no, the interviewer felt that coding was so and so (what?). Another time I was dismissed after the first of five planned onsite interviews. No idea why.
- What about homework, you may ask? I took a few (2 or 3) homework for some of the most popular companies in SV. Well, one time I made this model and I don't know, maybe I will die an Achilles death for my hubris, but I believe I can fit a tree-based classification model after 20 years of work. The recruiter said that both graders like my model, but I did not do hyperparameter optimisation. I told them that the optimisation was both in the documentation of the homework and the associated Scala code. They said they were asking the graders again (it was just one, the other copied what the other wrote) and that they would have been back with an answer in a week. After a gentle nudge, they said that no, the graders did not like it anyway (they never took a second look and I wasted my time: for what, exactly?). I am not gonna take any other homework from any company, if not for reasons of desperation or destitution and I hope it won’t ever happen.
- Most companies rarely if ever do any business or technical analyses of their interviews. Google pollinated the tech world with their interview strategy and the other companies said: if Google interviews this way, why should we do any different? I work for a big company now, there is no post-mortem, and neither pre- nor middle-. We hired more than 100 people this way for a new team, it could have been better, worse, who cares? Nobody checks anyway. Because, and this is the main insight I’d like to present, especially for big companies (for start-ups it is different, an exceptional IC can “make” the company), it does not matter. There is a big area of 20+-D skill-space that is “flat” with respect to the employer’s contribution to the company. You don’t hire that uber-incompetent and you are doing fine because the market, overall economy, luck, people skill of the C-suite are much more important than ICs, managers, or directors’ skills (beyond a certain threshold, of course). Google prefers to hire talented people and then it does not allow them to work on anything crucial because the most important thing is not letting them work for other companies? It does not matter. And if the question is: but if the interview process is inefficient, are we not wasting thousands and thousands of employee-hours? I have got the same answer for you: it does not matter, because there is often no need (in big companies) for more than 20% of the time of the employee, people get hired for all sort of reasons, but rarely for (true) technical or business reasons.
A more effective interview would involve tasks that more closely resemble day to day work. However, the examples of this that I've seen so far make for much more ambiguous evaluation or are much more difficult to schedule:
One example interview process I've seen is having people submit PRs to a codebase to fix bugs or implement features, and then review a PR submitted by the interviewer. This more closely resembles day to day work, but has the disadvantage of spreading the interview process across multiple days. Additionally, you might tell the candidate that they shouldn't take more than 2 hours to implement the PR but who knows if they spend 10+ hours on it.
Another alternative interview format is a 2-hour long one that starts with the interviewer asking "how would you build a text editor?" There's no right response. If the candidate gives responses like ropes and gap buffers then the interview might go in a direction focused on data structures and systems. Some candidates ask if it's a WYSIWYG editor like word, or an ASCII/unicode editor like Vim. In that case the interview might test the candidate's abilities to think through how to build an interface to decouple the UI and underlying data structures. The candidate might start off with a simple array, and work through why it becomes infeasible at larger lengths and think through ways to mitigate that. This interview was flexible to test technical knowledge and reasoning for candidates at any level, and could go in a variety of directions. But on the other hand that makes consistent evaluation difficult and training people up on this interview similarly difficult. This was at a small company with maybe 30-40 engineers, where each team basically had total latitude on how it carried out its own hiring. That's not how a lot of larger companies' interviews work, which often emphasize consistent evaluation and multiple interviewers.
The only interview which does more closely resemble real world tasks, and I suggest that more companies employ is debugging interviews. It requires the candidate bring a laptop and that the company build a couple repository templates, but once that's done it's a very easy interview to conduct. Just observe the candidate debug and make note of how many bugs are fixed and whether the fixes do bad things like breach layers of abstraction.
Sure, no love for whiteboards from me. However, this does suggest an arbitrage opportunity for an employer who is willing to look differently at these candidates, and then profit handsomely, Moneyball-style.
There's a bunch of money just being left on the table and nobody is picking it up, really?
My two cents is that interviewing candidates can give a whole lot more insight into how to perform in an interview. Interview performance is a skill that is separate from the actual job, and gauging that performance is sub-optimal. But everything in this space is sub-optimal, it's all pick your poison.
I usually took it as a positive if companies did some basic coding skill test, showing they at least cared that people can code.
Also, the people who fail because of anxiety, how will they fare in the normal job situation when they are supposed to discuss stuff on the whiteboard with colleagues?
Maybe the results could be taken as "give people who fail the coding interview another chance", but I wouldn't take it as "don't do coding interviews".
It doesn't hurt "the industry", there's a competitive edge to hiring otherwise superior engineers that are passed up by poor hiring practices at certain companies.
Not everybody needs to work at FAANG, or worse, companies that act like they're FAANG. Less money, less bullshit.
Anybody have any first hand accounts on using drugs to calm anxiety before the interview?