Tell HN: Unpaid home assignments are not ok

267 points by mathverse ↗ HN
I’ve just been ghosted by a company after finishing a 2kloc home assignment.

It took me about 6h to develop and iron out the edge cases.

My take away from this is that:

I will not do take home assignments for free if they take more than 1h of my time.

469 comments

[ 2.6 ms ] story [ 364 ms ] thread
I've had the same experience. Submitted a working code test and crickets. I left it up on my GitHub named "{company name} coding test" and a couple of months later they asked me to take it down beacuse other people were plagiarizing it. Like them, I was concerned with the legal ramifications of providing any sort of contact, so I took no action and didn't respond.
Yeah, they were clearly plagiarizing. You should’ve told them to go pound sand
Plagiarizing aka Parent Comment just made an Open Source "library". What's wrong with using those??
(comment deleted)
If a solution to a problem is available on github it would make sense to use it if it solves the problem.
I would have sent them a contract to buy the code for $15k.
This is the correct answer, assuming you didn’t sign anything that gave them the rights to what you produced.
A baffling response at many levels. Both by the company (isn't this a great signal not to hire someone for their coding ability? Maybe everyone should put up a decoy solution) and the plagiarists (do they think the company hasn't seen the task before?).
(comment deleted)
If you ask a candidate to complete such a thing and then they turn in obviously copied work, isn't the author who published it doing the hiring manager a favor?
We put a shibboleth in our test for this reason, there's ~20 solutions up on GitHub and 80% of them are wrong. Feel free to copy them, it makes it so much easier for me to grade.
What does shibboleth mean to you ? It does not seem to match the original meaning of 'a signal to differentiate people from the in-group'
It differentiates our test from other GitHub projects.
It kinda works still: you tweak the exercise a bit to differentiate between the “in-house” version of the test and the rest.

Depending on the tweak it can also make the most basic of applicants fail to find matches entirely e.g. ask for a “YcomBinator” instead of a “FizzBuzz”.

