Making software engineering interviews predictive of job performance
qualified.io
qualified.io
In the end, if you make it too hard in an employee market, you will have good to great candidates drop off... if you make it too easy, you will wind up at the bottom of the barrel. Market pay will also vary wildly and dramatically, and perception is equally varied.
Where I work now, we have a small pre-interview code challenge... it's not particularly difficult and in general should be resolvable in under an hour. I've seen questions on the other side, that I've literally spent 3+ hours on something that said an hour. I suggest those coming up with these things actually implement their challenge on a clean computer (only tools, no reference code) and time themselves. I now cut myself off at an hour and submit what I have stating as much.
As to structured interviews, it will depend. It bugs me both ways when I see more generic, low level pattern questions in interviews only because the practical implications are usually very limited. On the interviewer side, it does help to ask some of the more quiz-like questions as it tends to give you a decent baseline of what the person being interviewed understands.
In the end, personal questions along the lines of what a person works on (developers) outside of educational or work settings gives a ton of information on how they work as well as what they know.
Culture, for as much of a B.S. thing that it is, is actually very important as well. A functional team or set of teams needs a few different types of personalities and worker types in order to do things well as a team. Being able to get along together is also imperitive.
In the end.. it's a crap-shoot and understanding the needs, fill and fit are all varied a bit... trying to normalize doesn't help much. Also, business needs and talent pools will vary greatly.
And where you set the bar will depend on, roughly speaking, your prestige. Google can afford to be extremely selective when hiring technologists. Similar thing goes for Harvard and the Air Force.
> what a person works on (developers) outside of educational or work settings gives a ton of information on how they work as well as what they know
The usual counterpoint: nuclear engineers and surgeons tend to have hobbies with no bearing on nuclear engineering or surgery. Nothing wrong with a competent technology professional keeping it to work hours.
This understanding will enable you to figure out which hiring criteria do you need to maximize vs. which do you need to satisfy and where the bar is.
Also, by interviewing more effectively, you punch above your weight by spending more face-to-face time selling your company/team/role.
We tag questions in 3 areas:
Personal Values: instead of "culture" we help you assess shared values. For example: do you value fun vs. achievement?
Competencies: does your software developer need attention to detail and critical thinking? Or creativity and collaboration?
Skills: what skills are necessary vs. what can be learned on the job? E.g., should you assess for React skills? Or assess for programming/debugging skills in general?
Also, P.S. you have to be careful/thoughtful when asking about what developers work on outside of work. Worst case, you end up breaking the law by discriminating against protected groups. I'd suggest only looking to that if their work history is relatively lacking and you're trying to develop a positive case for the candidate
It really takes all types, so to speak. At this point, I've interviewed and met a pretty broad spectrum. The same goes for on the interviewee side as well.
Again... it's a balance... work history, personal projects (github activity), the pre-interview code challenge, as well as the technical interview are a matter of finding what's needed... someone can be less in one area and make up for it in another. To me at least, independent drive makes up for experience in a lot of ways, especially for more junior-mid roles.
I mean, you're talking about a different thing than "job performance" here.
Job performance is a satisficing measure: you only need to get someone who's good enough to perform the duties you need of them. (Yes, even in software engineering.)
You're talking about ranking measures. Does it matter if someone is "the best" if they're still not good enough to do your job? Does it matter if someone is "the bottom of the barrel" if they are good enough to do your job? I would say no, in both cases.
IMHO, the hiring bar is way too high in most bigcorps; they care about vanity metrics about having "the best", when 100% of the work assigned to these hires could be easily done by people who are not, in fact, "the best."
The point of a job interview, in the abstract, is to filter out the candidates who aren't qualified to perform the job duties even after a few weeks of on-the-job training. This leaves you with a pool of people who are all qualified. At that point, you should either just hire one of them at random, or try to optimize for a second criterion, such as "is willing to take the lowest compensation to do the job" (which usually translates to "has the fewest formal qualifications to do the job, while still actually being qualified in practice.")
Is that really the case for software? I mean, I'm very skeptical of the "only the best and brightest" nonsense, as I think it selects for the wrong people. But I'm also skeptical of the "eh, good enough" heuristic.
Right now I'm helping a friend deal with a code base that was built by an outside dev shop. It undeniably works; the business has been running on it for a number of years. And honestly, like most software, it's not a complicated app; mostly CRUD stuff. But overall it's a spaghetti snarl. Any given concept might be in the code, or in a config file, or driven by SQL data, or even driven by JSON blobs stuffed into the database, mutated by the main code base, and passed along to the JS front end.
Now that I can see the code, I understand why the dev shop needed so many people working on it, and why all features were hard to do. It's because when you use a lot of mediocre programmers, they all create work for themselves and one another. Not intentionally, but just because they aren't able to see how the differing approaches and sloppy work slowly diminish productivity.
So although I agree with you that a lot of companies hire on vanity metrics, I'm really skeptical that "whoever, as long as they barely qualify" is a better approach.
To me, that sounds like a leadership problem at the outside dev shop. Properly supervised, properly supported, and with reasonable deadlines, mediocre developers can provide extraordinary results per dollar spent on probably 80-90% of dev tasks.
Personally, I'd rather start with the amazing senior people, hire bright juniors, and mentor them into being amazing developers as well. As well as investing in tooling for non-developers. If a chunk of work is boring enough that a mediocre programmer can do it without risk (e.g., creating reports), it's perhaps boring enough that you can just enable the users (with, e.g., report builders).
Except we are hiring for a mix of performance and potential - weighted towards potential.
I don’t want to hire a junior engineer that can never make it to senior.
When I am only hiring for performance I hire contractors - and the bar is a lot lower.
Also I think there is a huge benefit for having generally capable employees, even if they are not directly utilizing many of their talents, and not counting the fungibility: they will make generally better decisions when reasoning about things outside their specific work domain and do better in ambiguous, not perfectly-specced situations. And in software at least, having general/complete knowledge and problem solving ability is absolutely vital if you want to be self-sufficient in diagnosing and solving problems, IMO.
It seems like we tend to lose the basic reality of gatekeeping and social ritual in these discussions.
It's never going to be empirical. It's how you strike the balance between the empirical part and the social ritual part, and no one ever wants to discuss that.
But I've certainly sat across the table from hiring managers who I knew weren't going to choose me based on a cursory glance, or just seemed like deeply frightened people.
Sometimes I get back a perfectly decent solution, but in 5x the time I would have considered reasonable.
Most often I get back something that’s not amazing but looks fine, and works at first but turns out to have had some sloppiness or impedance mismatch down the road.
Sometimes I get back not only a solid and thorough solution, but a coworker who went way deeper into the topic than was necessary for the particular task, and is excitedly teaching me new things about it.
From certain people I get back an explanation of why what I’m asking will turn out to be a mistake 8 moves from now in the 10-dimensional chess game, and thing I actually needed instead.
The third group is technically “good enough.” They pull their weight, and we turn a profit on having them around. But if I can manage it, I’ll always try to get the fourth group for junior positions and the fifth group for senior (between those two it’s the same set of people at different stages of development). Those people are maybe 20% of my division, but they do 80% of the work, for what I expect is closer to 30% of the cost.
I'm still surprised that almost nobody has used an actual library for csv parsing (naive solutions reading a line and splitting mostly), which to me results in so many headaches in practice.
Here's the thing though: all these different tests aren't completely independent. You can combine a couple of them and get a criterion validity value of up to .65.
See https://books.google.com/books?id=IvKYhrXAfRUC&pg=PA198&lpg=...
This is what a classic FAANG interview is: an IQ test which is disguised as a relevant skills test for legal reasons. And they work quite well.
I definitely got these in tech interviews. Thoughtworks gave me one last year.
Huh? Where did you hear that?
The reality is that Asians score the highest on IQ tests, whites score somewhat below, blacks score lowest.
The accepted wisdom is that Asians have the highest IQs, followed by whites, followed by blacks.
Well, that's not entirely true. Ashkenazi Jews have the highest IQs, but their IQ-advantage is in the verbal area, which is why when you see lists of the highest-paid lawyers a disproportionate number are Tribe members.
Keep in mind that these are averages. There are plenty of dumb Asians and there are plenty of smart blacks! You can't apply group statistics to individuals.
IQ tests (for interviewing) are typically spatial comparisons, some math, logic puzzles, reading comprehension, and pattern recognition and are done so under a time budget of around 30s to 1 minute per question
FAANG coding requires CS basics - hashmaps, arrays, sorting strategies, trees, recusion, basic ops for all of the data structures, and a few other concepts. There are typically only a handful of questions with 60 - 90 minutes per question
If they used a test that strongly correlated with the outcome of an IQ test, then it would also, legally, be an IQ test, and they'd have to stop doing it.
So instead, they use a test that weakly correlates with the outcome of an IQ test, and then try to extract the a measure of IQ from the "noise" that is all the other variables the test depends on.
In practice the Google/Facebook interview has nothing to do with knowing the CS basics either.
Edit: In practice understanding CS basics is the baseline that gets you to the interview - kind of like English is the baseline for an IQ test delivered in English.
What the heck is this statement? You do realize many algorithms that they test for are taught in an algorithms class for a Computer Science course?
I doubt you took an IQ test before or even properly accessed what it is. there are IQ tests composed of entirely of pattern matching shapes and they do not have any knowledge/language prerequisites. Get outta my internet.
If you think knowledge of CS fundamentals is what is separating the hired from the rejected...
My experience from interviewing hundreds of candidates over the years at a top tech company is that the majority of candidates we reject have strong CS fundamentals.
> there are IQ tests composed of entirely of pattern matching shapes
And there are IQ tests/proxies that are entirely “verbal” like the GSS Wordsum - what is your point?
> I doubt you took an IQ test before or even properly accessed what it is.
I’m certified in my state to administer IQ tests....
I've never stated that. I am aware of the other behavioral tests if that's what you're referring to. But the fact remains that they give you algorithms questions that we dont use in most of our daily work and if you can't meet the rather high basics you are rejected.
> And there are IQ tests/proxies that are entirely “verbal” like the GSS Wordsum - what is your point?
That you can have IQ tests without knowledge prerequisites unlike what you stated before the edit?
> I’m certified in my state to administer IQ tests....
Well either you're BS-ing or you've been confined to some kind of corporate environment where they've somehow convinced management people (who dont code) to adopt a test so detached from reality.
No I’m not. I’m saying FAANG are hiring based on fast pace general problem solving skills that are difficult to game and have very little to do with computer science.
That is why “our” interview processes are being compared to IQ tests.
“We” have rejected people who teach computer science fundamentals at prestigious schools and hired teenagers who only started learning about algorithms a few months before the interview.
> That you can have IQ tests without knowledge prerequisites unlike what you stated before the edit?
How is that relevant at all?
> to adopt a test so detached from reality.
How is it detached from reality?
These are very vague words. What are these tests then? Can you give a sample? You're telling me that you get engineers to interview these candidates and they don't give questions that involve computer science? What are they supposed to ask then?
Or are you telling me you have tests that weakly correlate to an IQ test thanks to a number you computed? And therefore that makes it an IQ test?
> How is it detached from reality?
IQ tests are inherently just a number for one's potential, and they don't tell how someone will perform on the job - there are so many other factors involved.
https://leetcode.com/discuss/interview-question/551434/faceb...
Its NOT related to IQ.
You can search leetcode forum for tons of examples of actual FB questions, all of them are tagged on leetcode.
Practicing for these tests makes you a rote learner and and rote learners by definition have too much crystallized knowledge, and they fail when met with new situations, which is not what intelligence tries to define. FAANG tests hence are not IQ tests if you can practice them.
Essentially these assumptions that FAANG tests are disguised IQ tests are just a reflection of the ego of those who are perpetuating them.
Anyone who feels like replying to this out of emotion they because they're in FAANG or whatever should take a psychology/psychometrics class first (yes, something outside of the software sector) before replying.
Edit: Also, good IQ testing involves a 2-3year break in between IQ tests. The thing is, you can leetcode continuously to game these tests.
Besides, IQ tests have biases that don't translate to good job performance. For example, if English isn't your first language you may do worse on an English-based IQ test.
> I distinguish four types. There are clever, hardworking, stupid, and lazy officers. Usually two characteristics are combined. Some are clever and hardworking; their place is the General Staff. The next ones are stupid and lazy; they make up 90 percent of every army and are suited to routine duties. Anyone who is both clever and lazy is qualified for the highest leadership duties, because he possesses the mental clarity and strength of nerve necessary for difficult decisions. One must beware of anyone who is both stupid and hardworking; he must not be entrusted with any responsibility because he will always only cause damage.
This article makes a huge assumption: that performance is the only factor you're hiring for, and therefore unstructured interviews are worthless. That would make sense if you're interviewing for a factory of emotionless robots. But humans are social beings, and human performance as a team is more complicated than a sum of individual productivity. You need to take into account the affect that the hire would have on the entire team. Just about everyone has an anecdote about a coworker sometime during their career that was super productive, but completely demoralizing to the team. This is a very valid reason to give unstructured interviews, and if you ask smart people who give them, this is what they're looking for.
I totally agree with the utility of work-sample tests. There is nothing better to see someone's performance than simply giving them a small but relevant chunk of work to do. It is very important to keep them short and flexible though.
If you make them too lengthy, you'll skew the results against people who have better things to do with their time. What kind of person works for free anyway? Certainly not the caliber of people I want to work with.
And if you make the test too specific to certain technologies, you skew the test against smart engineers who are less familiar with that tech. If you want a problem solver, give them a problem in plain words, and let their solution be open-ended.
I don't agree with making tests particularly hard, though. Make it nuanced, yes, but of normal difficulty for a given assignment. You need the appropriate people to do the job. If you only hire top-tier algorithmic experts for your basic CRUD app, then you're going to have a very expensive CRUD app with a bored and demoralized team. If someone does sloppy work, you can spot this on a normal exercise as much as you can on an unreasonably difficult one.
I would expect everyone at some point has done something (worked) for free, either on speculation, as a favor, or for bragging rights. Open source wouldn't be a thing otherwise.
Also, I think you're implicitly assuming that structured interviews cannot measure soft skills as they relate to workplace behavior. I would argue the opposite - the only way to ensure high standards for these types of skills is to have a structured interview. Otherwise, you're not systematically trying to hire people whose workplace behavior enhances group productivity, you're just hoping that whatever random biases that interviewers bring to the table end up being a net positive. Being a productive team player isn't about being able to impress a random person in an unstructured conversation - it's about knowing how to behave productively (combined with the willingness to do so, which unfortunately is contextual and virtually impossible to directly observe) in a wide variety of challenging situations.
Unless you're working in a crazy standardized operation thats a moving target.
e.g. We've got a ton of manager & they all sorta do their own thing...they gravitate towards their strong suit essentially. You can't really test for that in advance.
Some people excel at leading 30 man teams on stable jobs. Others excel at being parachuted into technical shitshows and sorting it out. Very different personal attributes.
It's a crap shoot as tracker1 says and will continue to be one
As you mentioned, people gravitate toward their strong suits. So by asking behavioral questions, you can learn how they approached situations in the past and whether their strengths/weaknesses are the right mix for your needs.
But as a hiring manager in that situation, you can select for team members who excel at dealing with ambiguity, internal locus of control, vision, etc. Additionally, you would look for people who value learning vs. psychological safety, etc.
You're in a known situation, and that situation is constant change and churn
That's my point. You don't unless you're in a very simplistic business.
I really don't think you can define/bottle this easily - even with high quality interviewing.
Nor do I think you should. To use a very cliched phrase the hottest hires are the ones that think outside the box AND are killing it. Without some flexibility in terms of filtering and criteria you might miss out on that
It would be a better comparison to a bridge engineer to build a bridge in a different country. The laws of physics are the same but regulations are not. Building any non-trivial software is more comparable to this.
If you hiring for Wordpress (or any other) sweatshops that's a different thing. But then you hiring factory workers.
This is because DS work is larger than a bug fix, implementing a new feature, and even larger than writing a program from scratch. Even a small DS problem is a multi day problem. Most interviews allow one to take weeks to do a "quick" 2-3 day problem.
This process may be out of necessity, but I feel it reduces noise. You really do have a better idea of knowing what you're getting.
Software Engineers may groan at the idea of a take home project, but just throwing this out here: What if a company let the interviewer choose between a take home problem or an in person 30 min style white board interview? What kind of results would come from that? Would the people who take the take home interview work out better at the company, or would the whiteboard interviewers end up working out better?
I don’t think any of this is relevant, but maybe it gives some indication that they can do anything at all. However, most good DS will pass because they‘ve been burned too many times by companies just looking for free help on a problem.
If you’re a DS, don’t ever work on a company-relevant problem for free.
1. The authors of this paper are selling something. This is an advertisement. Not saying it's wrong or untruthful because of that, but it is an advertisement.
2. As another commenter said, the cited data is from a paper that doesn't look at software engineers specifically. Given that software engineering has one of the highest amounts of variability in productivity of any profession, that should be taken into close consideration.
Lol, the article actually ends with a link to the product you're selling:
> Ready to build a more predictive hiring process for software engineers? Schedule a 1-on-1 review of your hiring process or request a free trial of Qualified here.
It's sad it's so hard to tell if someone is going to be a terrible boss or if there are systemic issues.
Some of the best interviews I've had, have had the worst bosses, and vice versa. Though, totally anecdotal, especially given I can only go off of the jobs I've accepted which is a sample set of the best interviews I've had.
1. We sucks at hiring, so we need to train juniors on how to hire early. 2. Programs live in the head of their creators. The code is just a draft left for computer to execute. Build a human culture where the aspiration is discussed. 3. We don’t replace people, we hand over the responsibility. Be ready to work differently. 4. I conduct interview by asking the candidates to explain me I piece of work she is is proud of. If I understand the what, how and why, she usually pass. 5. Remember: most issues are not technical but organizational. We can train people, but we can’t change them. 6. Set high quality standards for your team. Make them proud of their work. On boarding will be easier.
So, it is less about how to hire the shinning star and more about how to welcome and how to create a culture around your values.
My two cents.
The normal is taking some sort of tricky pop quiz styled questionnaire, which in my opinion was not representative of anything about me beyond I know how to use a for loop efficiently. Yet this is what I find these companies offer. They tout them as a quick fix cause its easy to standardize, analyze, and hard to do therefore good, and last but not least waste the candidates time but not the companies. Their the metrics are moot. Not only have they been proven to be ineffective by the big companies that spawned them, but I also find them demoralizing and a turn off.
It seems like the industry is heading towards a self imposed SAT style quiz where the lucky winner of this startup war holds all the power and provides little benefit to either side of this process.
I've been to plenty of interviews for "senior software engineers," where they used the standard gauntlet of algorithms/problem solving/data structures questions in rapid succession for eight hours.
I tend to deliver most of my projects on time and of a high quality. I value things such as correctness and maintainability, and am conscious of other factors to consider such as viability and availability of time and capital. I spend a good amount of my time writing and seeking feedback from colleagues and think it's important to share our ideas and talk about our work.
And when I practice my work I don't think I've ever been in a time-constrained scenario where I had to come up with an implementation of an algorithm while being judged and evaluated for how I think. I know enough about my work to understand when I need to use BFS or DFS and when to use a tree, a map, or a heap; but I also know that if I can't think of it off the top of my head I can walk over to my library and pull out a book or look it up online.
I'm also a proponent of formal methods. I've written specifications to help solve race conditions and validate implementations of locking algorithms. I can write basic proofs.
And I'm a great writer as a result. I spend a good amount of my time writing and communicating my ideas, seeking feedback from colleagues, and in general improving my understanding of problems.
How does finding a cycle in a sorted array or reversing a linked list signal to you whether I would be a good fit for your company as a senior engineer? Does your company also value clear writing and good communication skills? Do you value engineers that can manage themselves and get work done autonomously?
Modern interview practices at most places I've been through don't know how to get those signals. It's useful knowing that the people I work with are also familiar with when to use a heap versus an array but I also value other things at the senior level that most companies aren't really testing for.
I always prefer data over gut instinct but I feel like the process of hiring people is not amenable to clean signals... it's a very messy process and I'm not hopeful that there will ever be a silver bullet.
Internally we use a rubric for the various job roles we hire for and we aim to remove or counter biases at every step of the process. Our teams value diversity and are pro-active about equality and inclusion.
A big part of the process is code review, something our engineers actually do spend a lot of time doing, so the process is mostly focused around that.
The problem is that this misunderstands the purpose of the hiring process. The purpose of the hiring process is to get people who are qualified, while signalling that your company hires good people, and staying out of legal trouble along the way.
I'm not sure I agree that an organization can gain "millions of dollars" by fine-tuning its hiring processes to the nth degree. While I absolutely agree that there are skill differences between programmers, I contend that the economic differences attributable to skill between programmers are dwarfed by the economic differences between any automation and no automation. Simply put, having a terrible programmer automate your business processes today is far better than sifting candidates to find the perfect programmer to automate your business process two years from now. Hiring is about satisficing, not optimizing.
Many things would be simpler if we could: performance reviews, promotions, incentives, salary equality, recruitment etc.
How the individual fits within the team is vital. You might have one of the smartest people on the planet but if they can't effectively communicate or understand and work within the cultural norms of the team you're going to have a problem.
These norms and practices vary and shift between teams, countries, and even within the same team over time.
For example hiring a Linus Torvalds for an intermediate, client facing, political position, is probably going to have poor results.
These are difficult things to test for and are as much a decider of job performance as raw knowledge and technical experience.
"You have developed a new product with broad market appeal, and sales already found you a huge first customer, which would secure you for years to come. In return they expect you to tailor the product to there needs. How do you react?"
It sounds mad, but it seems somehow to be expected by some. Like they expect you to test your company for warning flags as thoroughly as they test you..