66

In the context of hiring for software development jobs, I have found that it has become common for companies to assign "programming tests" which tend to be increasingly time-consuming.

For example, I have been asked to write code that ended up being over a thousand lines and took several days to complete, just to get an interview. The interviewers were impressed it only took me two days.

Is there a polite way to refuse to do these tasks, or is it the case that I should choose between jumping through their hoops versus looking elsewhere?

11 Answers 11

67

You are, of course, perfectly free to decline to do such a test. But that means that the company is also perfectly free to decline to consider you any further. Realistically, if you want the job, you probably need to go through whatever interview process the company has set up.

If you have a particularly rare skill set or a particularly strong resume, you could certainly ask the company whether they could waive a particular step. For example, if you've written a book on network programming in Java, it probably doesn't make sense for the company to ask you to build a chat client as part of the application process. If you have a GitHub repository or a StackOverflow profile that has examples of code that demonstrates whatever the test is attempting to measure, it's probably reasonable to mention these things and ask if they could be considered instead of the test. But if you're just a run-of-the-mill developer, it's unlikely that the company is going to change the way they're doing interviews just for you.

  • 7
    Interesting point on referencing outside work. One could similarly point to projects in a GitHub repository as similar social proof. – jmort253 Aug 23 '14 at 2:49
  • 1
    I actually like the use of outside references to help bypass the application assignments. As someone who hires developers when we have a senior dev spot we usually have a simple assignment for them. The catch is though the code itself isn't as important to us as how that code came to be. So if someone share's their repo and it's elegant code, but lacks the supporting documentation to see how it got there we'd still give them the assignment. But on the otherhand if they have JIRA, TFS, or similar with examples of notes, considerations, concerns, etc. SOLD! you just gave yourself a leg up! – RualStorge Jan 2 '15 at 21:51
32

We (my co-workers and I) ask people to write some code, or, at least, show us some code that they have written. Why? Because we've hired too many people who, when they actually showed up, lacked the capacity to do independent work. (It's also possible that they simply lied and padded their resumes, but I'd prefer to give them the benefit of the doubt; they really did 'contribute' to the things they described in interviews, but they were somehow never called upon to take the initiative and see something through.)

Typically, we would expect a task like this to take about a day.

I know that many of my peers in the CTO business feel the same way. I know that a number of large, famous, companies, do the same, or more so.

No one I know has ever 'gotten free work' this way; for one thing, the candidate retains copyright, and could sue our pants off. Of course, I am sure that sleazy people are out there; but, legally, it's not a work for hire, or any other sort of contract, without 'consideration', so anything you do for free belongs to you.

So, I'd strongly advise you not to say 'no', but rather to consider some combination of reconsidering the task or asking more questions about it. Saying no without any discussion is pretty much walking away from the opportunity; you don't need help from anyone else to do that.

If the task seems unreasonably large, you have to start by considering the possibility that the people who assigned it don't think it's such a big job. Over-engineering a task will not make you an attractive candidate. Ask them how long they expect it to take. Ask them how far down they want you to get into the details. Don't just dig in and spend a week.

It's also possible, sadly, that the scale of the task as you see it is telling you something about your fit for the job. They may be looking for a cowboy who will shoot something from the hip, while you might be a super-skillful watchmaker. Again, best to talk to them; why spend two days in a process of proving yourself unqualified?

Finally, I can't emphasize enough the value of having a body of work on github; we can read the code, run the code, and even examine the commit history if we have any doubt about who wrote it. If someone really does expect you to do a big audition, having a pre-existing audition piece gives you a reasonable way to avoid spending all that time. If they won't take it, maybe they are unreasonable people you don't want to work for?

  • 1
    *comments removed* Remember what comments are for. For extended discussions, Get a Room (a chat room). – enderland Aug 26 '14 at 18:54
  • 3
    The most important part of this answer is to talk to them before doing any significant amount of work. This should be seen as part of the test. – emory Aug 26 '14 at 23:59
20

When I get asked to do a several hour interview project I immediately respond with

I'd be happy to do that project for you as an independent contractor!

Some companies are likely using this type of interview questions to get free work, as documented in Ask the Head Hunter. I offer my services as a contractor so on the off chance they are a legitimate company with this interview practice there is a path forward.

If they are asking you to go to extraordinary lengths to prove you're a good employee, then they should be willing to prove they're are a good employer by paying you for the work that you do for them.

Realize the company probably never planned on hiring you or anyone else in the first place. By offering to do the work on a contract basis, you've at least given them a way to show they are serious about hiring you.

  • 1
    +1, its important to always remember employment is a two-way street. Its not a moral obligation to supplicate yourself to a potential employer. – GrandmasterB Nov 25 '14 at 20:04
15

Q. Why don't you just agree with their demands? A. Because it takes several days of your precious time, and all you get out of it is the chance for an interview.