you're also filtering out people with the skills but who don't want to do bs unpaid busy-work for you (maybe what you're after). ethical action goes both ways
Those people are free to evaluate existing GitHub solutions and pick the working one (out of the 20% ones, presumably).

That's way faster than writing unpaid working code and shows you're competent AND efficient.

Also, if they do that, I'll happily bring the original writer of the code to the interview to probe them on the flaws, as we hired most of them. :)
How many interviews are you doing?
About two a week lately, maybe 50% get offered the test after a short first-contact interview. We are sub-10 person team so this is a relatively large burden for us.
(comment deleted)
Weird - I had this exact scenario with a contract position working with Sony. I was even rushed to complete the take-home task, after which I was ghosted.
That's an excellent response
Well did you do any research about the company before dedicating six hours of your life? At the end of the day you got more programming experience and avoided a toxic situation. Sounds like a win to me
You don't interview to get "programming experience". You're interviewing to get a job. Definitely not a win.
Well apparently he needed it because they felt his coding skills weren’t good enough to hire
We don't know that. Perhaps someone else appeared to have more skill.
Or they had too many applicants and ignored him randomly, or they had an internal transfer, or they decided they didn't like his resume and never even looked at his code (no cost to have him do the exercise after all...), or they didn't like his style of tabs vs spaces, etc.
What a bad take. Are you volunteering your time for free on Upwork so you can "get more programming experience" and avoid a bunch of toxic situations? Of course not.
I’m saying when you apply to a random company you’re going to get random results
That sort of thing happens —- try and be really clear what you expect back if you do an assignment. Put it on an email.

Otherwise I’d write to them and tell them that you have an issue. Chase a bit, presumably you don’t know the reason for the ghosting.

Having said that they could be ghosting you because they are assholes. There are unfortunately a lot of inconsiderate assholes in tech.

There’s also a lot of people that think the world owes them something. Why do they owe you a response? OP agreed to do an assignment did but did they get the company to agree to call them back on a set date? A good job is like a hot girl they don’t have time to text back all the rejects
Are you serious? It is a common courtesy to at least reply with a generic email.
But not everyone is courteous. So instead of writing an emotional post a frustration every time it happens you should just accept human nature and move on without wasting time and dwelling on the past
You're both right: noone is 'owed' a response but ghosting is still discourteous.
People get frustrated by ghosting because they spend all this time wondering the cause when it’s very simple. They can’t come to the simple truth that they weren’t good enough compared to other options
do you feel the same way about employees not providing a two weeks notice?
Nobody is owed a response to the initial job application. After you've asked them to invest significant time doing something, you better believe you owe them a basic, "Thank you for your submission; we've decided not to move forward &c".
There is an implied social relationship here. They are asking for a considerable amount of work, so they should have the courtesy to respond. Something as simple as saying that they received and considered the work but they are not moving forward with the application. If they cannot say anything further, they can make it clear that company policy does not allow them to comment on applications so no further communications will be reviewed.
OP spent 6 hours of his time on an assignment requested by the company. This goes beyond basic human decency, so he is OWED that someone puts 2 minutes of their time and sends a short e-mail.

Asking someone to do so much work for you and dismiss them is a dick move in any culture.

People spend a lot more than six hours pursuing dates only to get ghosted buddy. Welcome to the real world. Not every effort bears fruit
> A good job is like a hot girl they don’t have time to text back all the rejects

"Not texting back" would be the equivalent of a company simply not following up after you'd submitted your resume; I'm sure OP wouldn't have complained about that. This is more like, the girl texts you back, said, "I'll consider going on a date with you if you do this 8-hour thing for me", you did the 8-hour thing, and then she didn't contact you after that -- yes, that's basic failure of decency.

I've had this before from a big company in the Go space. They constantly still sent me job ads and requested for me to interview and repeatably ghosted me. Wasn't until I direct messaged the CTO on a public Slack community to find out that I had not passed and that was why they wouldn't consider me and why I had been repeatably ghosted. No feedback as to why I failed the test or anything
>No feedback as to why I failed the test or anything

As a company, you can't really provide feedback on why people failed the test. Hell of a lot of people will get defensive and get into arguments with you that you don't have time for.

I agree however that one should at least tell you you are being rejected instead of ghosting you. That's just bad manners.

> Hell of a lot of people will get defensive and get into arguments with you that you don't have time for.

I find this to be a bullshit cop-out. You can always ghost them after providing initial feedback if you don't want to engage in arguments.

You can state _facts_ about the source code in a rejection email. It's annoying, you can't say things that would be useful, but there are always facts about source code that can be used for rejection.
You don't have to let them pull you into arguments
I have a rule that I refuse to participate in hiring processes that require unequal investment (of time/money) from me and the company.

If the hiring process requires 2 minutes of the company's time for every 1 hour of yours they are pretty much guaranteed to waste your time.

I've made exceptions to this rule before for what I thought were good reasons and deeply regretted it every single time. I no longer believe there are exceptions.

I will do it after they paid me for it. You as an individual are a business as well, somehow people never get that mindset (until burned a couple of times)
6 hours is too little, Google will make you practice algorithms for months and still people will willingly do it.
Google doesn’t require you to do that in any Google-exclusive way. You can take that prep to an Amazon or Facebook interview.

If it were a ship building company asking you to do 6 months of ship building business logic to get a job that would be different, for example.

The thing is that if you practice for Google's interviews, at the same time you're also practicing for any other company that uses the same process (and that's many companies).
I have been on both sides of this and I have a rule I try to always follow: I don't ghost people, no matter who. (Unless they are belligerent.) I always send some type of polite response. Even in unpleasant circumstances.
I just don't do them at all. It sets bad terms for the employer / employee relationship IMHO. I realize some devs just aren't that in demand yet and may have to subject themselves to this, but you should do your damndest once you get the job to build the skills not to have to stand for it in your next one.
Indeed. I've offered them before to people who were borderline - i.e. in the interview they didn't really shine but I wanted to give them a chance to redeem themselves. Goes either way really.
For a 2015 ML job I applied for:

    | We are wondering if you would like to attempt our code challenge (C/C++ or
    | Python). It is a Computer Vision problem which we think can be solved in
    | about 8 hours.
    
    I'm afraid I wouldn't, 8 hours is far too much for a interview
    problem.
    
    However, thanks for considering my application.
Alternatively, you could say..."for my time spent after the 1st hour, I will charge you $200/hour. Are we good to proceed"
My take on this what they were testing whether I could be pushed around, and I won't be. I'd not want to work at a place that plays those kind of mind-games.
You are, of course, correct. You still could have made $XXX/hr for the privilege to continue this charade and then reject their offer.
For someone skilled at doing ML, your hourly contract rate is about 60% too low.
There you go, the correction is made. :-)
Alternative response: “Sure, I charge $xxx per hour, payable in advance. Please deposit to account xxxx and you get the solution 24 later.”
I think it's important to remember that candidates should evaluating the viability of the company as a potential future employer. This seems like a reason to look elsewhere. They do not seem to value the candidate's time (assuming positive intent otherwise).

I'd skip the shenanigans and look elsewhere. I think "thanks, but no thanks" is a good response in this case.

But you confirmed to the company that it is okay, by completing the assignment. That's why companies assign this kind of homework - because you and thousands of others gladly do the work.
Ghosting whether it’s with jobs or women, always means one thing: You were not the top candidate.
Clearly, but that doesn't mean it's a nice way to treat people.
Maybe you can put it on github/write a blog about it and refer to it on your next job interview, they might hire you on the spot instead of sending you home with another assignment.
I don't think coding exercises are going away any time soon. There is something to be said to be able to solve a problem without having interviewers staring at you over video, and being able to use your preferred tools and language.

That being said, if you want to avoid having a large imbalance in risk/reward, I would suggest talking compensation before agreeing to submit yourself to a large time investment. At least that way you know why you are putting in the time investment that comes with take home assignments. There's nothing worse that putting in a significant effort into the interview process only to discover your compensation expectations would never be met.

They are much better than livecoding. I take 8 hour home assignment over 1 hour livecode torture.
At least with live-coding, the company is investing at least as many person-hours as you are -- in my experience 2x as much, since there are normally 2 people doing the evaluation.
Preparation for live-coding, leetcode style interviews takes way longer than any take home.

Kids on Blind are doing 200+ leetcode problems before starting their interview loops. How many hours is that?

You’re basically just choosing to forget about all the prep needed to ace a DP problem on the spot.

I find the leetcode problems fun. I’m not planning to interview for an SWE role until it’s time to “retire”, but I do several leetcode problems a week anyway.
It doesn't matter if you are like me, cannot perform at all in such environment: stress, sweaty palms, high heartrate and inability to write anything harder than hello world.
I am 50/50 with this. Livecoding is very hit and miss. If the answer comes into your head under the pressure, all good. If it doesn't you look incompetent. Usually it's 50/50 for me. So 2 hours of effort would likely get me pass. 8 hours of assignment should as well, but I have been rejected for ridiculously trivial reasons on take homes as well.
Same here, The take home assignments are easy for me, but I can't seem to manage to break through the live-code / leet-code sections with the guaranteed panic attacks.

Lucky for me, landed a role that had checked my github profile and answered some questions, which was sufficient to convince them. No waterboarding required :)

