This is great. I especially love that candidates are given a choice, so if they prefer the traditional technical interview they can choose that.
Normalizing performance between the two interview types will be challenging, but I think the benefits to be reaped far outweigh the difficulty of the challenges.
Agreed. My reaction was "finally!". I really do not approach software engineering as Performance Art -- and I never write code on white boards when I work. I've been fortunate to have been asked only once to do such a performance in an interview, and my reaction was unfortunately (and unexpectedly) like the candidate they described. In that case I didn't write anything on the board, but instead explained verbally how I would approach the problem. They actually gave me a "take home" problem to solve. I was able to go to my office and produce a solution like I normally do, and then sent them the sources and test results.
Very glad to hear that folks are breaking free of this long-lived trend. I also interview candidates on behalf of my clients. Personally, I find the most effective technique is to choose items from their CV, and have describe in detail (with a white board) how they did it, what challenges they faced, etc. Then, pose to them a hypothetical "but what if you were constrained by X or Y, how would you adapt your solution", etc. It is very easy to spot a charlatan or liar in these questions. If they really did what they claimed on the CV, this type of session gives them great latitude to demonstrate and expand on what their capabilities are.
You've got to be a little careful picking out items from their CV, though, especially if you go back far enough. I barely remember anything I did six months ago, and anything one or two years ago I couldn't explain to you in anything more than a really broad overview, despite being neck deep in the code. I've since moved past that, tackled other projects, stuffed my head full of knowledge of other systems (and hobbies), and all that deep technical information on those projects is long, long gone.
Not disagreeing with you, but just saying there can be legitimate reasons why they don't have deep knowledge on past projects besides "they're a total charlatan, a liar!" It's probably cost me jobs before, and I try to reflect on and refresh my memory on past jobs as best as I can before interviews usually.
I've even gone over notes I took at a couple of my past jobs, and I don't even remember doing a lot of those things even with it written down in my own handwriting.
Triplebyte founder here. I can't be entirely sure until we give this a try, but the hope is we'll be able to tell if the candidate wrote the code by talking to them for 45-minutes about what they've done.
In discussions on this topic I see a lot of: "Programming on the spot is hard, let people program at home"! But then other people say "Why should I program for free at home, my resume clearly shows I am already a skilled programmer. All this will do is cater to young people without families, or those fresh out of school".
I am not looking to hire devs right now, but I am thinking about the same idea with a tiny tweak when we move to that stage. If the verbal interview goes well, offer 2 choices. Make it clear neither choice is seen as the better choice, and both will be judged equally.
* Sit on a computer with me for an hour, and show me how to code a fairly simple program.
or
* Get a small actual work assignment to take home and code. Would expect it to take maybe 5 hours to code. Offer $500 as a 1099 contractor to complete the assignment within the next 2 weeks or so.
This gives both groups a chance. The too busy to do a big programming assignments can code in front of me for an hour. I should be able to judge their chops pretty fast. For the people more nervous to code in front of me, they can get paid a nominal fee to code some small piece of code.
The only group I exclude is the group that doesn't feel the need to show code to land a job, but not too interested in that group. I have seen too many good talkers and bad coders to want to risk this group.
Its good in theory, but it leaves a lot of ambiguity for the interviewee to parse through. For instance, if given a two week window would it look better for me to do it tonight? Would it show ambition? Or would it seem like I'm desperate, and lead to a lower amount of compensation being offered to me? Should I spend far longer then five hours on the assignment, and turn in superior work while making it seem like I only spent 5 hours? What is my competition doing?
As someone who's recently been through the ringer, including one six hour take-home, all I want is a clear demonstration of respect and rationality.
Bring me into your professional office. Let's talk like professionals. Allow me to demonstrate my professional skills. Call me back with a professional yes or a professional no, all within a professional time frame. That's it.
Remote or otherwise less traditional assignments / roles / jobs will deserve and benefit from their own process. But how we strayed from the straight forward formula is beyond me, my guess it was an initiative started by a handful of companies who had trouble hiring.
I don't think hiring devs is the systematic issue everyone makes it out to be. Assessing talent is always hard, be it an artist's, an athlete's or a programmers. I think rather then assume the cost of the investment in hiring, companies chose to blame the system and that's where this absurd roller coaster started.
Good points. If you really care about being impartial, maybe have the 2 week period and a blind submission method in which the interviewer does not see when the assignment was completed.
But my rent is due the Friday after next and I need to know if I should send out another wave of resumes.
It isn't but it strikes me we are looking very hard to find a new way to do things, when the old way was pretty damn good.
Sit me down and talk about technology for ~thirty minutes. If I don't have the social skills to successfully do this (minority issue) I likely would not be able to communicate well with a team and thus should not be a candidate anyways. You will then know immediately whether you want to hire me (or progress me to another round) or not.
I then get a call two days later and can progress with my life.
People pretend like all this hiring strategy is for the good of the candidate. It's not. As with everything else its for the good of the company and its investors.
Here's a thought:
Invest in a competent hiring manager who can see through applicant bull shit and identify talent within a reasonable range. Includes basic negotiation skills. And assume the rightful risk that is employing another human being.
>Invest in a competent hiring manager who can see through applicant bull shit and identify talent within a reasonable range. Includes basic negotiation skills. And assume the rightful risk that is employing another human being.
Problem with that is it's hard to find one. It's gotta be someone with pretty good coding skills. This person would then have to share their time between either coding head-down or managing coders, either of which are time-consuming and intolerant of disruption.
One idea I had was you could have mutual feedback. A bunch of people would after a while have anonymous input on each other, giving you say 10 coder's impressions of a fellow coder. This wouldn't have to be quizzes, half hour coffees could do.
> Sit me down and talk about technology for ~thirty minutes.
This is an efficient way to hire a team of good bullshitters. I've interviewed people who did extremely well when we were "talking like professionals" but were unable to do even very simple coding problems.
My bar for coding is really not that high. I don't expect perfect syntax. I don't pick the language. I don't expect "the one answer". I expect people to write code that could work after syntax and small bugs are fixed, and most critically, I expect people to be able to discuss their code meaningfully.
Unfortunately, "ability to write basic code" and "ability to talk like professionals" are not tightly correlated. And I expect both of these things from dev candidates.
I disagree. I have yet to meet anyone who is faking it and cannot be cracked in 5-10 minutes of carefully-directed prodding. In fact, I don't see how it is possible to do extremely well on the "talk like a professional" part and not be able to write basic programs, unless you and I have very different concepts of what "talk like a professional" means.
I worked with a team of these before. You can rule our certain types of people with tech questions (i.e. never coded before, only coded hacked, etc.). You cannot rule out
* People who read a lot of blogs so know the lingo, but never code
* People who get the theory but can't actually implement something that works without bugs
* People who have been on a team long enough to learn how things should work but lack the skills to really do the coding.
I phone screened a guy fairly recent who had a very long background (~20 years) in a pretty security-conscious field. He did very well in open-ended design discussions and was able to explain his prior work very well. He couldn't code trivial binary tree operations, though. I can only assume that someone else on his team is carrying most of the coding burden. This guy might be great at a PM-type job (or not, I don't interview for those jobs), but not as a dev.
I feel like there is some detail missing here. What constituted doing "very well" on the open-ended questions? How deep into the engineering did you get? Since you mentioned he "might be great at a PM-type job" it sounds like you didn't go very deep on int.
That one was a phone screen, so no it was not the deepest technical dive ever. But in fairness a 1-hour interview is rarely the deepest technical dive possible. I normally pose some big problem like "design a system that accomplishes X at high scale" and then drill into some area iteratively until we're discussing fairly specific details. At the high level I'm looking for the candidate to recognize tradeoffs between centralized/distributed designs, sanely choose the major components, deal with stateful and stateless components, recognize security tradeoffs, etc. As we drill in we might talk about data partitioning, georeplication, or high availability and implementation tradeoffs there. We might get down to the level of something like handling out-of-order change notifications. Rarely do I drill down to the level of file I/O or memory management strategies.
> People who read a lot of blogs so know the lingo, but never code
I think this is where my definition of "talk like a professional" may be more strict. I'm interested in understanding, in opinions, in the actual engineering.
> People who get the theory but can't actually implement something that works without bugs
Having spent most of my career working with PhDs trying to design and implement signal processing and NLP algorithms, I have experienced a lot of that. Given the proper attitude, it is fairly easy to correct coding deficiencies if someone really understands what they are supposed to be doing.
> People that over-engineer simple things
The greater offenders are fairly easy to detect in a directed technical discussion. The lesser offenders are fairly easy to correct in code review, again given the proper attitude, as they are unlikely to be doing things that require major refactoring.
In short, I think I place much more emphasis on engineering as opposed to coding. My experience has been that any coding issues people with good engineering skills and an attitude worth hiring have are quickly and easily corrected. You cannot really understand the engineering of a system without being able to code it. You might not be as efficient as someone else, but you are capable.
> I have yet to meet anyone who is faking it and cannot be cracked in 5-10 minutes of carefully-directed prodding.
Coding is a skill largely separate from other critical dev skills, e.g. design. Someone can legitimately have deep knowledge of, e.g., how to build a 3-tier service architecture without actually being able to code. This isn't "faking it". It's a different skill. You can study database partitioning strategies and learn about the latest and greatest frameworks for writing web pages and APIs without ever writing a single line of code. And sure, you can try to probe deeply enough to expose where their knowledge stops, but you're still not probing for coding skill. There's actually a decent chance that you'll end up probing for trivia which is not a very useful filter. "Oh, you don't don't know the auto-generated C++ class members? You clearly haven't actually worked in C++!" Yeah, right. Anything known broadly-enough known that it's reasonable to assume all coders would know it is broadly-enough known that non-coders could learn it, too.
Even if you could probe deeply enough in conversation to expose that they can't code, you could do the same with a few minutes of actual coding. When someone can't code, it becomes clear pretty quickly when you ask them to code.
> Coding is a skill largely separate from other critical dev skills, e.g. design.
I do not believe coding is largely separate from engineering. There are, of course, other skills that are necessary or desirable.
> Someone can legitimately have deep knowledge of, e.g., how to build a 3-tier service architecture without actually being able to code. This isn't "faking it". It's a different skill.
Absolutely. It is also a level of skill I would only expect or look for in a position that was not going to be doing daily coding, such as a systems engineer.
> You can ... learn about the latest and greatest frameworks for writing web pages and APIs without ever writing a single line of code.
Here I disagree. If you have never used a framework or API, you don't know it. I don't care that you can regurgitate the Javadocs; I care that you know things like its pitfalls, quirks, and runtime oddities.
> There's actually a decent chance that you'll end up probing for trivia which is not a very useful filter.
To be clear, I abhor trivia-based interviewing. What I am talking about is practical engineering tradeoffs between one course of action versus another, preferably supported by direct personal experience in the past.
> Even if you could probe deeply enough in conversation to expose that they can't code, you could do the same with a few minutes of actual coding. When someone can't code, it becomes clear pretty quickly when you ask them to code.
Exposing the level of competence a five-minute coding problem can is trivial to do in parallel with a deep engineering discussion. In fact, I think some sort of code should be part of that discussion. I just don't think it should be the "implement this" CLRS problem. It should be something two-way, more representative of what the job is like on a daily basis.
> I do not believe coding is largely separate from engineering.
I could pick up a cookbook and study how to cook a souffle. I could learn enough about this academically that I could answer basically any questions you might ask. Having this academic knowledge is a good thing, but it doesn't mean I've ever even separated an egg. If you really want to know if I can make a souffle, your best bet is to hand me the stuff and ask me to do it.
> Here I disagree. If you have never used a framework or API, you don't know it. I don't care that you can regurgitate the Javadocs; I care that you know things like its pitfalls, quirks, and runtime oddities.
And here I assert that you're either probing on trivia or probing on things that can be learned without using
the framework (actually, probably both). The pitfalls, quirks, and oddities are well documented in thousands of blogs.
> To be clear, I abhor trivia-based interviewing. What I am talking about is practical engineering tradeoffs between one course of action versus another, preferably supported by direct personal experience in the past.*
So this is an entirely different thing than pitfalls. Now you're talking about designing systems and dealing with tradeoffs. This isn't coding, and I don't believe you can always discover coding gaps by probing on this.
> Exposing the level of competence a five-minute coding problem can is trivial to do in parallel with a deep engineering discussion. In fact, I think some sort of code should be part of that discussion.
I guess I'm confused about what you're asking in an interview, then. Are your candidates coding or not?
> It should be something two-way, more representative of what the job is like on a daily basis.
I think it's unrealistic to try to get the candidate to solve real-world, day-to-day problems in an hour. This isn't what the job is like. "Design and implement this feature" is not a 45-minute task typically. It's typically days or weeks, so asking a "representative" problem in an interview is infeasible unless you're just doing high-level design, in which case it's not predictive for coding ability.
I think I'm not being clear and may be misunderstanding you.
When I was writing signal processing code, we had four levels of engineering.
- The first was an Algorithm Description Document. This document laid out, in mathematical terms, the algorithms used for various signal processing functions in the system. It was purely conceptual.
- The second was an Algorithm Implentation Document. This document mapped the algorithms to specific parts of the hardware and software system, laying out the logical module structure and data flow. It also specified how the algorithms would be realized in code, since parts of a particular algorithm might need to run in different parts of the system. The AID was still primarily mathematical.
- The third was a series of software design documents. These documents specified the details of module interfaces, code and file layouts, and specifics about what algorithms would be implemented in what functions.
- The fourth was the actual translation of the mathematical algorithms in the AID into actual C code. Most of the engineering at this level dealt with function-level optimization and some platform-specific stuff.
Of those four levels, only the last is what I would consider "coding". It is also the least important. Anyone who can really understand the first three levels and is willing to learn can handle the fourth. As I mentioned previously, there will be differences in efficiency, but not in capability. It would take willful ignorance for this not to be the case. I think this is also what you are considering "coding", but I'm not sure; I also think you might be merging #3 and #4.
Now, most commercial projects do not run this way and, as far as I know, few have dedicated systems engineers to manage the system architecture and APIs. Thus, the software engineers building the system generally perform the work in all four of these levels simultaneously as the system builds out. Despite this, I still only consider the work that fits level 4 to be "coding", and still consider it to be the least important.
What I look for when I interview are engineers who operate very well in levels 1 - 3. If I find that, level 4 is pretty much a given absent the rare pathological case or someone with a very "academic" attitude. The questions I personally ask deal with levels 2 and 3. Those questions cover some of what might be considered coding, like API design and class layout. I do not have candidates actually generate code, though. Some of the other interviewers have candidates write small functions in pseudocode or explain existing, uncommented Java code, though.
I also need to note that we have a take-home test that candidates need to pass before they get an on-site.We have also recently added an open coding challenge which may eventually replace the take-home test. This probably covers your requirement for candidates to code, even though it isn't done in front of one of us.
Yes, I'm generally looking for someone who can do all of those things (though I don't work in DSP, so it's not an exact mapping). I would say that at least part of #3 is coding. If you're actually defining code layout etc., you are basically coding. If you dig deep enough here, you can probably rule out the vast majority of people who can't do #4. I still think it's a more efficient use of time to just ask them to do a bit of coding, though. Then I have certainty on the question rather than an implicit answer.
> Bring me into your professional office. Let's talk like professionals. Allow me to demonstrate my professional skills. Call me back with a professional yes or a professional no, all within a professional time frame. That's it.
What if your professional skills are such that it's not possible to demonstrate them in an hour or two at someone else's office--either because of the nature of the skills, or because you're one of the many excellent programmers whose work suffers when there's someone actively staring at you, like the guy in the article?
Let's be honest. Programming as a discipline attracts a disproportionate number of people for whom social skills do not come easily. Granted, you don't want to hire a grumbling misanthrope who refuses to take direction, but you also don't want to turn away a perfectly good team player who lacks the largely irrelevant skill of gladhanding under pressure.
I think a lot of the comments in discussions like this come from programmers who do have solid social skills, and there's certainly nothing wrong with that, but an interview process that gives you personally a fair evaluation is not necessarily the most reliable one for programmers in general.
I recently graduated from college and started looking for my first programming jobs. I ran into a ton of these "take home" interviews and they were some of the most stressful things I've ever done.
The first one, they asked me to solve an incredibly complex math problem that I had no idea about so I struggled with it for 5 or so hours before giving up. Probably good that they didn't give me the job; if they were expecting me to know the level of math they were requesting then I would have had a pretty bad time. So I guess the test worked in that regard.
The second one interview at a different company, they gave me more moderate questions after a phone interview- mostly questions testing knowledge of a specific language. When I asked how long it would take, I was told "you have a deadline of 8 hours from when you download the zip file to when you turn in your code, expect it to take the entire 8 hours". That was probably the most stressful 8 hours of my life, way worse than any whtieboard interview would have been. I didn't look away from my computer once the whole time, did not let myself get up to eat, go to the bathroom, or anything. My girlfriend was in the room and tried to console me while I was doing it and stressing out and I ended up yelling at her to be quiet because I was trying to hard to concentrate. I finished the last problem about 10 minutes before the deadline, zipped the files up, and sent it to them. I never heard back.
Favorite interview I've ever had was a combo of a live coding session and a phone interview. They used an online tool that they gave me a link to that had syntax highlighting. The interviewer on the phone could see where I was typing and could highlight stuff etc. Think google docs, but for coding. They asked me to write some algorithms, then asked me to re-write them recursively, then asked a bunch of questions about the limitations of the algorithm, cases when it would be used, etc. It was fun, not stressful in any way, and the interviewer even taught me some things along the way! I feel like they got a really good picture of my thought processes and my personality so they could accurately judge if I would be a good fit on the team.
Paying somebody to do the take-home coding assignment and paying them would definitely help alleviate some of the stress, but I'm still not a fan of the format. You don't know how long it took the person to make their solutions, and you don't get a good idea for how they work, only what they can do (both are equally important, in my opinion).
I wonder if borrowing some experience from professors who use a take-home exam format might be a way to improve the quality. The college I went to (http://www.hmc.edu) heavily uses take-home exams, and it definitely seemed like a skill to write a good one. Not everything works well in that format, but it's possible to use it effectively.
Just want to say, in conjecture to my sibling post on this thread, I had a identical experience. In fact, if you're in the Bay Area we likely applied to the same companies.
My take-homes made me fundamentally question my ability as a programmer. And I'm a damn good programmer. That is wrong on so many levels.
I can only pledge that if I'm ever in a position to hire developers (at any level) that I'll never force that kind of experience on a potential applicant.
I feel their is a major gap between junior and senior developers. And in this environment a junior developer has zero leverage with the companies he/she applies to. So they treat us like cattle.
It's like with every generation gap, their isn't much point blaming those who came before us. We can only do the best we can and make an effort not to replicate their mistakes. The next class(es) of software engineers have to improve and be better then the ones before them.
I can only say that if you're ever hiring, you probably will ask people to code for you. You won't at first, but after you've hired a few who could "talk the talk" but then can't actually write readable, maintainable, and in some cases working code, you'll reevaluate.
There's a gap between knowing concepts and knowing how to apply those concepts. There's actually a certain (limited) amount of artistry to writing code. Hiring a programmer without seeing code is like hiring an Architect without ever having seen a house he's designed.
>I can only say that if you're ever hiring, you probably will ask people to code for you. You won't at first, but after you've hired a few who could "talk the talk" but then can't actually write readable, maintainable, and in some cases working code, you'll reevaluate.
You don't need an 8-hour take-home coding exercise to determine whether or not someone is capable of writing working code.
My two take-home experiences (one right out of college, one a couple years later) were fun, interesting, and much more laid-back than what you described. I would say if a company is placing such strict requirements on you and it is not a place you desperately want to work you should walk away. Hard for a recent college grad to do, but there are plenty of jobs out there.
Not OP, but as someone who took a 6 hour test at full concentration, with no feedback other then a polite 'no', there are a few reasons I don't out them.
1) I didn't score well on the test. It's within reason they read this post and release my scores with a 'it was because he scored low'. Future employers then come across my scores and deny me.
2) Don't bite the hand that's like the hand that MIGHT feed you. You don't yell and storm out of investor meetings. Because then they tell other investors. Similar logic here.
3) This place is very optimistic. Pessimistic people aren't particularly desirable. Whistle blowers are included in the latter group especially by corporate entities. Who knows what it could cause.
It really boils down to the fact that it's not a safe environment to do so. Or at least it doesn't feel so.
Depends on how large the company is. For small startups, a glassdoor review might be specific enough to identify the candidate. Bigger companies, I suspect won't care and/or don't have take-home tests.
Getting back to you with a no (and nothing else) is quite a stretch from literally nothing as OP.
I think you're playing the game of life with your scared setting turned up too high. You might get better results to turn the bold up a bit over time as you gain confidence.
Wow, that's pretty awful. I might posit some rules for good take-home tests:
1. A very loose time limit. Maybe, as a rule of thumb, at least 10x the time you expect the challenge to take (so, a 1-hour challenge is given a 10-hour limit to turn it in, and a 5-hour challenge is given two days). If you expect it to be done in real time, why they heck don't you just bring the candidate in for a normal interview?
2. If the challenge is expected to take more than, say, 5 hours, the candidate should be paid for their time. Long challenges are going to disincentive candidates with lots of good alternatives to your company, so compensating them as in your own interest if you want good engineers to make it through your process. Plus, it's a strong signal that you value their time.
3. The challenge should be as close as possible to the sort of thing you do day-to-day. This should be obvious, but don't ask math questions or graph traversal questions unless this sort of thing comes up regularly in the job you're hiring for.
4. The candidate should be given an opportunity to discuss their solution. In real-life code, a seemingly stupid decision is may well be totally justifiable, but not obviously so from the code itself.
5. The candidate always gets an explanation of why they were rejected. At one company I worked at, I was in the position of reviewing takehome tests (which were one component of a longer process which involved some on-site coding). I had to write those explanations, and I know it's hard. It's easy to say "your skills are not a good fit at this time", but it's hard to tell someone you don't know what's wrong with something they put a lot of work into. It's still worth doing.
Wow on the take homes. We have given taken homes that are just slightly more advanced than FizzBuzz. The problem would prompt the candidate to setup a basic build system (at the time in java) and then solve a problem using a couple basic patterns like observer and strategy. There was no real time limit other than we will not have you in for an in person interview until it is completed.
Like FizzBuzz I think the take home worked well as another data point. It easily filtered out people who couldn't follow basic instructions, people who were clueless about Java even though their resume said different, and people who simply didn't care. The problem also gave us something to talk about when the candidate came in for the in person interview.
Overall the problem was dead simple for anyone we would actually want to hire.
It can be said of most common interviewing techniques that they are very good at filtering out bad candidates, but very poor at picking out the really good ones.
> Offer $500 as a 1099 contractor to complete the assignment within the next 2 weeks or so.
Just as an aside, I would actually be more willing to undertake this type of interview if you weren't paying me. I don't have any ethical qualms about interviewing while working a full-time engineering job, but I'm not entirely comfortable taking a contracting job under the table. It may be something of a symbolic gesture given that it's such a small time investment and small amount of money, but it feels fundamentally dishonest, especially if you're a current or plausible future competitor to the company I currently work at.
The official policy where I currently work is that moonlighting is allowed but must be approved by our legal team, and while I could probably get away with not asking for permission, I'd be pretty uncomfortable in both cases (asking, or not asking).
Interesting and very ethical. Opposite of me. I don't see that a company should own your soul when you work for them. So doing a small amount of work for effectively beer money in your spare time is no problem. Even taking a second job is OK if it doesn't affect your first one.
Blanket prohibitions on moonlighting are illegal in California AFAICT, unless it's framed as a conflict-of-interest avoidance issue. See http://codes.lp.findlaw.com/cacode/LAB/1/d1/4/s96, section (k).
Just FYI, "under the table" means getting paid without proper documentation or withholding of taxes, FICA, etc. Doesn't really apply to 1099 situations.
> Just as an aside, I would actually be more willing to undertake this type of interview if you weren't paying me.
Sure, and I don't think I would force pay you. Would offer you the in person option, or the homework option without pay. Could maybe work it into a signing bonus if you took the job or something? Definitely not looking to put someone into an ethical dilemma, but not wanting to be one of those companies who makes candidates do really long take home interviews and then makes them mad when they don't extend an offer.
So, if you are interviewing at 20 companies, you need to expend 100+ hours or almost 3 full work weeks?
It should take 1 hour or less. Period. Probably less that 1/2 hour. I doubt I get much more information asking you for a 5 hour assignment than a 1/2 hour assignment.
If I'm really that interested in your programming on the fly, I should do it at the interview where I'm paying for your lodging, food, etc. I should tell you what you are going to be doing, and to bring your laptop set up to do that.
If you're interviewing with 20 companies, you're probably already spending 4+ hours with each of them in person.
That's a lot of companies to entertain! When I was interviewing, I could barely maintain the composure to interview with 3 companies! (Only one of which had a take-home assignment.)
> So, if you are interviewing at 20 companies, you need to expend 100+ hours or almost 3 full work weeks?
I have never interviewed at 20 companies when I needed a new position. If you do, cool - but not sure I want to simplify my hiring process to help someone mass interviewing.
If we have a conversation and we both like each other, let's see if we can come to terms we are both happy with. If we are playing other companies off each other for 1k raises, it seems not really worth the hassle.
I like the idea of getting paid $500 or even $1k for a take home test. It's frankly a simple matter of respect. For employers, they're just asking you to do one task, but for employees, talking to 4-6 companies in an interview cycle can easily be 40 hours of interviewing and another 40 hours of work on top of that.
I'm at a point in my career where I mostly refuse take home tests because I'm busy and I value my free time. Getting paid would make me much more willing to jump through hoops. Particularly when that day of vacation cost me $350 after taxes, so it's not like I don't have skin in the game already.
>"Why should I program for free at home, my resume clearly shows I am already a skilled programmer. All this will do is cater to young people without families, or those fresh out of school".
I share this opinion, but only for certain ways of doing it. If it's done in a fully automated way, before even having a phone screen, then it's too easy to waste my time. As an alternative to the whiteboarding interview, however, it could be great.
> Offer $500 as a 1099 contractor to complete the assignment within the next 2 weeks or so.
I like this, not for the money, but because it guarantees that the company is not giving this assignment to 100 different candidates ($500 x 100 is getting prohibitive for a hiring budget). I'm more willing to put the effort if I know I'm one of the "finalists" for the position.
Agreed that it's a positive thing to actually pay people for nontrivial amounts of work.
Downside is that, as a company paying someone to accomplish a task, I'd want to give a different task to each applicant, so that if they do a good job, it provides value to the company.
And this is a problem because rarely are two programming problems exactly as difficult as each other, so the test isn't normalized. Interviewing is hard enough when you keep all the variables that you can control the same.
Make the number $250 and give everyone the same problem (which you have to change every so often because of glassdoor and the like).
That's less than you're already spending on salary for the interview slate, so you're at most doubling your already small costs for a critically important function for your company.
I mean, a bad hire is going to cost me thousands of dollars - if not tens of thousands of dollars. $500 is pretty cheap to figure that out up front on a candidate I am otherwise ready to hire. I am not going to do this to 100 people and pick the best, I am going to do it for someone that in every other way is a good to hire dev.
I don't think I would give out the same work to multiple people, let them put it into production on their first day and get the pride going ;)
$500 is too low - good developers will often charge $200+/hour freelancing, there is little incentive for them to deal with a take home test for that price with all of the time & stress that come with take home tests.
A choice is better than no choice though, but too many companies fumble through handling take home tests to make it worthwhile to a quality developer with any sense of value.
Yes, they charge $200+/h - when they actually do the work. This is my pet peeve lately when I see people throwing that number around. You're not actually working 24h. You likely don't work on the weekends. You take time to organise new work in between. Neither of the breaks are actually paid.
You get paid that much as a freelancer when you produce value for the company. So by doing an extra assignment, especially one that is a useless piece of code, no - $200/h is ridiculously high price.
But when comparing the difference, and considering a code project for an interview has a tendency to be even more stressful, which would a person rather spend their time on? It certainly is not the code project - I have heard & experienced too many stories where companies vastly underallocate time, or not respect that job seekers have other things that keep them busy typically, including less bureaucracy/time wasting (especially if a candidate has significant open source contributions), or not looking at the project, or even rejecting candidates for non-code related reasons (happened to someone I know today).
I'd much rather freelance for that type of stress & when having to compare the economics time-wise, which a take home test simply does not match - that is the whole point.
If a company does not want to pay that much, maybe they should respect the prospective employee's time, especially since it is a job seeker's market.
> Yes, they charge $200+/h - when they actually do the work.
Agreed.
Annual billable hours for consultants, be they developers, management, lawyers, et al, are considered huge if near 1500. That roughly works out to just under 30 billable hours per work week when vacations/holidays and non-billable time are taken into account.
As you surmise, just because someone _can_ bill X/hour doesn't mean that each hour they breathe commands the same remuneration.
True but I am not hiring a freelancer. I don't think anyone spent a few hours interviewing to try and make $500 off me. I am just trying to be considered of their time, and make it clear I am not giving a giant programming assignment to 100 developers and only picking the 1 best, as that stinks for those doing the homework.
If you get to the paid homework step, we are ready to hire you, pending successful homework.
This sounds like a great alternative and certainly would work well for me. What I'm afraid of though, is that I'd pass your interview and the aforementioned YCombinator companies would again want to put me through the on-site, high-pressure whiteboard technical interview.
That's definitely something we've started addressing as we optimize the process of matching programmers with the right startups. We're starting to gather data on how the YC companies run their hiring processes (seeing the degree of variance has been fascinating) and we can use that to avoid exactly this happening.
As many other parts of an interview, I've always found the blackboard coding session extremely strange. When was the last time you coded in TextEdit with no docs around, no time to think, standing up, and being watched over the shoulder?
I have pseudo-coded on blackboards many times, which is really what a blackboard coding interview should be. If you get a ding for writing .foreach instead of .forEach, that seems a bit picky ;)
However I realize I may have a bias as I do ok on most blackboard coding interviews I have done.. maybe been stumped 1 time out of 15 or so in my life? Some of it is a skill, that the more you do the better you get at it, but being good at it does not make you good at actual coding.
> I have pseudo-coded on blackboards many times, which is really what a blackboard coding interview should be. If you get a ding for writing .foreach instead of .forEach, that seems a bit picky ;)
In my experience, some interviewers, particularly Amazon interviewers, get really anal about putting correct code on a whiteboard, sheet of paper, or bare text document. I personally do not when giving interviews.
My bigger problem, and I seem to depart from the vocal majority on this, is that my preferred normal workflow does not use whiteboards for anything besides task lists and diagrams. In 13 years[1] as an engineer I have never written actual or pseudocode on a whiteboard outside of an interview. I rarely do it on paper. I have never worked with anyone who did this very much, either.
[1] Granted, four of those were as an EE, but I still had to deal with code from time to time
> In my experience, some interviewers, particularly Amazon interviewers, get really anal about putting correct code on a whiteboard
I had that experience with an Amazon interviewer. The guy who told me he expected perfect code also gave me zero feedback as I worked (despite me literally asking if I was headed in the direction he expected) and spent the entire time staring at his laptop. He'd apparently forgotten that he was scheduled for an interview, and also his manners.
It's exactly like being good at academic test taking.
I'm very good at memorization (of facts, ideas/concepts, and procedures/algorithms) and that allowed me to do well in my younger years and in standardised testing, so I always just scoffed when I heard other people complain about how it was a poor proxy for knowledge / abilities.
Of course, now I'm terrible at pretty much all the standard ways of interviewing developers (...here's where you say I'm probably just a bad developer) and now I have all this past-due empathy for those I disregarded before.
I was asked recently by a big company to code some classes in Python, on paper. They then questioned my indentation, syntax, and case-sensitivity multiple times!
Hah that is pretty terrible. In fact, I don't think Python is a very good language to code on paper due to the indentation side of things. Maybe graph paper would help?
We have a magic white board that can print out a big piece of paper showing everything on it. We also take pictures of it (and lesser white boards) to record designs agreed. Those pictures generally get put into a formal design document that is reviewed, signed, approved and all the rest of it.
As I mentioned in another post here, I don't think I have ever written code on a whiteboard when explaining something. Explaining code has always happened in front of someone's computer, in an actual editor or IDE. Where I currently work, we typically pair on really hairy code.
In 15 years as a software engineer at companies large and small, I have never seen anyone code on a whiteboard (outside of interviews, anyway), nor have I.
I really hope this works. I never understood whiteboard interviews. They don't reflect how real development works or how that developer works either. I hope you post an update when you have enough info!
> We expect them to spend about 3 hours on the project (or as long as they want to spend to show us that they're a good programmer).
3 hours isn't too bad. I had a friend interview with some hedge fund and he said he probably spent 30+ hours on a take-home project (he didn't get the job). I thought that was way too excessive for just 1 interview.
I like these great in concept. When I've been between jobs, I've been very happy to participate in them.
A couple open questions:
1 - Is it reasonable to expect a 10x programmer whom your are trying to poach to give up so much time? (Or should you give them a $250 Starbucks gift card or something similar for their time?)
2 - Can you really ferret out cheating? I had a grad school classmate who paid someone to do his (non-programming) take-home homework for a job interview, and he got the job. He only lasted 6 or 7 months, but it was enough to be awful for all parties involved. I don't have a great counter-solution other than ask for someone to come in to the office to do the work, and even then you can't tell if they have remote support.
1 - We don't expect anyone to give up this much time. I realize that it's a big ask. However, a lot of programmers we've spoken too really want this option. Anyone who does not want to is totally free to go with the (faster) regular interview. Either they let is watch them code for a short time, or they code for a longer time on their own.
2 - I can't say for sure (we're only just launching this), but I hope (and think) that talking with someone for 45-minutes about the project that they did will be enough to make sure that they actually did it themselves
Out of curiosity, what are the demographics of the people who made these suggestions?
Were they employed? Were they very desirable to companies? Were they very undesirable to companies? Did they have financial hardships? College graduates? College dropouts?
I think it's important to remember how diverse the hiring pool is, and which voices tend to be the loudest. I would argue that the advice most companies get are from very successful companies. Similarly engineers likely seek advice from very successful engineers.
Both these groups are in the minority I think, and would thus not be in the best position to dictate for the majority (strictly in terms of fulfilling individual needs that they themselves have not encountered, personally or otherwise).
Example: 10x programmer wants a hiring process that caters to 10x programmers.
Problem: Vast majority of programmers do not fall into this category, and would not benefit from such a system. Yet companies want 10xers, so they go with it anyways. Then they complain about how hard it is to hire programmers.
Less experienced programmers are definitely over represented in engineers adversely affected by stress. This could be because people get better at interviewing at they gain experience, or because the people who can't perform under interview stress drop out of the profession
> 2 - Can you really ferret out cheating? I had a grad school classmate who paid someone to do his (non-programming) take-home homework for a job interview, and he got the job. He only lasted 6 or 7 months, but it was enough to be awful for all parties involved. I don't have a great counter-solution other than ask for someone to come in to the office to do the work, and even then you can't tell if they have remote support.
Personally, I think this is where the skill of the interviewer comes in. A skilled interviewer can bust through bullshit fairly quickly. A big problem in interviewing and hiring right now is that most of the interviewers are not skilled. Thus, companies try to come up with processes and metrics that (theoretically) remove the interviewer skill from the equation. Unfortunately, this seems to be done in a horribly unscientific manner.
I guess the challenge in this situation is that the whole reason for take-home work is that introverted interviewees get flustered in person. Won't this happen when the review happens?
This still seems like a better idea than "Tell me about yourself" and "How many golf balls fit in a 747?"
If the candidate can't communicate while writing code, and can't communicate about code already written, at some point you have to be afraid the candidate just can't communicate.
If this is a person who can communicate in any situation except an interview situation, then it's a Catch 22 where their ability to communicate in a work environment just can't be verified.
(Unless you secretly record them communicating in some other work context? Probably not a scalable approach.)
If you read the article, the second part of the interview is doing more work on top of the project, but in front of people. I've gone through interviews like that before. Do two steps on a three step kata in front on your own time, and then a 2/3 hour interview to talk about what you wrote, and add the last piece to the kata. Not very easy to fake.
Any experienced programmer that is considering a job change will spend more than a few hours on the process anyway, in due diligence. If anything, I think this is an important part of gaining experience in the field: You actually want more time around future employers, to avoid a bad fit. Going to a place just to quit in 3 months time is a waste of your own time. Investing an extra few hours, or even few days, makes a lot of sense.
Won't the same programmer who got flustered in front of a white board also get flustered explaining the code?
I'm being the devils advocate here, trying to hone in on the best way to do this. I still think work products are a much better predictor than most any other interviewing technique.
for some it's not about introversion/extroversion but simply the fact that whatever part of their brain deals with speech is the same part that deals with thinking through those kinds of problems, so they can't do both at the same time as a matter of physics.
this is to put it precisely. the reality is much messier and varied. the point is, people's brains are not wired the same. and what this means, to make a long story short, is that these interviews are not comparing apples to oranges... not even close.
I like this idea. I took the Triplebyte quiz mostly out of curiosity and then decided to stop when I was prompted for a phone interview. I like the idea of "pre-qualifying" myself for a job even before I'm ready, so that when the time is right, I can pull the trigger and switch easily.
With a phone interview you have to commit, which is no problem if you're in the market. But if you're not in the market and you still want your options to be open, interviewing on your own time makes a lot of sense and reduces the mental burden and stress of switching.
One thing that a local company did was to give a simple programming assignment (given postgres database connection info, create simple REST API using any language). They would switch up the details of the assignment for each candidate (e.g. different endpoints for same set of tables, different tables, etc.) to combat cheating.
The applicant was expected to be able to answer questions about the code anyways, so hopefully that would've been an effective layer of protection as well. Don't know if this company is still doing it.
How does this work if candidate has experience in, say, backend, but haven't worked much on frontends or mobile apps etc? A specific "take home" task puts those candidates at advantage who have already worked in related area, have written code that they can immediately reuse or are experienced in frameworks that allows them to fast trek. This would be great if the job also required exact same capabilities for the foreseeable future from the candidate. However it would overrate or underrate the candidate if the job requires candidates to work on diverse set of problems in long run (for example, switching from MySQL to graph problems). It would be interesting if article also gave few examples of such "take home" tests.
Take home interviews are common in data science, and they are deeply exploitative. I have been asked to spend anywhere between an hour to a week on a project, and in most cases they simply decline to hire you without giving you any feedback. In the worst cases, companies like Knewton and Mattermark have given take home interviews that not only took a lot of time, but were related to the companies core business model. In other words, it's free consulting.
And finally, you aren't fooling anyone when you say that it should take 3 hours, or as long as they want to spend on it, while giving them 3 days. You are pressuring people to spend as much time on the problem as possible to "prove they are a good programmer." It's exploitative - you aren't paying us and the probability that we will get hired is extremely small. Think about how many companies we are interviewing with.
Gauging ability to operate under pressure is valuable too...ever tried to fix a bug on a device that was supposed to ship yesterday, under the pressure of the entirety of the hierarchy above you all the way up to the CxO?
It helps to know if the candidate you hire will handle that, or fall apart just when you need him/her to do the job he/she is paid for.
Um, you really can't interview for that person, thanks. That person is someone who is already in your company and gets promoted to "trusted lieutenant". Promotion to "completely trusted lieutenant" is only awarded posthumously. :)
If that kind of situation is happening more than once in a blue moon, something is very wrong at your company.
For what it's worth, the author included this footnote about what you mentioned.
"1. The stress of interviewing seems to be different than the stress of performing a job. None of the people we've spoken to who do poorly in interviews report problems performing under deadlines at work, or when a website is down and there's pressure to get it back up."
As an organisation you have to decide on what you want. The developers who can handle high stress situations are rarely the most skilled developers.
If you are hiring for a high stress environment then you need to focus upon candidates who can handle stressful environments over candidates who write really good software.
On the other hand most environments are not high stress.
Software developers huh! What other role requires you to complete an exam to be considered for a job (or even just an interview). Moreover a 4-8 hour exam with no syllabus. No 'past papers' etc.
I think this should stop. In it's place, developers can have a pet open-source project, which they submit with their application. The point is that the same project can be submitted for a hundred applications if needed, saving the candidate dozens or hundreds of hours of wasted time.
They could put that time into the project instead and even if they don't get a single offer, the open source community benefits, and the candidate got to do something interesting rather than convert roman numerals or aggregate an array.
I seriously wonder if we should all boycott dev tests. If they give a test, just give them a github link and say "Please review this as a good example of my work.". If they can't review code that isn't tied to a silly question maybe they are not worth working for.
I say this having done some such tests recently myself. (To be fair one of them said a Github submission is OK, I just didn't feel my Github was good enough at the time.). I kind of feel bad contributing to the madness!
Sounds good in theory. But if enough companies started doing this, I can guarantee you that Indian companies will spring that will offer to create an open source project for you for $100 to $1000 depending on complexity of project, and amount of activity the github profile would show.
I wish I was kidding.
While that is sort of true for a take-home test, there is still value in giving candidates an online or in-person programming task that needs to be completed in a small amount of time (e.g. 1 hour)
Many other fields require competency tests. What other field requires you to do a potentially unbounded amount of free work in the open and give it away to everybody?
Not everybody has any major projects on Github. The lack thereof does not signal lack of programming aptitude. If somebody has done a lot of great work, but it was all for employers and clients, that doesn't mean they would do poor work for you if you were their employer or client. I find that suggestion much more distasteful than having relevant work-sample tests.
Licensing should be up to the candidate, and it could be commercially licensed and not available to everybody.
You shouldn't have to write a OS Kernel or a modern browser in your spare time either. I'd say it would be about 4-8 hours work that shows off your skills.
But if you prefer to spend that same time on some inane made-up problem for one employer and code something that you will wont enjoy writing and never use again, then as I said in another reply that there should be the option for that too.
> Many other fields require competency tests
Is there a field that requires 4-8hr competency tests where each test is wildly different from the previous, with completely opaque criteria. At least with the provide your own project idea, if the employer has fucked up criteria the candidate has only wasted a few seconds of their time in sending the zip file.
Kind of analogous to 'show me your portfolio' for a photographer. The portfolio should be enough. Unfortunately this is not possible as a developer as the source from your previous jobs is likely to be closed, hence the need for a personal project.
> Licensing should be up to the candidate, and it could be commercially licensed and not available to everybody.
> You shouldn't have to write a OS Kernel or a modern browser in your spare time either. I'd say it would be about 4-8 hours work that shows off your skills.
Well, this is a different suggestion. Now we're only talking about a few hours of work rather than a pet project. I don't think the licensing makes much of a difference since I probably couldn't monetize four hours of randomly dorking around. I'm still not a huge fan of the idea, though, because it sounds hard to me to show off (adequately) skills I've spent decades acquiring with less than a day's worth of aimless work. I don't feel like it would be very impressive.
> Is there a field that requires 4-8hr competency tests where each test is wildly different from the previous, with completely opaque criteria.
Nobody is advocating for eight-hour tests. The OP said they expected their test to take less than half that. And most fields that require competency tests (e.g. cooking, acting, music) will expect you to do it live, on the spot. Take-home tests are being suggested in the case of programming specifically because programmers hate being expected to perform on the spot.
> At least with the provide your own project idea, if the employer has fucked up criteria the candidate has only wasted a few seconds of their time in sending the zip file.
Not all criteria that someone might test for are "fucked up." If I'm looking for, say, somebody to do a math-heavy machine learning job, and your pet open-source project is a jQuery plugin that makes web page backgrounds sparkly, the mismatch between those two is not the fault of my criteria.
> because it sounds hard to me to show off (adequately) skills I've spent decades acquiring with less than a day's worth of aimless work
So you would be against a developer test too then?
> (e.g. cooking, acting, music) will expect you to do it live, on the spot.
Fair enough. So the developer equivalent should be a 1 hour technical interview, with perhaps a coding exercise on a computer within that hour. I am happy with those. To reduce the pressure the interviewer could leave the room for 10 mins while you code something. It is the do 4 hours work in your own time for a chance to get an interview or get to the next round that bugs me. And in reality I'd spend 8 just to maximize the chance of getting the job.
> your pet open-source project is a jQuery plugin that makes web page backgrounds sparkly
Yes there are sub divisions in the 'software developer' category. If you want a machine learning job you kind of have to demonstrate it one way or another. I argue that the option to show your existing code rather than do additional work on a made up problem is valuable.
Software devs have extremely low social status, despite pretty good pay.
Honestly I'm glad they don't watch "Survivor" and make us eat bugs or do weird obstacle courses. Seriously. You treat people like dirt, they're gonna resent it and complain on HN and some Stockholm Syndrome victims will back up the abusers.
Another example of the low social status is those horrible open offices, like a call center. Ugh.
Another example of immensely low social status is crazy work hours.
> What other role requires you to complete an exam to be considered for a job (or even just an interview). Moreover a 4-8 hour exam with no syllabus. No 'past papers' etc
As far as I can tell, essentially all of them. Of course, many of them have no practical way to even attempt to assess competence, so they fall back on "situational" and "culture fit" bullshit.
> I think this should stop. In it's place, developers can have a pet open-source project, which they submit with their application.
Problem the 1st: how do you verify the example project is actually the candidate's own work?
Problem the 2nd: building and maintaining a non-trivial open source project is a huge investment of time. There are many competent programmers who have a long list of things they must / would rather do when they get home from sitting at a computer programming all day. It's only more efficient if you send out 100s of applications, but as far as I can tell, competent programmers rarely spam 100s of applications. If you're just putting your toe in the water from time to time, taking a day off to do a traditional tech interview grill fest is a much more effective use of your time.
Problem the 3rd: evaluating a large, unfamiliar codebase is actually really hard. All unfamiliar code looks shitty, because you don't have the full context to explain the choices made. Very few people have GitHub pages that actually look good.
> I seriously wonder if we should all boycott dev tests.
Good luck with that co-ordination problem.
Tech interviews suck, for everyone involved. I still haven't heard a proposal for an alternative that isn't fatally flawed. (I consider "take home interviews" to be an incremental improvement on the basic whiteboard problem-solving test)
> Problem the 1st: how do you verify the example project is actually the candidate's own work?
Get them to talk about it in the interview
> Problem the 2nd: building and maintaining a non-trivial open source project is a huge investment of time...
Not really - in one weekend you probably can create something interesting and good enough for showing off to an employer. Also it will probably draw you in and you spend more time (for the fun of it) making it better. But you don't have to.
For those people who prefer FizzBuzz tests to implementing interesting stuff, I suggest companies provide the option to do a test for those who don't want to submit their project code.
> Good luck with that co-ordination problem.
A first stage could be that we say "no tests until at least an interview has occurred and the candidate has progressed to the next stage". That is in any candidates own interests regardless of other's actions - so wouldn't require coordination, just communication of the idea. It is in his own interests because the time spent on the speculative work could be better yielded doing something else, such as attending a meetup and generating more opportunities. Looking at it from a sales perspective of how to spend your time - lead qualification, lead generation etc. Why spend a lot of effort on an unqualified lead?
Even trivial code is fine on Github. All I look for is that someone can actually write a bit of code, and a GH repo helps me quickly asses otherwise I have to do more digging. I've interviewed entirely too many people who are clueless and leave me wondering how they have ever had a job writing software.
> For those people who prefer FizzBuzz tests to implementing interesting stuff, I suggest companies provide the option to do a test for those who don't want to submit their project code.
In fact a great personal GH repo could be to implement FizzBuzz in a bunch of different languages. I think most companies would get an appreciate the joke.
"Problem the 1st: how do you verify the example project is actually the candidate's own work?"
Have them discuss the code in depth. Architectural and design decisions, coding conventions, alternate approaches they rejected, etc. Pretty hard to fake this if they didn't write the code.
"Problem the 3rd: evaluating a large, unfamiliar codebase is actually really hard."
Good chance to assess the candidate's ability to document. :)
More seriously, though, this is again an opportunity for the candidate to walk you through the code.
No it reduces the cost to the employee, with no additional cost to the company. At least in $ or time terms. Sure ... a senior developer interviewer may need to fire up a few extra neurons.
FWIW most of the other high-payed jobs have some kind of entrance barrier too, usually in the form of having absolved a Univerity-level course and passed the exams.
Anybody can legally claim to be a programmer, so it makes sense for the companies to do some basic checking that a University would have done for them in other cases.
At the core of the problem is that this approach can be used to burn a lot of a candidate's time without an equivalent investment from the company.
I've mentioned this before - I applied (maybe 5 years ago) to a company that first asked me to take a Java test (about 1 hour of work). Then the recruiter called me and sent me a take home project that should take "5-7 hours". I did this, crickets chirped for a month, though I did check in with the recruiter for a while (I gave up eventually). Finally the recruiter called me with a one-line brush off "we've decided not to move forward at this time…"
Granted, this was a bad experience, and it won't always be like this. But I'm pretty close to saying "never" to these exams.
I thought Gayle's suggestions were good. She goes so far as to suggest a 90% passage rate - that you should not be giving these tests to people who are unlikely to pass then, using them to confirm, not screen.
I've had a similar experience. A company I was trying to intern at asked me to write a rails app for them before they would think about giving me an interview. I wrote the app (which all-in took maybe 10 hours) and sent the recruiter a link to the heroku instance the app was running on and the repo on github.
I never got a response. I think three months later I might have gotten a one-liner saying they had gone in "a different direction" or some bullshit like that.
It's insulting and ludicrous for companies to treat prospective employees so disrespectfully.
This only applies if the take-home interview is obligatory.
I agree that obligatory take-home interviews are unfair (I feel the same about trial periods). They work (they're probably more accurate than a standard interview), but they take too much time from the applicant (and will thus scare away many of the best people).
As an option, however, I totally disagree. There's a significant percentage of good programmers who are ill served by standard interviews. Those people want this.
Yes, that is a very good point. Part of being good at hiring is becoming able to work with different kinds of people with different needs and preferences.
You know, while I agree that these problems are mitigated somewhat by making the exam optional, I don't think this alone solves all the problems associated with this approach. I still think that asking candidates to spend, say, 5-7 hours on something is a big deal, even if you give them a choice to take a different path.
I'm not inherently opposed to technical tests, either in person or take home exams. I believe that many exam-based institutions adhere to a code (probably unwritten) that grants certain rights to the examinee. Think about exams in college, where stakes can actually be quite high.
Think about exams at a university. Typically the subject matter and nature of exam questions is available in advance. The grader is highly competent in the field. An associated study path is available for the exam. The exam will be graded and scored, and those scores will be communicated to the student within a set time frame. Feedback will be provided to the student. The exam is part of achieving a lasting credential, such as credit for a course on a transcript.
None of these things exist in technical exams, and in many ways, this increases the stress. Merely making an exam "optional" doesn't erase all these problems. I think this is the core problem with technical exams, they contain all of the stress for the student, but have none of those rights that I believe exist in universities and other exam-based institutions for a good reason.
I like that they're making the project an optional track, but as a fairly extroverted interviewee I would much prefer talking through code with an interviewer. I feel like the 8 hours of programming I'd do on a take-home project could be assessed with a one-hour conversation walking through code I've already written. (It's especially frustrating when the projects are low-level, like creating a basic CRUD app that uses a lot of libraries, and I've implemented the solution so many times that most of the work on the project is just typing it out. I could just walk the interviewer through one of my many CRUD app side projects.)
Furthermore, collaborating in-person with another engineer tells me more about their engineering culture, and tells them more about whether I'm someone who can collaborate well with others. An hour of pair programming on one engineer's current real-job task would tell us both a lot about each other in a fraction of the time.
This x100. I hate these interviews as one of the first exercises. More than once over the years I have spent 5+ hours doing a coding exercise for a company only to get a one sentence response, telling me that my "code fell short". If I pressed them further they might say my code was "hard to read" or "not what they were looking for". Vague, unhelpful, and pitiful responses. 0 interaction. No chance for a rebuttal.
Its a very lopsided assessment. Normally an in interview you can judge the company while the company judges you. That way in an hour interview you both can probably tell its not a good fit. If I'm applying and coding in python and within 15 minutes of a live coding exercise they tell me I shouldn't use list comprehensions because they are hard to read, I'd be out of there faster than I could measure. If I just spent 5 hours coding to get the same response? I'd get a little upset.
When I give critical feedback I will typically go through line by line and tell the candidate what is wrong and what is good. This is done with the candidate, since nobody is 100% correct so my judgement might be wrong and they can correct me. Many, many companies skip this crucial part and as a candidate you don't know if they are going to do it or not, so why waste your time?
Unfortunately, a big part of this problem is that companies face serious liability risks if they give useful feedback.
My experience with tech interviews is that they are actually exams, taken under stressful conditions, with none of the courtesies normally extended to a student.
For instance, in college, or grad school, there is a process for taking an exam. There is typically an affiliated study path, you receive feedback on your performance by a set deadline, and at a good university, someone highly competent grades your exam.
In spite of this, people often describe exams like the bar or their medical boards as the most stressful academic experience they've ever had. As programmers, we have to go up to the whiteboard regularly to take a test, or complete a take-home exam and send it off to who knows who, but we often don't know the subject that will be tested, the competence or credentials of our examiners, whether it will reeve a fair assessment, or even any assessment at all (do they just throw the thing in the trash and say "we decided to go in a new direction"? Truly I have no idea.
That's a huge problem, and it is actually outright harming our industry.
This particular article is about hiring women, but I'm absolutely certain that plenty of men are also deterred from pursuing new tech jobs because they can't stomach the idea of another round of technical testing (with none of the factors I listed above that makes it more fair for the examinee), whether that is white boarding data structure or doing take home projects. I think a lot of people may look at this and decide to just enter a different industry altogether, and I really can't blame them.
I'm on a tangent here, but I really think that tech needs to heal itself, and we're a long way form it.
That is exactly right. Its terrifying. If if you were the first engineer at 2 successful companies and have a strong github it doesn't always seem to factor in.
I would cram for hours before my blackboard interview making sure I knew all sorts of algorithms, just in case. My friend and I would quiz each other. I don't see how memorizing tree transformations relate to a Django application.
"At the core of the problem is that this approach can be used to burn a lot of a candidate's time without an equivalent investment from the company."
Maybe a tweak would be to only offer take home projects to candidates only after committing to bring them in for an on-site interview, then the interview consists mostly of reviewing the code from the take home.
(Personally, I think I'd still prefer the "coding in person" option.)
I've been giving applicants home assignments for years now, in 3 companies. I do it as a third step, only after a phone screening and at least one personal interview (that might include some very very light whiteboard coding, but will touch a lot of technical stuff), and only if I find the person to be right for the job.
So out of dozens of CVs, a handful will be invited to a personal interview, and maybe one or two people will actually get the home test. I get that it's time consuming so I try not to waste people's time if I'm not serious about them. On a couple of occasions when people said they're time limited, interviewing for a lot of places, etc - I've allowed them a one hour on site task that is of course simpler.
And it's very rare that people are rejected based solely on the code in the home test, it usually has more factors than that. But if you have two good candidates, it might help tip the balance in favor of one of them.
BTW I don't only review the code. I find that the quality of the documentation (not only comments - I ask for a short text describing the design choices, code structure, etc) is usually one of the best signals. Bad grammar and poor language, complicated descriptions of simple things, focusing on unimportant parts - are huge telltales of problems in a person's thinking. Clear, well versed, concise text usually indicates a smart and pragmatic person.
After three tries with this process, I've decided that "never" is too soon:
1x Take-home test didn't even get read (this was the nail in the coffin)
1x The interview failed because the salary wasn't competitive (should have asked beforehand about the salary, but didn't have the option; lesson learned)
1x Got an in person interview which led to an offer which was later rescinded (the trip was nice, so I'm not complaining)
Employers in this industry are just not responsible enough to even read through hours worth of work by prospective employees, so while a good idea on paper, the take-home test is a horrible idea in practice. Never again, indeed.
Take home interviews are a great indicator of a company's hubris. "Its so awesome to work here people are going to jump at the chance to do my 3 hour homework assignment".
The problem with them is fundamental:
"You will only get someone desperate enough to take your exam."
If the person is qualified they will be swimming in opportunities and will likely throw your exam directly in the trash heap. If they aren't you probably don't want them working for you. I suppose these might work if the entire industry colluded on it but then ... prisoner's dilemma.
Maybe a more useful indicator is weeding out the candidates that didn't say "no thanks." Cause really why are they so desperate for a job and why do they have all this free time? but then ... ethics.
Also its more than a little disingenuous on the part of the company. It communicates "my time is more valuable than yours . Go do this thing async so if you don't work out I don't have to waste resources on you." It also drives a perverse incentive on the part of the interviewing organization. The only resources you've spent is the time to send them the test if you are unmotivated or are having second thoughts you don't even have to look at the candidates work. But the candidate might spend hours on this thing.
I prefer an interview system where the company and the candidate both care. Commitment is a requirement for everyone.
> The problem with them is fundamental: "You will only get someone desperate enough to take your exam."
Lots of people do poorly in whiteboard situations. As an employer, you may assert that you don't want any of them, fine. But I don't see the problem in giving people the option of using an alternative testing process.
Wait - where does it say this is an option? It isn't as far as I can tell - it is how they do it. You either invest 3-9 hours on a "project" before the interview or you don't get the interview.
This isn't "an alternative testing process" as such.
I logged into my TripleByte account and selected it as an option. The UI is still broken, but yes: it's an option. It's a separate track you can choose to be on.
If its an option and they don't exhibit any bias towards candidates that prefer a traditional interview then thats fine, but they should make it clear in the article.
Founder here. We definitely don't and the outcome of both tracks will be treated exactly the same way. As Ammon wrote it: "Anyone who passes our take-home project assessment will get exactly the same service from us as people who do the regular interviews. We'll work hard to find several YC startups they'd be a great fit for, fast track them through the hiring processes, and handle all logistics of flights/accommodations/scheduling."
> To solve the problem of interview anxiety, we're adding a second track to our interview process at Triplebyte. Applicants, if they choose, will be able go through our process by completing programming projects on their own time.
> The project-based track will require a larger time commitment (and we expect lots of people to stick with the standard track for this reason).
Interview with 2 people for an hour or so. Then you get a Rails project, fix 3 bugs, choose and implement 2 features from a list, then 2 features they choose. Come back in a few days and discuss why/how you did what you did.
The problem with random or unaligned assignments is you end up with a randomly skilled programmer. Often not bad, but not on point.
The problem with Rosalind or Project Euler assignments is you end up with an excellent theoretical math or bioinformatics programmer. Often not bad, but not on point.
Fundamentally anyone with a degree or experience or a non-trivial github can write code, but you want to test their judgement, their thought process, their comprehension, their style, their knowledge about your business domain. Other than total open field blank slate projects (very little of my time over the last 35 yrs has been spent in that mode) you usually have existing systems and code. So give them a "special" sample of your own code. Shouldn't be too hard to find unless you're literally hiring the first technical employee. Then give it to them a couple days before an interview and inform then you're gonna review that code together, they'll present you with a rewritten, redesigned version, and then review the rewrite together.
If you'll feel bad about making them do "real" work, the best code to send out is some that has been heavily customized to only work some of the time, not properly error check, and intentionally somewhat obfuscated, so I sincerely hope that code thats screwed up to that level has to be intentionally manually generated for the interview. So strip out most of the failure/error detection code, screw up some of the code, maybe intentionally cut and paste an almost identical function in place to see if they clean that up. Some folks like intentional outright errors, like typos, is this the kind of programmer who can't write English? Also wipe most of the comments, put some intentional logic errors in the comments. This can be fun...
If you're looking for non-intro level programmers "everyone knows everyone" and my latest job we didn't talk programming because I was vouched for as knowing what I'm doing from years of coworker experience at a past employer. I'd be moderately offended if someone I worked with for five years asked me to fizzbuzz, either in person or as a take home test.
I did one of these when I applied at my most recent position. It took most of the weekend and actually it was a lot of fun. But I doubt I'd do it again if it required more than a few hours of my time. Any test that time consuming is arguably biased against those with families.
Some advice to those doing take home tests: write (good) comments and include tests.
Wondering if under this model an unethical person could set up a fake interview process with real assignments to get unpaid work done by others who want the job.
As someone who is still technically waiting - after a month - for his phone interview, I like the idea of doing some actual coding. If you have to make people jump through hoops, at least you might try and make the hoops at least somewhat meaningful.
Edit: I just pressed the button on my TripleByte dashboard to switch to the "project-based" track, but then I get redirected straight back to the same "we're sorry" page I've been seeing all along.
> The project-based track will require a larger time commitment
This is the only part I take issue with. I tried a take home interview once that took the better part of a weekend and decided I'd never do it again. There just isn't enough time. Basically, if it takes that long, there needs to be a very high chance that I'm getting hired at the end, or it's not worth it.
294 comments
[ 4.0 ms ] story [ 389 ms ] threadNormalizing performance between the two interview types will be challenging, but I think the benefits to be reaped far outweigh the difficulty of the challenges.
Very glad to hear that folks are breaking free of this long-lived trend. I also interview candidates on behalf of my clients. Personally, I find the most effective technique is to choose items from their CV, and have describe in detail (with a white board) how they did it, what challenges they faced, etc. Then, pose to them a hypothetical "but what if you were constrained by X or Y, how would you adapt your solution", etc. It is very easy to spot a charlatan or liar in these questions. If they really did what they claimed on the CV, this type of session gives them great latitude to demonstrate and expand on what their capabilities are.
I've even gone over notes I took at a couple of my past jobs, and I don't even remember doing a lot of those things even with it written down in my own handwriting.
Now we just need you at non-YC startups, too.
In discussions on this topic I see a lot of: "Programming on the spot is hard, let people program at home"! But then other people say "Why should I program for free at home, my resume clearly shows I am already a skilled programmer. All this will do is cater to young people without families, or those fresh out of school".
I am not looking to hire devs right now, but I am thinking about the same idea with a tiny tweak when we move to that stage. If the verbal interview goes well, offer 2 choices. Make it clear neither choice is seen as the better choice, and both will be judged equally.
* Sit on a computer with me for an hour, and show me how to code a fairly simple program.
or
* Get a small actual work assignment to take home and code. Would expect it to take maybe 5 hours to code. Offer $500 as a 1099 contractor to complete the assignment within the next 2 weeks or so.
This gives both groups a chance. The too busy to do a big programming assignments can code in front of me for an hour. I should be able to judge their chops pretty fast. For the people more nervous to code in front of me, they can get paid a nominal fee to code some small piece of code.
The only group I exclude is the group that doesn't feel the need to show code to land a job, but not too interested in that group. I have seen too many good talkers and bad coders to want to risk this group.
As someone who's recently been through the ringer, including one six hour take-home, all I want is a clear demonstration of respect and rationality.
Bring me into your professional office. Let's talk like professionals. Allow me to demonstrate my professional skills. Call me back with a professional yes or a professional no, all within a professional time frame. That's it.
Remote or otherwise less traditional assignments / roles / jobs will deserve and benefit from their own process. But how we strayed from the straight forward formula is beyond me, my guess it was an initiative started by a handful of companies who had trouble hiring.
I don't think hiring devs is the systematic issue everyone makes it out to be. Assessing talent is always hard, be it an artist's, an athlete's or a programmers. I think rather then assume the cost of the investment in hiring, companies chose to blame the system and that's where this absurd roller coaster started.
It isn't but it strikes me we are looking very hard to find a new way to do things, when the old way was pretty damn good.
Sit me down and talk about technology for ~thirty minutes. If I don't have the social skills to successfully do this (minority issue) I likely would not be able to communicate well with a team and thus should not be a candidate anyways. You will then know immediately whether you want to hire me (or progress me to another round) or not.
I then get a call two days later and can progress with my life.
People pretend like all this hiring strategy is for the good of the candidate. It's not. As with everything else its for the good of the company and its investors.
Here's a thought:
Invest in a competent hiring manager who can see through applicant bull shit and identify talent within a reasonable range. Includes basic negotiation skills. And assume the rightful risk that is employing another human being.
Problem with that is it's hard to find one. It's gotta be someone with pretty good coding skills. This person would then have to share their time between either coding head-down or managing coders, either of which are time-consuming and intolerant of disruption.
One idea I had was you could have mutual feedback. A bunch of people would after a while have anonymous input on each other, giving you say 10 coder's impressions of a fellow coder. This wouldn't have to be quizzes, half hour coffees could do.
This is an efficient way to hire a team of good bullshitters. I've interviewed people who did extremely well when we were "talking like professionals" but were unable to do even very simple coding problems.
My bar for coding is really not that high. I don't expect perfect syntax. I don't pick the language. I don't expect "the one answer". I expect people to write code that could work after syntax and small bugs are fixed, and most critically, I expect people to be able to discuss their code meaningfully.
Unfortunately, "ability to write basic code" and "ability to talk like professionals" are not tightly correlated. And I expect both of these things from dev candidates.
* People who read a lot of blogs so know the lingo, but never code
* People who get the theory but can't actually implement something that works without bugs
* People that over-engineer simple things
* People who have been on a team long enough to learn how things should work but lack the skills to really do the coding.
I phone screened a guy fairly recent who had a very long background (~20 years) in a pretty security-conscious field. He did very well in open-ended design discussions and was able to explain his prior work very well. He couldn't code trivial binary tree operations, though. I can only assume that someone else on his team is carrying most of the coding burden. This guy might be great at a PM-type job (or not, I don't interview for those jobs), but not as a dev.
I think this is where my definition of "talk like a professional" may be more strict. I'm interested in understanding, in opinions, in the actual engineering.
> People who get the theory but can't actually implement something that works without bugs
Having spent most of my career working with PhDs trying to design and implement signal processing and NLP algorithms, I have experienced a lot of that. Given the proper attitude, it is fairly easy to correct coding deficiencies if someone really understands what they are supposed to be doing.
> People that over-engineer simple things
The greater offenders are fairly easy to detect in a directed technical discussion. The lesser offenders are fairly easy to correct in code review, again given the proper attitude, as they are unlikely to be doing things that require major refactoring.
In short, I think I place much more emphasis on engineering as opposed to coding. My experience has been that any coding issues people with good engineering skills and an attitude worth hiring have are quickly and easily corrected. You cannot really understand the engineering of a system without being able to code it. You might not be as efficient as someone else, but you are capable.
Coding is a skill largely separate from other critical dev skills, e.g. design. Someone can legitimately have deep knowledge of, e.g., how to build a 3-tier service architecture without actually being able to code. This isn't "faking it". It's a different skill. You can study database partitioning strategies and learn about the latest and greatest frameworks for writing web pages and APIs without ever writing a single line of code. And sure, you can try to probe deeply enough to expose where their knowledge stops, but you're still not probing for coding skill. There's actually a decent chance that you'll end up probing for trivia which is not a very useful filter. "Oh, you don't don't know the auto-generated C++ class members? You clearly haven't actually worked in C++!" Yeah, right. Anything known broadly-enough known that it's reasonable to assume all coders would know it is broadly-enough known that non-coders could learn it, too.
Even if you could probe deeply enough in conversation to expose that they can't code, you could do the same with a few minutes of actual coding. When someone can't code, it becomes clear pretty quickly when you ask them to code.
I do not believe coding is largely separate from engineering. There are, of course, other skills that are necessary or desirable.
> Someone can legitimately have deep knowledge of, e.g., how to build a 3-tier service architecture without actually being able to code. This isn't "faking it". It's a different skill.
Absolutely. It is also a level of skill I would only expect or look for in a position that was not going to be doing daily coding, such as a systems engineer.
> You can ... learn about the latest and greatest frameworks for writing web pages and APIs without ever writing a single line of code.
Here I disagree. If you have never used a framework or API, you don't know it. I don't care that you can regurgitate the Javadocs; I care that you know things like its pitfalls, quirks, and runtime oddities.
> There's actually a decent chance that you'll end up probing for trivia which is not a very useful filter.
To be clear, I abhor trivia-based interviewing. What I am talking about is practical engineering tradeoffs between one course of action versus another, preferably supported by direct personal experience in the past.
> Even if you could probe deeply enough in conversation to expose that they can't code, you could do the same with a few minutes of actual coding. When someone can't code, it becomes clear pretty quickly when you ask them to code.
Exposing the level of competence a five-minute coding problem can is trivial to do in parallel with a deep engineering discussion. In fact, I think some sort of code should be part of that discussion. I just don't think it should be the "implement this" CLRS problem. It should be something two-way, more representative of what the job is like on a daily basis.
I could pick up a cookbook and study how to cook a souffle. I could learn enough about this academically that I could answer basically any questions you might ask. Having this academic knowledge is a good thing, but it doesn't mean I've ever even separated an egg. If you really want to know if I can make a souffle, your best bet is to hand me the stuff and ask me to do it.
> Here I disagree. If you have never used a framework or API, you don't know it. I don't care that you can regurgitate the Javadocs; I care that you know things like its pitfalls, quirks, and runtime oddities.
And here I assert that you're either probing on trivia or probing on things that can be learned without using the framework (actually, probably both). The pitfalls, quirks, and oddities are well documented in thousands of blogs.
> To be clear, I abhor trivia-based interviewing. What I am talking about is practical engineering tradeoffs between one course of action versus another, preferably supported by direct personal experience in the past.*
So this is an entirely different thing than pitfalls. Now you're talking about designing systems and dealing with tradeoffs. This isn't coding, and I don't believe you can always discover coding gaps by probing on this.
> Exposing the level of competence a five-minute coding problem can is trivial to do in parallel with a deep engineering discussion. In fact, I think some sort of code should be part of that discussion.
I guess I'm confused about what you're asking in an interview, then. Are your candidates coding or not?
> It should be something two-way, more representative of what the job is like on a daily basis.
I think it's unrealistic to try to get the candidate to solve real-world, day-to-day problems in an hour. This isn't what the job is like. "Design and implement this feature" is not a 45-minute task typically. It's typically days or weeks, so asking a "representative" problem in an interview is infeasible unless you're just doing high-level design, in which case it's not predictive for coding ability.
When I was writing signal processing code, we had four levels of engineering.
- The first was an Algorithm Description Document. This document laid out, in mathematical terms, the algorithms used for various signal processing functions in the system. It was purely conceptual.
- The second was an Algorithm Implentation Document. This document mapped the algorithms to specific parts of the hardware and software system, laying out the logical module structure and data flow. It also specified how the algorithms would be realized in code, since parts of a particular algorithm might need to run in different parts of the system. The AID was still primarily mathematical.
- The third was a series of software design documents. These documents specified the details of module interfaces, code and file layouts, and specifics about what algorithms would be implemented in what functions.
- The fourth was the actual translation of the mathematical algorithms in the AID into actual C code. Most of the engineering at this level dealt with function-level optimization and some platform-specific stuff.
Of those four levels, only the last is what I would consider "coding". It is also the least important. Anyone who can really understand the first three levels and is willing to learn can handle the fourth. As I mentioned previously, there will be differences in efficiency, but not in capability. It would take willful ignorance for this not to be the case. I think this is also what you are considering "coding", but I'm not sure; I also think you might be merging #3 and #4.
Now, most commercial projects do not run this way and, as far as I know, few have dedicated systems engineers to manage the system architecture and APIs. Thus, the software engineers building the system generally perform the work in all four of these levels simultaneously as the system builds out. Despite this, I still only consider the work that fits level 4 to be "coding", and still consider it to be the least important.
What I look for when I interview are engineers who operate very well in levels 1 - 3. If I find that, level 4 is pretty much a given absent the rare pathological case or someone with a very "academic" attitude. The questions I personally ask deal with levels 2 and 3. Those questions cover some of what might be considered coding, like API design and class layout. I do not have candidates actually generate code, though. Some of the other interviewers have candidates write small functions in pseudocode or explain existing, uncommented Java code, though.
I also need to note that we have a take-home test that candidates need to pass before they get an on-site.We have also recently added an open coding challenge which may eventually replace the take-home test. This probably covers your requirement for candidates to code, even though it isn't done in front of one of us.
Haha, exactly when was this 'old way' ever reality?
- never hear back
- automated email 3 weeks later
What if your professional skills are such that it's not possible to demonstrate them in an hour or two at someone else's office--either because of the nature of the skills, or because you're one of the many excellent programmers whose work suffers when there's someone actively staring at you, like the guy in the article?
Let's be honest. Programming as a discipline attracts a disproportionate number of people for whom social skills do not come easily. Granted, you don't want to hire a grumbling misanthrope who refuses to take direction, but you also don't want to turn away a perfectly good team player who lacks the largely irrelevant skill of gladhanding under pressure.
I think a lot of the comments in discussions like this come from programmers who do have solid social skills, and there's certainly nothing wrong with that, but an interview process that gives you personally a fair evaluation is not necessarily the most reliable one for programmers in general.
The first one, they asked me to solve an incredibly complex math problem that I had no idea about so I struggled with it for 5 or so hours before giving up. Probably good that they didn't give me the job; if they were expecting me to know the level of math they were requesting then I would have had a pretty bad time. So I guess the test worked in that regard.
The second one interview at a different company, they gave me more moderate questions after a phone interview- mostly questions testing knowledge of a specific language. When I asked how long it would take, I was told "you have a deadline of 8 hours from when you download the zip file to when you turn in your code, expect it to take the entire 8 hours". That was probably the most stressful 8 hours of my life, way worse than any whtieboard interview would have been. I didn't look away from my computer once the whole time, did not let myself get up to eat, go to the bathroom, or anything. My girlfriend was in the room and tried to console me while I was doing it and stressing out and I ended up yelling at her to be quiet because I was trying to hard to concentrate. I finished the last problem about 10 minutes before the deadline, zipped the files up, and sent it to them. I never heard back.
Favorite interview I've ever had was a combo of a live coding session and a phone interview. They used an online tool that they gave me a link to that had syntax highlighting. The interviewer on the phone could see where I was typing and could highlight stuff etc. Think google docs, but for coding. They asked me to write some algorithms, then asked me to re-write them recursively, then asked a bunch of questions about the limitations of the algorithm, cases when it would be used, etc. It was fun, not stressful in any way, and the interviewer even taught me some things along the way! I feel like they got a really good picture of my thought processes and my personality so they could accurately judge if I would be a good fit on the team.
Paying somebody to do the take-home coding assignment and paying them would definitely help alleviate some of the stress, but I'm still not a fan of the format. You don't know how long it took the person to make their solutions, and you don't get a good idea for how they work, only what they can do (both are equally important, in my opinion).
My take-homes made me fundamentally question my ability as a programmer. And I'm a damn good programmer. That is wrong on so many levels.
I can only pledge that if I'm ever in a position to hire developers (at any level) that I'll never force that kind of experience on a potential applicant.
I feel their is a major gap between junior and senior developers. And in this environment a junior developer has zero leverage with the companies he/she applies to. So they treat us like cattle.
It's like with every generation gap, their isn't much point blaming those who came before us. We can only do the best we can and make an effort not to replicate their mistakes. The next class(es) of software engineers have to improve and be better then the ones before them.
I'm preaching, but I hope you get what I mean.
There's a gap between knowing concepts and knowing how to apply those concepts. There's actually a certain (limited) amount of artistry to writing code. Hiring a programmer without seeing code is like hiring an Architect without ever having seen a house he's designed.
You don't need an 8-hour take-home coding exercise to determine whether or not someone is capable of writing working code.
Please name these idiots.
1) I didn't score well on the test. It's within reason they read this post and release my scores with a 'it was because he scored low'. Future employers then come across my scores and deny me.
2) Don't bite the hand that's like the hand that MIGHT feed you. You don't yell and storm out of investor meetings. Because then they tell other investors. Similar logic here.
3) This place is very optimistic. Pessimistic people aren't particularly desirable. Whistle blowers are included in the latter group especially by corporate entities. Who knows what it could cause.
It really boils down to the fact that it's not a safe environment to do so. Or at least it doesn't feel so.
I think you're playing the game of life with your scared setting turned up too high. You might get better results to turn the bold up a bit over time as you gain confidence.
1. A very loose time limit. Maybe, as a rule of thumb, at least 10x the time you expect the challenge to take (so, a 1-hour challenge is given a 10-hour limit to turn it in, and a 5-hour challenge is given two days). If you expect it to be done in real time, why they heck don't you just bring the candidate in for a normal interview?
2. If the challenge is expected to take more than, say, 5 hours, the candidate should be paid for their time. Long challenges are going to disincentive candidates with lots of good alternatives to your company, so compensating them as in your own interest if you want good engineers to make it through your process. Plus, it's a strong signal that you value their time.
3. The challenge should be as close as possible to the sort of thing you do day-to-day. This should be obvious, but don't ask math questions or graph traversal questions unless this sort of thing comes up regularly in the job you're hiring for.
4. The candidate should be given an opportunity to discuss their solution. In real-life code, a seemingly stupid decision is may well be totally justifiable, but not obviously so from the code itself.
5. The candidate always gets an explanation of why they were rejected. At one company I worked at, I was in the position of reviewing takehome tests (which were one component of a longer process which involved some on-site coding). I had to write those explanations, and I know it's hard. It's easy to say "your skills are not a good fit at this time", but it's hard to tell someone you don't know what's wrong with something they put a lot of work into. It's still worth doing.
Like FizzBuzz I think the take home worked well as another data point. It easily filtered out people who couldn't follow basic instructions, people who were clueless about Java even though their resume said different, and people who simply didn't care. The problem also gave us something to talk about when the candidate came in for the in person interview.
Overall the problem was dead simple for anyone we would actually want to hire.
Just as an aside, I would actually be more willing to undertake this type of interview if you weren't paying me. I don't have any ethical qualms about interviewing while working a full-time engineering job, but I'm not entirely comfortable taking a contracting job under the table. It may be something of a symbolic gesture given that it's such a small time investment and small amount of money, but it feels fundamentally dishonest, especially if you're a current or plausible future competitor to the company I currently work at.
The official policy where I currently work is that moonlighting is allowed but must be approved by our legal team, and while I could probably get away with not asking for permission, I'd be pretty uncomfortable in both cases (asking, or not asking).
Sure, and I don't think I would force pay you. Would offer you the in person option, or the homework option without pay. Could maybe work it into a signing bonus if you took the job or something? Definitely not looking to put someone into an ethical dilemma, but not wanting to be one of those companies who makes candidates do really long take home interviews and then makes them mad when they don't extend an offer.
So, if you are interviewing at 20 companies, you need to expend 100+ hours or almost 3 full work weeks?
It should take 1 hour or less. Period. Probably less that 1/2 hour. I doubt I get much more information asking you for a 5 hour assignment than a 1/2 hour assignment.
If I'm really that interested in your programming on the fly, I should do it at the interview where I'm paying for your lodging, food, etc. I should tell you what you are going to be doing, and to bring your laptop set up to do that.
That's a lot of companies to entertain! When I was interviewing, I could barely maintain the composure to interview with 3 companies! (Only one of which had a take-home assignment.)
I have never interviewed at 20 companies when I needed a new position. If you do, cool - but not sure I want to simplify my hiring process to help someone mass interviewing.
If we have a conversation and we both like each other, let's see if we can come to terms we are both happy with. If we are playing other companies off each other for 1k raises, it seems not really worth the hassle.
I'm at a point in my career where I mostly refuse take home tests because I'm busy and I value my free time. Getting paid would make me much more willing to jump through hoops. Particularly when that day of vacation cost me $350 after taxes, so it's not like I don't have skin in the game already.
I share this opinion, but only for certain ways of doing it. If it's done in a fully automated way, before even having a phone screen, then it's too easy to waste my time. As an alternative to the whiteboarding interview, however, it could be great.
I like this, not for the money, but because it guarantees that the company is not giving this assignment to 100 different candidates ($500 x 100 is getting prohibitive for a hiring budget). I'm more willing to put the effort if I know I'm one of the "finalists" for the position.
Downside is that, as a company paying someone to accomplish a task, I'd want to give a different task to each applicant, so that if they do a good job, it provides value to the company.
And this is a problem because rarely are two programming problems exactly as difficult as each other, so the test isn't normalized. Interviewing is hard enough when you keep all the variables that you can control the same.
That's less than you're already spending on salary for the interview slate, so you're at most doubling your already small costs for a critically important function for your company.
I don't think I would give out the same work to multiple people, let them put it into production on their first day and get the pride going ;)
before i produce work for free its good to know they are actually considering me and not just throwing me work as another 'step' in their process.
A choice is better than no choice though, but too many companies fumble through handling take home tests to make it worthwhile to a quality developer with any sense of value.
You get paid that much as a freelancer when you produce value for the company. So by doing an extra assignment, especially one that is a useless piece of code, no - $200/h is ridiculously high price.
I'd much rather freelance for that type of stress & when having to compare the economics time-wise, which a take home test simply does not match - that is the whole point.
If a company does not want to pay that much, maybe they should respect the prospective employee's time, especially since it is a job seeker's market.
Agreed.
Annual billable hours for consultants, be they developers, management, lawyers, et al, are considered huge if near 1500. That roughly works out to just under 30 billable hours per work week when vacations/holidays and non-billable time are taken into account.
As you surmise, just because someone _can_ bill X/hour doesn't mean that each hour they breathe commands the same remuneration.
If you get to the paid homework step, we are ready to hire you, pending successful homework.
Yes, and if I copy that resume and put my 6 year old's name on it, then her resume clearly shows she is a skilled programmer.
However I realize I may have a bias as I do ok on most blackboard coding interviews I have done.. maybe been stumped 1 time out of 15 or so in my life? Some of it is a skill, that the more you do the better you get at it, but being good at it does not make you good at actual coding.
In my experience, some interviewers, particularly Amazon interviewers, get really anal about putting correct code on a whiteboard, sheet of paper, or bare text document. I personally do not when giving interviews.
My bigger problem, and I seem to depart from the vocal majority on this, is that my preferred normal workflow does not use whiteboards for anything besides task lists and diagrams. In 13 years[1] as an engineer I have never written actual or pseudocode on a whiteboard outside of an interview. I rarely do it on paper. I have never worked with anyone who did this very much, either.
[1] Granted, four of those were as an EE, but I still had to deal with code from time to time
I had that experience with an Amazon interviewer. The guy who told me he expected perfect code also gave me zero feedback as I worked (despite me literally asking if I was headed in the direction he expected) and spent the entire time staring at his laptop. He'd apparently forgotten that he was scheduled for an interview, and also his manners.
I'm very good at memorization (of facts, ideas/concepts, and procedures/algorithms) and that allowed me to do well in my younger years and in standardised testing, so I always just scoffed when I heard other people complain about how it was a poor proxy for knowledge / abilities.
Of course, now I'm terrible at pretty much all the standard ways of interviewing developers (...here's where you say I'm probably just a bad developer) and now I have all this past-due empathy for those I disregarded before.
A valid question, but paper-code?
Edit: Oh, and how do you version control the white board?
We have a magic white board that can print out a big piece of paper showing everything on it. We also take pictures of it (and lesser white boards) to record designs agreed. Those pictures generally get put into a formal design document that is reviewed, signed, approved and all the rest of it.
The resulting svg or png can be then added to the docs folder of a project. Works well with sphinx, etc.
My original comment was mostly meant as snark, but I've had an interviewer take photos during a whiteboard exercise for this reason.
Explanations work better without lengthy pauses. Ideally, I can explain the thing without stopping too long.
> Why don't you use documentation?
I do if it's necessary. Sometimes it's not necessary.
> Oh, and how do you version control the white board?
I don't.
3 hours isn't too bad. I had a friend interview with some hedge fund and he said he probably spent 30+ hours on a take-home project (he didn't get the job). I thought that was way too excessive for just 1 interview.
A couple open questions:
1 - Is it reasonable to expect a 10x programmer whom your are trying to poach to give up so much time? (Or should you give them a $250 Starbucks gift card or something similar for their time?)
2 - Can you really ferret out cheating? I had a grad school classmate who paid someone to do his (non-programming) take-home homework for a job interview, and he got the job. He only lasted 6 or 7 months, but it was enough to be awful for all parties involved. I don't have a great counter-solution other than ask for someone to come in to the office to do the work, and even then you can't tell if they have remote support.
2 - I can't say for sure (we're only just launching this), but I hope (and think) that talking with someone for 45-minutes about the project that they did will be enough to make sure that they actually did it themselves
Were they employed? Were they very desirable to companies? Were they very undesirable to companies? Did they have financial hardships? College graduates? College dropouts?
I think it's important to remember how diverse the hiring pool is, and which voices tend to be the loudest. I would argue that the advice most companies get are from very successful companies. Similarly engineers likely seek advice from very successful engineers.
Both these groups are in the minority I think, and would thus not be in the best position to dictate for the majority (strictly in terms of fulfilling individual needs that they themselves have not encountered, personally or otherwise).
Example: 10x programmer wants a hiring process that caters to 10x programmers.
Problem: Vast majority of programmers do not fall into this category, and would not benefit from such a system. Yet companies want 10xers, so they go with it anyways. Then they complain about how hard it is to hire programmers.
Personally, I think this is where the skill of the interviewer comes in. A skilled interviewer can bust through bullshit fairly quickly. A big problem in interviewing and hiring right now is that most of the interviewers are not skilled. Thus, companies try to come up with processes and metrics that (theoretically) remove the interviewer skill from the equation. Unfortunately, this seems to be done in a horribly unscientific manner.
I guess the challenge in this situation is that the whole reason for take-home work is that introverted interviewees get flustered in person. Won't this happen when the review happens?
This still seems like a better idea than "Tell me about yourself" and "How many golf balls fit in a 747?"
At that point, the candidate should not be hired.
If the candidate can't communicate while writing code, and can't communicate about code already written, at some point you have to be afraid the candidate just can't communicate.
If this is a person who can communicate in any situation except an interview situation, then it's a Catch 22 where their ability to communicate in a work environment just can't be verified.
(Unless you secretly record them communicating in some other work context? Probably not a scalable approach.)
Any experienced programmer that is considering a job change will spend more than a few hours on the process anyway, in due diligence. If anything, I think this is an important part of gaining experience in the field: You actually want more time around future employers, to avoid a bad fit. Going to a place just to quit in 3 months time is a waste of your own time. Investing an extra few hours, or even few days, makes a lot of sense.
I'm being the devils advocate here, trying to hone in on the best way to do this. I still think work products are a much better predictor than most any other interviewing technique.
Coming up with something that works, versus explaining why it works or why you did it that way after the fact.
I think it's the "thinking out loud" part before you have a solution, that can fluster a lot of introverts.
this is to put it precisely. the reality is much messier and varied. the point is, people's brains are not wired the same. and what this means, to make a long story short, is that these interviews are not comparing apples to oranges... not even close.
With a phone interview you have to commit, which is no problem if you're in the market. But if you're not in the market and you still want your options to be open, interviewing on your own time makes a lot of sense and reduces the mental burden and stress of switching.
The applicant was expected to be able to answer questions about the code anyways, so hopefully that would've been an effective layer of protection as well. Don't know if this company is still doing it.
And finally, you aren't fooling anyone when you say that it should take 3 hours, or as long as they want to spend on it, while giving them 3 days. You are pressuring people to spend as much time on the problem as possible to "prove they are a good programmer." It's exploitative - you aren't paying us and the probability that we will get hired is extremely small. Think about how many companies we are interviewing with.
It helps to know if the candidate you hire will handle that, or fall apart just when you need him/her to do the job he/she is paid for.
If that kind of situation is happening more than once in a blue moon, something is very wrong at your company.
"1. The stress of interviewing seems to be different than the stress of performing a job. None of the people we've spoken to who do poorly in interviews report problems performing under deadlines at work, or when a website is down and there's pressure to get it back up."
If you are hiring for a high stress environment then you need to focus upon candidates who can handle stressful environments over candidates who write really good software.
On the other hand most environments are not high stress.
I think this should stop. In it's place, developers can have a pet open-source project, which they submit with their application. The point is that the same project can be submitted for a hundred applications if needed, saving the candidate dozens or hundreds of hours of wasted time.
They could put that time into the project instead and even if they don't get a single offer, the open source community benefits, and the candidate got to do something interesting rather than convert roman numerals or aggregate an array.
I seriously wonder if we should all boycott dev tests. If they give a test, just give them a github link and say "Please review this as a good example of my work.". If they can't review code that isn't tied to a silly question maybe they are not worth working for.
I say this having done some such tests recently myself. (To be fair one of them said a Github submission is OK, I just didn't feel my Github was good enough at the time.). I kind of feel bad contributing to the madness!
Not everybody has any major projects on Github. The lack thereof does not signal lack of programming aptitude. If somebody has done a lot of great work, but it was all for employers and clients, that doesn't mean they would do poor work for you if you were their employer or client. I find that suggestion much more distasteful than having relevant work-sample tests.
You shouldn't have to write a OS Kernel or a modern browser in your spare time either. I'd say it would be about 4-8 hours work that shows off your skills.
But if you prefer to spend that same time on some inane made-up problem for one employer and code something that you will wont enjoy writing and never use again, then as I said in another reply that there should be the option for that too.
> Many other fields require competency tests
Is there a field that requires 4-8hr competency tests where each test is wildly different from the previous, with completely opaque criteria. At least with the provide your own project idea, if the employer has fucked up criteria the candidate has only wasted a few seconds of their time in sending the zip file.
Kind of analogous to 'show me your portfolio' for a photographer. The portfolio should be enough. Unfortunately this is not possible as a developer as the source from your previous jobs is likely to be closed, hence the need for a personal project.
> You shouldn't have to write a OS Kernel or a modern browser in your spare time either. I'd say it would be about 4-8 hours work that shows off your skills.
Well, this is a different suggestion. Now we're only talking about a few hours of work rather than a pet project. I don't think the licensing makes much of a difference since I probably couldn't monetize four hours of randomly dorking around. I'm still not a huge fan of the idea, though, because it sounds hard to me to show off (adequately) skills I've spent decades acquiring with less than a day's worth of aimless work. I don't feel like it would be very impressive.
> Is there a field that requires 4-8hr competency tests where each test is wildly different from the previous, with completely opaque criteria.
Nobody is advocating for eight-hour tests. The OP said they expected their test to take less than half that. And most fields that require competency tests (e.g. cooking, acting, music) will expect you to do it live, on the spot. Take-home tests are being suggested in the case of programming specifically because programmers hate being expected to perform on the spot.
> At least with the provide your own project idea, if the employer has fucked up criteria the candidate has only wasted a few seconds of their time in sending the zip file.
Not all criteria that someone might test for are "fucked up." If I'm looking for, say, somebody to do a math-heavy machine learning job, and your pet open-source project is a jQuery plugin that makes web page backgrounds sparkly, the mismatch between those two is not the fault of my criteria.
So you would be against a developer test too then?
> (e.g. cooking, acting, music) will expect you to do it live, on the spot.
Fair enough. So the developer equivalent should be a 1 hour technical interview, with perhaps a coding exercise on a computer within that hour. I am happy with those. To reduce the pressure the interviewer could leave the room for 10 mins while you code something. It is the do 4 hours work in your own time for a chance to get an interview or get to the next round that bugs me. And in reality I'd spend 8 just to maximize the chance of getting the job.
> your pet open-source project is a jQuery plugin that makes web page backgrounds sparkly
Yes there are sub divisions in the 'software developer' category. If you want a machine learning job you kind of have to demonstrate it one way or another. I argue that the option to show your existing code rather than do additional work on a made up problem is valuable.
Honestly I'm glad they don't watch "Survivor" and make us eat bugs or do weird obstacle courses. Seriously. You treat people like dirt, they're gonna resent it and complain on HN and some Stockholm Syndrome victims will back up the abusers.
Another example of the low social status is those horrible open offices, like a call center. Ugh.
Another example of immensely low social status is crazy work hours.
So, where you work software devs are in an open-plan space and other roles have their own office?
As far as I can tell, essentially all of them. Of course, many of them have no practical way to even attempt to assess competence, so they fall back on "situational" and "culture fit" bullshit.
> I think this should stop. In it's place, developers can have a pet open-source project, which they submit with their application.
Problem the 1st: how do you verify the example project is actually the candidate's own work?
Problem the 2nd: building and maintaining a non-trivial open source project is a huge investment of time. There are many competent programmers who have a long list of things they must / would rather do when they get home from sitting at a computer programming all day. It's only more efficient if you send out 100s of applications, but as far as I can tell, competent programmers rarely spam 100s of applications. If you're just putting your toe in the water from time to time, taking a day off to do a traditional tech interview grill fest is a much more effective use of your time.
Problem the 3rd: evaluating a large, unfamiliar codebase is actually really hard. All unfamiliar code looks shitty, because you don't have the full context to explain the choices made. Very few people have GitHub pages that actually look good.
> I seriously wonder if we should all boycott dev tests.
Good luck with that co-ordination problem.
Tech interviews suck, for everyone involved. I still haven't heard a proposal for an alternative that isn't fatally flawed. (I consider "take home interviews" to be an incremental improvement on the basic whiteboard problem-solving test)
Get them to talk about it in the interview
> Problem the 2nd: building and maintaining a non-trivial open source project is a huge investment of time...
Not really - in one weekend you probably can create something interesting and good enough for showing off to an employer. Also it will probably draw you in and you spend more time (for the fun of it) making it better. But you don't have to.
For those people who prefer FizzBuzz tests to implementing interesting stuff, I suggest companies provide the option to do a test for those who don't want to submit their project code.
> Good luck with that co-ordination problem.
A first stage could be that we say "no tests until at least an interview has occurred and the candidate has progressed to the next stage". That is in any candidates own interests regardless of other's actions - so wouldn't require coordination, just communication of the idea. It is in his own interests because the time spent on the speculative work could be better yielded doing something else, such as attending a meetup and generating more opportunities. Looking at it from a sales perspective of how to spend your time - lead qualification, lead generation etc. Why spend a lot of effort on an unqualified lead?
> For those people who prefer FizzBuzz tests to implementing interesting stuff, I suggest companies provide the option to do a test for those who don't want to submit their project code.
In fact a great personal GH repo could be to implement FizzBuzz in a bunch of different languages. I think most companies would get an appreciate the joke.
Have them discuss the code in depth. Architectural and design decisions, coding conventions, alternate approaches they rejected, etc. Pretty hard to fake this if they didn't write the code.
"Problem the 3rd: evaluating a large, unfamiliar codebase is actually really hard."
Good chance to assess the candidate's ability to document. :)
More seriously, though, this is again an opportunity for the candidate to walk you through the code.
I know of a place in Chicago that does that for a dev job.
Anybody can legally claim to be a programmer, so it makes sense for the companies to do some basic checking that a University would have done for them in other cases.
http://www.gayle.com/blog/2013/09/18/companies-who-give-cand...
At the core of the problem is that this approach can be used to burn a lot of a candidate's time without an equivalent investment from the company.
I've mentioned this before - I applied (maybe 5 years ago) to a company that first asked me to take a Java test (about 1 hour of work). Then the recruiter called me and sent me a take home project that should take "5-7 hours". I did this, crickets chirped for a month, though I did check in with the recruiter for a while (I gave up eventually). Finally the recruiter called me with a one-line brush off "we've decided not to move forward at this time…"
Granted, this was a bad experience, and it won't always be like this. But I'm pretty close to saying "never" to these exams.
I thought Gayle's suggestions were good. She goes so far as to suggest a 90% passage rate - that you should not be giving these tests to people who are unlikely to pass then, using them to confirm, not screen.
I never got a response. I think three months later I might have gotten a one-liner saying they had gone in "a different direction" or some bullshit like that.
It's insulting and ludicrous for companies to treat prospective employees so disrespectfully.
I agree that obligatory take-home interviews are unfair (I feel the same about trial periods). They work (they're probably more accurate than a standard interview), but they take too much time from the applicant (and will thus scare away many of the best people).
As an option, however, I totally disagree. There's a significant percentage of good programmers who are ill served by standard interviews. Those people want this.
I'm not inherently opposed to technical tests, either in person or take home exams. I believe that many exam-based institutions adhere to a code (probably unwritten) that grants certain rights to the examinee. Think about exams in college, where stakes can actually be quite high.
Think about exams at a university. Typically the subject matter and nature of exam questions is available in advance. The grader is highly competent in the field. An associated study path is available for the exam. The exam will be graded and scored, and those scores will be communicated to the student within a set time frame. Feedback will be provided to the student. The exam is part of achieving a lasting credential, such as credit for a course on a transcript.
None of these things exist in technical exams, and in many ways, this increases the stress. Merely making an exam "optional" doesn't erase all these problems. I think this is the core problem with technical exams, they contain all of the stress for the student, but have none of those rights that I believe exist in universities and other exam-based institutions for a good reason.
In my experience 90% tests get 10% of the attention of other assessments.
Furthermore, collaborating in-person with another engineer tells me more about their engineering culture, and tells them more about whether I'm someone who can collaborate well with others. An hour of pair programming on one engineer's current real-job task would tell us both a lot about each other in a fraction of the time.
Its a very lopsided assessment. Normally an in interview you can judge the company while the company judges you. That way in an hour interview you both can probably tell its not a good fit. If I'm applying and coding in python and within 15 minutes of a live coding exercise they tell me I shouldn't use list comprehensions because they are hard to read, I'd be out of there faster than I could measure. If I just spent 5 hours coding to get the same response? I'd get a little upset.
When I give critical feedback I will typically go through line by line and tell the candidate what is wrong and what is good. This is done with the candidate, since nobody is 100% correct so my judgement might be wrong and they can correct me. Many, many companies skip this crucial part and as a candidate you don't know if they are going to do it or not, so why waste your time?
My experience with tech interviews is that they are actually exams, taken under stressful conditions, with none of the courtesies normally extended to a student.
For instance, in college, or grad school, there is a process for taking an exam. There is typically an affiliated study path, you receive feedback on your performance by a set deadline, and at a good university, someone highly competent grades your exam.
In spite of this, people often describe exams like the bar or their medical boards as the most stressful academic experience they've ever had. As programmers, we have to go up to the whiteboard regularly to take a test, or complete a take-home exam and send it off to who knows who, but we often don't know the subject that will be tested, the competence or credentials of our examiners, whether it will reeve a fair assessment, or even any assessment at all (do they just throw the thing in the trash and say "we decided to go in a new direction"? Truly I have no idea.
That's a huge problem, and it is actually outright harming our industry.
Check this article out
http://www.fastcompany.com/3043082/most-creative-people/why-...
This particular article is about hiring women, but I'm absolutely certain that plenty of men are also deterred from pursuing new tech jobs because they can't stomach the idea of another round of technical testing (with none of the factors I listed above that makes it more fair for the examinee), whether that is white boarding data structure or doing take home projects. I think a lot of people may look at this and decide to just enter a different industry altogether, and I really can't blame them.
I'm on a tangent here, but I really think that tech needs to heal itself, and we're a long way form it.
I would cram for hours before my blackboard interview making sure I knew all sorts of algorithms, just in case. My friend and I would quiz each other. I don't see how memorizing tree transformations relate to a Django application.
It made it so much more difficult to move jobs.
Maybe a tweak would be to only offer take home projects to candidates only after committing to bring them in for an on-site interview, then the interview consists mostly of reviewing the code from the take home.
(Personally, I think I'd still prefer the "coding in person" option.)
So out of dozens of CVs, a handful will be invited to a personal interview, and maybe one or two people will actually get the home test. I get that it's time consuming so I try not to waste people's time if I'm not serious about them. On a couple of occasions when people said they're time limited, interviewing for a lot of places, etc - I've allowed them a one hour on site task that is of course simpler.
And it's very rare that people are rejected based solely on the code in the home test, it usually has more factors than that. But if you have two good candidates, it might help tip the balance in favor of one of them.
BTW I don't only review the code. I find that the quality of the documentation (not only comments - I ask for a short text describing the design choices, code structure, etc) is usually one of the best signals. Bad grammar and poor language, complicated descriptions of simple things, focusing on unimportant parts - are huge telltales of problems in a person's thinking. Clear, well versed, concise text usually indicates a smart and pragmatic person.
1x Take-home test didn't even get read (this was the nail in the coffin) 1x The interview failed because the salary wasn't competitive (should have asked beforehand about the salary, but didn't have the option; lesson learned) 1x Got an in person interview which led to an offer which was later rescinded (the trip was nice, so I'm not complaining)
Employers in this industry are just not responsible enough to even read through hours worth of work by prospective employees, so while a good idea on paper, the take-home test is a horrible idea in practice. Never again, indeed.
The problem with them is fundamental: "You will only get someone desperate enough to take your exam."
If the person is qualified they will be swimming in opportunities and will likely throw your exam directly in the trash heap. If they aren't you probably don't want them working for you. I suppose these might work if the entire industry colluded on it but then ... prisoner's dilemma.
Maybe a more useful indicator is weeding out the candidates that didn't say "no thanks." Cause really why are they so desperate for a job and why do they have all this free time? but then ... ethics.
I prefer an interview system where the company and the candidate both care. Commitment is a requirement for everyone.
Lots of people do poorly in whiteboard situations. As an employer, you may assert that you don't want any of them, fine. But I don't see the problem in giving people the option of using an alternative testing process.
This isn't "an alternative testing process" as such.
> To solve the problem of interview anxiety, we're adding a second track to our interview process at Triplebyte. Applicants, if they choose, will be able go through our process by completing programming projects on their own time.
> The project-based track will require a larger time commitment (and we expect lots of people to stick with the standard track for this reason).
Interview with 2 people for an hour or so. Then you get a Rails project, fix 3 bugs, choose and implement 2 features from a list, then 2 features they choose. Come back in a few days and discuss why/how you did what you did.
The problem with Rosalind or Project Euler assignments is you end up with an excellent theoretical math or bioinformatics programmer. Often not bad, but not on point.
Fundamentally anyone with a degree or experience or a non-trivial github can write code, but you want to test their judgement, their thought process, their comprehension, their style, their knowledge about your business domain. Other than total open field blank slate projects (very little of my time over the last 35 yrs has been spent in that mode) you usually have existing systems and code. So give them a "special" sample of your own code. Shouldn't be too hard to find unless you're literally hiring the first technical employee. Then give it to them a couple days before an interview and inform then you're gonna review that code together, they'll present you with a rewritten, redesigned version, and then review the rewrite together.
If you'll feel bad about making them do "real" work, the best code to send out is some that has been heavily customized to only work some of the time, not properly error check, and intentionally somewhat obfuscated, so I sincerely hope that code thats screwed up to that level has to be intentionally manually generated for the interview. So strip out most of the failure/error detection code, screw up some of the code, maybe intentionally cut and paste an almost identical function in place to see if they clean that up. Some folks like intentional outright errors, like typos, is this the kind of programmer who can't write English? Also wipe most of the comments, put some intentional logic errors in the comments. This can be fun...
If you're looking for non-intro level programmers "everyone knows everyone" and my latest job we didn't talk programming because I was vouched for as knowing what I'm doing from years of coworker experience at a past employer. I'd be moderately offended if someone I worked with for five years asked me to fizzbuzz, either in person or as a take home test.
Some advice to those doing take home tests: write (good) comments and include tests.
Edit: I just pressed the button on my TripleByte dashboard to switch to the "project-based" track, but then I get redirected straight back to the same "we're sorry" page I've been seeing all along.
This is the only part I take issue with. I tried a take home interview once that took the better part of a weekend and decided I'd never do it again. There just isn't enough time. Basically, if it takes that long, there needs to be a very high chance that I'm getting hired at the end, or it's not worth it.