If a company seriously expects you to invest say four working days just to get an interview, then this must be matched by an equal commitment by the company. Like paying you four work days. Normally, if you go through say an eight hour interview, there is also one (or more) interviewers investing eight hours of their valuable time, so the investments are matched and everything is fair, but not if you are supposed to work for several days and they do nothing in return.

The definition of "professional" is to do work for money, that is what distinguishes you from an amateur. So the professional thing to do is not to refuse the time-consuming task, but to ask them to match your investment. If the company doesn't understand that, then they failed your interview process.

(Of course it might be the case that they think it is a four hour task, and you think it is a four day task. In which case either there is a huge misunderstanding about the scope of the task, which you should check first, or one of you is seriously incompetent and the interview process is over).

5

I recommend that you schedule time to complete the programming test and then stick to the scheduled time. Stub out big chunks of the test to reduce your workload. Turn in whatever you have completed and forget about it. Your goal is not to provide a working program for free but to convince them it is worthwhile to proceed.

  • "not to provide a working program for free" tell that to the person reviewing that code. – jwenting Aug 26 '14 at 13:49
  • 3
    @jwenting It seems alarming that the OP is spending multiple days on a test. Either the test is scoped for multiple days (red flag) or the test is scoped more appropriately and there is a skill mismatch. Either way, the OP should carefully budget time and this may mean submitting a deficient test. Saving time on this test means OP can spend more time on other opportunities that may be more appropriate. – emory Aug 26 '14 at 23:13
  • 1
    I've had one company give me a test that would take days to implement properly. The proper implementation would be a complete CRM and resource scheduling system. Told them as much, and that I wasn't going to do that for a "programming test" especially with a fulltime job I'm working AND the private problems I was going through (my mom had terminal cancer, she's since died from that). Never heard from them again. – jwenting Aug 27 '14 at 7:13
  • 3
    @jwenting: they almost certainly believed (rightly or wrongly) that something quicker would have satisfied the requirements. Doesn't matter whether they're right or you are, if your solution can't be completed in their time estimate (and therefore for real projects: to their budget) then you're far better off out of that job and so the test worked perfectly for both sides. It would be interesting to know how long the person who got the job spent on the task, but of course we never will. – Steve Jessop Jan 3 '15 at 5:17
5

Is there a polite way to refuse to do these tasks, or is it the case that I should choose between jumping through their hoops versus looking elsewhere?

There certainly are polite ways to refuse any task. Basically, you are saying "Sorry, I choose not to perform that task". You could politely ask if there's an alternate way to give them the information they need.

This applies whether it's multiple/lengthy interviews, providing background information, or performing sample work (in this case, a "programming test"). You can choose not to comply with whatever is being asked of you.

But of course, you will most likely be choosing to look elsewhere. Companies that require such tasks aren't often making it optional. Unless you have already impressed them sufficiently with your resume, interview skills, or references, they most likely will not waive their required tasks.

Fair or unfair, pleasant or unpleasant, companies are free to set up these sorts of tasks/obstacles. They might feel that it's an indication of skill, or an indication of desire, or they might just wish to weed out the less serious candidates. It's their game, and thus their rules. Still, candidates are always free to refuse to participate, and thus likely take themselves out of the running.

You need to decide if the prospect of the job they are offering is worth the extended efforts they are requiring. If not, just decline and move on.

5

Of course you can decline such a lengthy task - I'd point out that my free time is precious to me and that I wouldn't be continuing the interview process. Now, in my case, I have many years of successful projects to back me up and find that i don't get asked to do these tests anyway (I still get asked to do simply coding tests, and design work however, but these are always in context of an interview, not external to it).

I do find that it is more popular to ask candidates to jump through hoops nowadays (and companies say they have difficulty hiring qualified candidates! haha, wonder why) - the last place I worked made the junior devs do a freaking powerpoint presentation to get the promotion they rightfully deserved (ie you already know who deserves the promotion from their work, so why go through the pain of such tests)

Often these tests are a means to help the interviewer feel self-important, they don't have the skills to determine if someone can code or not if they are asking you to do this kind of thing. I find (from many years of interviewing) that you can easily tell if someone is exaggerating their skills by just talking with them, asking questions about their work (and avoiding questions like the ones you see on SO).

So - ultimately its up to you if you want to do these tests. If you're starting out in your career, then your only choice is lay their game, or find somewhere else. If you find their interview tests too intrusive, feel free to ace it, work there just long enough to get some experience, and then move on. If their culture is one that doesn't respect you in interview, there's a fair chance it won't respect you as a professional during your employment either.

4

"I apologize, but I don't think this task is appropriate due to:

  • I don't want to waste too much time
  • My skill set doesn't work well for this type of task
  • This task doesn't match the duties for the position I am applying for

, however I would be willing to perform a similar task that better matches the criteria. Would that work for you?"

Depending on the company, refusing an interview task is very likely the equivalent of refusing the interview. From the hiring perspective, I wouldn't want to hire someone who cannot put forth the effort to perform a given task. How can I then expect that person to perform the tasks that I will later assign them, especially as they get more difficult and complex?