(comment deleted)
I've been in both sides, and what they did to you was horrible. Just last week I had a call with someone who did the take home assigment very badly, but I wanted to give him some feedback and showed him a better solution.

Nonetheless, I can't think of a better solution for this. Hiring someone is a big commitment (for both parts), so I want to be completely sure that I am hiring the right person. How do you that? How do you measure the quality of the other person in an area such as IT where it's so easy to lie about knowledge and experience?

Do pair-programming exercises. When the hiring company is investing a proportionate amount of their time in the process then I'm much more willing to participate.

It's much the same vein as that Canonical recruitment questionnaire that was doing the rounds a while ago - if you want to sit with me (virtually or IRL) and ask me questions, that's fine. If you want me to submit an essay that takes me hours to write then you're going to have to be offering me something I cannot possibly get elsewhere!

In the end it's about mutual respect.

The problem is that the pair programming exercises are not proof of a real work enviroment. Some of the problems or challenges at work won't get an answer in 2 o 3 minutes, sometimes you need to think more of them (in work, maybe one or two days, in the excercise, maybe 30 minutes).

Secondly, some candidates get very nervous/anxious when they have to answer code in an interview and can't show they real knowledge, etc. Pair programming hasn't worked for me because you get a lot of false negatives that are hard to distinguish from the real false.

To your first point - sure, but if you're not willing to invest the one-or-two-days in the exercise why should the candidate? If you're offering a top-tier salary, or something so technically exciting that it can't be resisted, then sure, you get to set the bar as high as they'll jump. Otherwise "Are we willing to invest this much" is a good rule of thumb for what you can reasonably expect of the candidate.

To your second point - any hiring exercise is going to be stressful for the candidate. False negatives are better than false positives (for the hiring party). If you're certain that this is going to cost you too many good candidates, then you're going to have to find some other way to demonstrate good faith up front - offer to pay them, offer to host them on your premises, something like that.

What I find fascinating is that we ended up here. Where doing 2+ hours of work to show 'you can do it'. When the reality is can you get along with them, I have found, is more more important.

The original fizz buzz type test was to weed out the fakers. It is something most people with a bit of skill can pull off. But as an industry we did what engineers do. We over think it. We blow it way out of the bounds of what it should do. We ended up with enterprise style fizz buzz testing as a filter. Honestly, at this point you really can not expect more. But can they bash out any code, can they read code (and understand it), are they cool with your 'culture'. There are 2 things you do not want on your team, a jerk (they can usually hide it in a few hours of interview), or someone who does not 'get it' (they can become help vampires). But I will take a dozen help vampires over a jerk every day of the week.

It is not like most people are going to 'hit the ground running'. In many places it takes a few weeks just to figure out who to talk to so you can check in code, or get your computer setup correctly. I have yet to come into a job and not have to wait on getting a computer (first day), then a few days of getting access to everything. Let alone beginning to comprehend the problem they are trying to solve.

Ask if they have any code that they would be willing to bring in and discuss.
I do a lot of interviews for my company. We do coding assignments OR let you bring some code. We just want to talk with you about code that you are very familiar with and confident to talk about.

Almost everyone chooses to do the small coding assignment, because they don't have code to bring.

If you get to talking about code (usually after a quick seeding of applications and a 30 minute chat), we will always talk about the code and also give feedback on our impression. So even if you don't make the cut, we hope to provide valuable feedback on why.
For personal project there will not be a TDD so coder not willing to share their existing codes. I rather showcase my skills in a new development than say already done one.
The company I work for now has a similar approach. I showed a personal project and eventually got an offer. It's not even a particularly great one, as I had not worked on it in a couple years.
Me too! I shared my live projects to them. Also I have couple of OSS project that are doing good in my domain so I got a job.
Yeah, in our case the point isn't really the code, but how you reason around it. How able are you to explain the flow of the code. And also reason about choices made.

There is a real treasure trove of things to talk about.

Questions like: - Why is it like Y? - What is good and bad about Y? - Why do you think X would be better? - Why did you end up doing Y instead of X? - How would you approach changing it to X?

Discussions like these on both a macro and micro level is very valuable.

Totally agree they are worse than DS&Algo(For those who consider them).
It's only fair that a company asking you to do this should pay you because they should only be doing it once they are far down the funnel and perhaps deciding whether you are go/no-go in which case, paying somebody a few hundred dollars is neither here or there.