It's also going to depend on the position that you're applying for. A 25k/yr call center position isn't worth more than a couple of hours because there exists hundreds of such positions. On the flip side there may be a high-paying developer position with particularly high requirements and many applicants. Here it makes sense to have more difficult tasks. Those applicants that really want the high paying job are more likely to put forth the effort.

There may be legitimate cases where, for one reason or another, you feel like the task set forth to you just won't work out. Don't be afraid to point these out, ask for an alternative task, or perhaps propose changes to the existing task. However just know that in many cases:

if (Applicant.task == Completed)
{
    goto NextStep;
} else {
    delete Applicant;
}
  • 4
    "How can I then expect that person to perform the tasks that I will later assign them" -- you'll pay them. – Steve Jessop Jan 3 '15 at 5:11
4

I think the hiring of less than satisfactory programmers is more of an indicator that the interviewer is a poor one than anything else. I've interviewed lots of folks and feel I'm more than capable of assessing a persons ability based upon their resume, an interview, references and work that they have done in the past.

I do not believe coding tests accurately reflect a persons ability. There are plenty of extremely skilled programmers who flame out in the quizzing cage. Expecting a person who is used to a computer connected to the internet, a solitary, silent, private area to perform well using another medium or environment is just asking for trouble.

The best way to assess someone is to look at what they've done and if that looks good, try them out for size. I am not the only one who feels this way, there are many who argue the same.

https://gettingreal.37signals.com/ch08_Kick_the_Tires.php

According to the author of "Getting Real", bring the person on to the team and "try them out for size" by giving them small tasks there as a paid employee or contractor.

Whenever someone asks me to complete a task which I feel is too onerous as part of the interview process, I take it as an indicator that they will be overly demanding in other ways as well and run in the other direction. In other words, I will professionally decline the job offer.

  • this is totally irrelevant to the question asked. It reads like a spamversitesment more than anything. What is your relationship with this resource? – gnat Jan 2 '15 at 20:33
  • 2
    The point is about what the best way is to assess programming skills is, and that it is not testing. Testing is the lazy man's way out. The point is not about fairness. You can down vote me to hell, but I am certain that I am correct. – ssolid Jan 2 '15 at 21:10
  • 1
    @ssolid I think what the commenters are trying to say is that the link you referenced and your answer seem to say different things. The asker says he received a small programming assignment to write, and the article you reference also suggests doing the same, but you're saying this is bad. What might be helpful is if you can clarify the difference between a programming test and the type of exercise the asker has received. This may help folks better understand your point. Hope this helps. – jmort253 Jan 2 '15 at 21:49
  • 1
    As an aside, you should also include how one might professionally decline a programming test or programming assignment, as that is part of the question, and our site's goal is to provide answers to the questions. Take our site's tour to learn more. Cheers. – jmort253 Jan 2 '15 at 21:50
  • 1
    @jmort253 It is not suggested that a small programming assignment be given that the person does on their own and for free. What is meant to be suggested is that you actually bring the person on to the team and "try them out for size" by giving them small tasks there. The link really isn't clear in that regard. Since I've read the author's book I assumed it was obvious on the link (and it isn't). – ssolid Jan 2 '15 at 23:03
1

Usually the best way to politely decline is to ask if something else is a suitable alternative. For instance, I've learned that a linkedIn profile or even a hand crafted CV detailing projects is NOT an appropriate substitute for a code assignment. But a github account is a good use.

A github account should have multiple code samples present. The key here is to make sure they are organized, clean and commented with a github README. I use the README section as a small case-study of the project that they can read through to see a description, the challenges, and particularly interesting technologies used. Essentially a detailed walk through. github may be challenging though, as you can't always post employer code there freely, it may be difficult to share group-written code effectively, and personal projects may not be extensive enough to convey the scope of your skills. Finally, a curated github experience is probably more valuable than a completely chaotic commit history with no real narrative about you.

The caveat is that employers interviewing multiple candidates with a code assignment are likely to ignore the ones that choose not to do it. Or it would be difficult to compare other completed assignments with your random github code.

These code tests are part of the process, but having to do multiple for multiple simultaneous interview tracks that may or may not go anywhere is tedious. As is if you have 10+ years of experience and are being asked to write what isn't more than a Hello World program with some bells and whistles.

0

Personally, I'd never do such a time-consuming assignment without previous interview. I'd have to make sure this is the serious interview process and the company is willing to invest time to hire me, and not simply get some code for free. And of course, they would have to offer the salary high above average to make it interesting...

How to decline... I'd simply say I'm not able to make such an effort in such early phase of the interview process because I have too much offers to consider, or simply don't have enough time to spend in the moment (side project if I don't have job, or the job itself when I have it).

The company should be also realistic with their expectations. I suppose they wouldn't send me 2 days salary to let me check how it is being paid by them before I decide if I'm interested.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.