If you are doing it because you don't believe someone's ability, you should either pay them or be honest and say you don't believe their experience, in which case it is up to you whether you want to do it for free or not.

I find the ghosting unforgiveable though, I can't understand somebody being in contact and you simply not replying even if to say "sorry, we aren't taking you". Are people so insecure, they don't know how to reply without sounding aggressive/opening themselves up to lawsuits or something?

> It's only fair that a company asking you to do this should pay you

I don't think it's a question of fairness at all. It's certainly inconvenient and the longer the test the more likely I am to dismiss it off hand but a couple hours is ok, more than that needs good justification. If a company is offering me a salary thats 90th percentile or above then I don't see the problem with having to jump through some (reasonable) hoops.

The ghosting part is unquestionably rude though and any such company should be named and shamed so that people can avoid them if they want.

> I will not do take home assignments for free if they take more than 1h of my time.

Even then, if something can be done in 1 hour, it can probably be done better in 2-3 hours or more. It takes time to show your best work. That's why many companies that do take-homes claim that their process takes only a couple of hours (but in reality it doesn't).

In the event that I’m responsible for assigning these sorts of things, my rough metric is to come up with a task that I, fully spun up on the task and already thinking about it, would be able to do in about 30 minutes.

I then time myself doing it.

I figure that means the applicant time commitment is under 2 hours, which seems not too bad.

You can always publish the assignment on your GitHub and use it for future roles, explaining that you won't be doing any future assignments but they are welcome to look at the previous one.
It’s odd to me how people complain so much about being asked to write code (whiteboard, take-home, leetcode puzzles) in order to land a coding job.

Is a prospective employer supposed to suss this out entirely through verbal questions?

I don't think people are complaining about writing code, I think they are complaining about the time involved with take homes (just having done a couple I can empathize with) and whiteboard codings "high stress nature".

I've also had interviews which just talk about work I've done before. Most industries only need that, and I'm coming around to those being the more valuable questions.

>Is a prospective employer supposed to suss this out entirely through verbal questions?

Yes

It's really not that hard to ask questions that evaluate a candidate's ability without devolving into trivia

Programming is merely logical thought converted into a terse form that a computer can execute

Ask how to solve a problem; ask what needs to be considered to solve it; ask what corner cases does the initial answer not cover; ask for something like a confidence interval on how likely you think errors will happen (and how you plan to respond to them); ask how the program needs to change when you convert it from a cgi-bin/ C program to Ruby or PHP or Go; ask how a solution looks different in any two of the languages the candidate knows/likes

Would you only hire a surgeon after they demonstrate an appendectomy? Would you hire a mechanic only after they demonstrate building a transmission from spare parts?

Have you ever heard of a restaurant having applicants mix drinks behind the bar for an hour to see if they're really as good as they claim to be? How many administrative offices have their applicants perform regular tasks on dummy data sets? And, the other way around: how often do applicants have their prospective team lead perform an hour of work for them, to see if the company is a decent match?

I think these tests are a good way to have people without previous experience or formal education prove themselves. If you have skills, but no credentials, no public Git[la|hu]b, and no experience, you can still prove yourself with one of these programming tests. However, once someone has a year or so of experience or has finished formal education, the decision should be based on their credentials and the interview, not some kind of demonstration.

(comment deleted)
As much as I don’t like unpaid take home tests, the restaurant industry does have unpaid tests for potential chefs: https://en.m.wikipedia.org/wiki/Stage_(cooking)
For cooks and chefs perhaps, but not for the entire workforce. Then again, the hospitality sector has a knack for abusing their workers, so I wouldn't be too surprised if they make waiters work for free as a "trial" as well.

It's still silly to expect to have to work for you for free. You can discuss technical topics (design experience, programming language preferences, etc.) without doing a whole exercise. Honestly, it's insulting that people will ask you to come in for an interview and basically tell you that they don't believe what you've put on your resume and start quizzing you to confirm that you know what you claim you know.

I think the issue is more to do with the unpaid aspect rather than the take-home.
It's odd to me that you have completely misunderstood what is the problem here. It's not the take home assignment that is the problem but the asymmetric relationship and toxic practices.

I invest 6h of my time as a highly paid engineer to do a home assignment and at best I receive a reply "sorry we found a candidate that's a better fit?".

That's what's unacceptable.

Have you considered that it took you 6hr and 2k loc is maybe precisely why they didn’t hire you and it, in fact, was a very successful candidate screening tool?
It has nothing to do with that. The numbers here are to illustrate the effort needed to solve the home assignment.
Up front, ghosting is not okay in general. But, a few counterpoints: It seems very unlikely they expected or wanted it to take you 6 hours. Possible, but certainly an outlier (and obviously bad actor) if so. If they expected you to spent 1.5-2 hours on it - a reasonable amount of time IMO - but when got it back you clearly spent an entire day working on it, that's enough to fail because you didn't follow the directions.

Additionally, software development seems to be the only area where the candidates get bent out of shape being expected to prove they know what they're doing. Take home tests are bad and have to be confined to an hour. Whiteboard interviews are bad and don't accurately model the day-to-day. Leetcode is bad because it's 10x harder than anything you'll work on. How exactly do we expect someone to get a sense of our skill at programming if we eschew every opportunity to... program for them to review? The exception might be extremely well-known people who have extensive public histories on GitHub or something similar, but by definition they're in the minority and 99.9% of companies don't need someone of that caliber.

I interviewed with a health tech startup and they had a good way to do it. We set up a time ahead of time when I'd be given access to the repo. 90 minutes later the interviewer was going to clone the repo and whatever was there was what he was going to look at. This was after a previous ~hour long interview where we did the "tell me about your experience" rigamarole that some developers seem to think should be enough to get them any job.

> “…software development seems to be the only area where the candidates get bent out of shape being expected to prove they know what they're doing.”

FYI—Graphic Designers have been “bent out of shape” over spec work in hiring for ages.

https://en.wikipedia.org/wiki/Speculative_work

LeetCode is not spec work.
Those aren't "counterpoints", they're assumptions.
> software development seems to be the only area where the candidates get bent out of shape being expected to prove they know what they're doing

At least in my experience, people in most fields aren't expected to do free work to show they know what they're doing. In general, past jobs, references, and portfolios tend to be used.

> If they expected you to spent 1.5-2 hours on it - a reasonable amount of time IMO - but when got it back you clearly spent an entire day working on it, that's enough to fail because you didn't follow the directions.

Yeah, let's fail someone who cares about showing their best self for an interview and takes pride in the craftsmanship of their code because we asked them to spend no time on it and probably get something that doesn't even work.

Not to mention there are probably other candidates that are taking just as long but not mentioning how long it takes them when turning it in, so the employer might start having an unreasonable expectation of the quality of work that can be done in 1.5-2 hours based on other applicants, and if you actually do follow instructions and only put that time in, you're likely going to be compared unfavorably against those other applicants.

Only way to properly enforce that limited time is to bring someone in to take a test in person, which is what my last company did (I barely passed and watched hundreds of people get brought in and not pass in the years since...in fact I saw only a handful of people pass that stupid test, part of the reason we never hired anyone, even though we needed to).

Part of evaluating candidates includes, on some level, how quickly they complete work. If I can submit work of quality Q in 2 hours, and you can submit work of quality 1.5Q in 2 hours, you're at a distinct disadvantage if I instead spend an entire day and submit something of 2Q, whether it's couched in "taking pride in craftsmanship" or whatever else. Also, perhaps a bit more reductively, if you're told to spend up to 2 hours on something and you spend 6, that says something about your ability or desire to follow directions.

Your last point isn't true at all, it doesn't need to be in person it just needs to be coordinated. I mention one real-life example of this that worked out very well at the end of the comment you're replying to.

(comment deleted)