DEV Community

Anton Sizikov
Anton Sizikov

Posted on

Should I do that test assignment?

Test assignments aren't really a good thing. In fact, it's quite the opposite. It might be one of the worst things that have happened to the hiring process.

The hiring process, in general, is quite broken in many senses. It's not really clear how to hire an engineer. New ways of testing our skills come and go. It shows us that it's nearly impossible to check interviewee skills in 30-90 minutes time frame.

I'm not going to talk about different puzzlers or tricky questions about the compiler, nor I'm going to cover any stress-interview practices here. Today is all about test assignments.

From a company's point of view

Hiring is a very expensive process and it's not very reliable either. Hours of interviews ain't free at all:

  • An hour of one or two engineers conducting an interview
  • 20-30 minutes to prepare before, and to compose results after an interview
  • Recruiter's time

If you sum it up, you'll end up with a good number. And it's fair to expect the business to cut the costs. There are many ways to make it cheaper: phone screening and tests are very typical in the industry.

And there is one way which outstands the others. An assignment which is given to the candidate. Typically it's a piece of rather boring code to write with a possible trick in it. Sometimes you'd have to do it even before a phone screening phase as an extra filter. And most of the time you take it before an on-site round.

Often it's assumed that you would spend (should I say waste?) a few hours to finish up the assignment. That's an estimate made by the hiring manager or an engineer, and it's based on the assumption that you are familiar with every tech and every aspect of the task.

How long does it take to check your code? Well, it's about 15-20 minutes. Doesn't look fair, right?

That's correct. A company is trying to put the expenses on your name. They don't know how to evaluate your skills and your experience during a short interview, nor they know how to do that by phone, hence the need for you to spend hours in order to convince them simply to talk.

By the way, a person whose job is to evaluate your task is not going to give it too much effort. They have enough on their plate and they don't really like switching their attention. Imagine looking at the same code over an over again. Often they would quickly go through a checklist.

A candidate's point of view

Unless you're aiming for a top tech company like Google, Amazon or Facebook (they don't really give test assignments out, btw), you will not be dying to get a particular job. A vast majority of companies out there are doing similar things: storing the form's input in a DB. Well, sort of, but you know what I mean.

For the candidate test assignments are not very useful. On one hand, often they are similar to each other, on the other hand, they are hard to reuse. Every company is trying to make it a bit special. And you have to start a new project, configure all the parts, pick an ORM or set up a linter, over and over again.

Speaking of... How often do you start a new project at work? Like from the very beginning. You know, a git init and File->New Project. I've done so a couple dozen times doing various test assignments, and handfull times at work. Most of the time you either join an existing project or start one and keep working with it for a long period. So, honestly, it doesn't look like a relevant skill to me.

How much does your time cost?

Think about it. How many man-hours do you have on an overage day? Well, if you're young and single, you might even have all 24 of them. You can't keep it up this way for a long time, but you can make it for a day or two.
However, it's a different story when you're older or have a family. You have like what? 12-14 hours a day. The remaining part of the day you do your chores and sleep.

You have to spend from eight to ten hours at work and commuting. That leaves you about four spare hours to use. So a hiring manager is going to take those four priceless hours. They want you to spend all your available resources so that they can save some time on their side.

How many resources does a company have? There are tens of engineers, managers and HR specialists there. If we speak about a small to middle size company. So they have hundreds of man-hours at their disposal. An extra 20-40 minutes to evaluate a candidate doesn't seem to be too crucial.

And that is an obvious asymmetry in the process. You have less time than the company, but you have to spend more resources upfront.

I don't really know what should we do about it. It's up to each individual. If you feel confident if you value your time and you're applying to an overage company you may refuse taking an assignment home. There are many ways to do so, you may ask them to pay for your time. You may offer them to take a look at your portfolio first. Show them your blog, your public projects if you have any. Let them download an app you built and try it first. Whatever works for you.

However, you might not be in a position to refuse. You can simply be running out of money or you might be talking to a dream job and you don't want to ruin it over the pride. I understand that.

Though I recommend you to publish the assignment somewhere. Let it be GitHub if we talk about code. Or Dribble or any other place which is popular among specialist in your field. Just be clear about it upfront: you are going to publish it because you own the result of your work. Unless they want to buy it out.

Hopefully one day you'll be offered with a similar assignment. Just send them a link back. It might work and could probably save you some time.

It can't be that bad, can it?

Well... Let's see.
Do you remember that time when you've spend many hours, build a perfect thing, neat and polished? And you were hired right after that with no questions asked whatsoever. Ugh, that was just a dream.

Unfortunately, often a perfect result will simply be a reason to meet you in person. And that's where an actual interview will take its place. They would ask you some questions to make sure that you are the author. Sometimes it feels like an unnecessary step to go through. They could have given you a simple 15-20 minutes test over the phone.

Imagine you found that you don't like the office, the team or anything else about the company. You know, there are things with you only can find out during a face-to-face phase. And in order to get there, you've spent hours working on that test assignment. What a waste...

One more reason in favor of test assignments. They should equalize candidates who have time for a public activity like blogging or OSS contributions and people with family or those who cannot publish any code due to their work contract limitations. Honestly, I don't see how that helps. If you have no time to work on your pet project why would you have time to work on a test assignment?

What do you think about it? Do you often see a take-home assignment given before the actual on-site interview?

This text was originally published in Russian in my blog.

Top comments (17)

simoroshka profile image
Anna Simoroshka • Edited

I took test assignments when I was looking for a junior position. It felt fare, since I hadn't have much on my CV or GitHub and a test assignment was a way for me to show what I'm worth. And sometimes I could judge the requirements and expectations for the position much better than from the job posting. So, win-win.

rrampage profile image
Raunak Ramakrishnan

It varies a lot depending on the company. Many companies give an assignment requiring 5-10 hours of work and then never get back / or give more detailed feedback than "Sorry, not what we are looking for" or they reject anything that does not match a very specific pattern.

Ideally, the hiring company should do a 15-20 min pairing with the applicant to discuss what exactly they are looking for and what could be improved in the applicant's code.

asizikov profile image
Anton Sizikov

Exactly my point!

Thread Thread
mykolabashlakovdcs profile image
Mykola Bashlakov

I fully appreciate the arguments outlined in this article, Anton - and in your comment, Raunak.

Here is an idea I would like to get feedback on. To me, it is vital to hire high quality engineers who will be able to fulfill projects and who I can count on - and I do think it is a good idea to test people for their abilities in a live situation where they are actually working in a professional capacity - not only to see the skills but also the work ethic of the candidate (most of my employees are remote so good work ethic is vital).

I have a third party professional code review company that provides me with test assignments and do a professional review of each candidate's test assignment work. I pay them considerably for each candidate review, and they in return they provide me with a 4 page detailed report on their work that I then share with the candidate - and upon which I make a decision on whether to hire the candidate and whether to pay him/her the salary asked.

These assignments are mini-projects essentially, and will require 1-3 days (depending on level) to complete - and I understand that for most candidates a small company asking them to do it might seem difficult.

Here is what I'm thinking. Why not offer them to do a test task, and provided that the task is completed on time (say within a week) and that the product delivered hits all the bullet-point requirements of the test task to a functioning quality, pay on completion a 3 day rate (pro-rated from salary asked figure).

What do you think of the idea?

Thread Thread
asizikov profile image
Anton Sizikov

Hi Mykola,

This is an interesting approach indeed. I'm sorry, but I've never encountered such paid assignments neither as a candidate nor as a hiring manager/engineer.

The only opinion I have is purely assumption-based.

As long as you pay for it anyway (directly to the candidate or indirectly to the third party), it makes no difference for you.

However, consider an extra price of reviewing the assignment (if you're not going to pay, you'll have to justify it in a way that it's super clear). Also, you'll have to deal with extra paperwork both to sign the 'contract' and to transfer money to the individual (in some cases you could avoid that by using Amazon gift cards or something similar). Keep in mind that they might not have a legal entity, and it might make their tax paperwork more complicated.

I'm thinking that if you're ready to go down this path, why not making an extra step and offering people a short-term trial contract to work on the specific part of the project? It depends on the business you run and a type of project/data, of course.

codemouse92 profile image
Jason C. McDonald • Edited

As someone with plenty of experience on both sides of the table, I can't see this article as anything but misguided.

I indeed use a single (and original) take-home coding challenge instead of whiteboarding during an interview. Let's look at it this way...

  • If you ever come across an interview process for a coding position where the candidates never need to code as part of the hiring

  • A take-home coding challenge has less pressure attached. Would you rather do in 20 minutes, with a bunch of interviewers staring at you, or would you rather do it at your own pace, in your own environment, where you can give it your best?

  • Would you rather work on yet another version of "fizz buzz" during the interview, or tackle something legitimately interesting and unique that (seriously, according to all my candidates) takes no more than an hour or two?

Actual field experience has proven: take-home coding challenges are one of the best, fairest, and most objective means of evaluating the technical skills of a candidate. Everyone can talk the talk, but you must have a way of evaluating who can actually do the work.

(Yes, we have simple-but-effective ways of making sure the person really wrote the code.)

Side note: one also research jobs, applies for jobs, and interviews for jobs on their own time. It isn't unfair for one to do a coding challenge on one's own time too. If someone really doesn't want to bother, then that's fine - there are plenty of people who care enough about the position enough to use a couple hours of their Minecraft time to complete a coding challenge. (For cryin' out loud, we have over two dozen sites where people complete coding challenges for FUN.)

I see a lot of articles complaining about the hiring process, but honestly, until one has actually interviewed dozens of candidates, made a few mistakes in the process, and seen how one's hiring choices panned out, one doesn't have much basis to make as definitive statements as found in many articles like this.

Actually, if we were to take all the "complaining about the hiring process" articles at face value, we'd be hiring the first Joe Bloggs who applied for the position, and giving gift cards as consolation prizes to everyone else who didn't get the job (seriously, that WAS one article's suggestion).

The hiring system as a whole can certainly be improved, but a lot of the unpleasantness is due to our having to screen for people who talk big, but don't have the skills to match. They show up in every batch of candidates, for every job posted, every time. (Yes, there are people with no coding skills whatsoever who apply for senior development positions.)

asizikov profile image
Anton Sizikov

Same thing here, I've been an interviewee and an invervieer many times in the past.
As much as I like seeing a sample of candidate's code, I disagree that this is a fair thing to do. It's ok to give an assignment on a later step in the process, but it's never a good option to give it as an initial filter.

codemouse92 profile image
Jason C. McDonald • Edited

Well, we may just be coming from different backgrounds, then. I've learned the hard way, it is a critical part of the interview process. Granted, this is after I phone interview them, but I will never hire without it. In fact, no successful hiring manager I've ever known will; the ones that skip it invariably wind up with extensive mishires.

chrisjeon profile image
Chris Jeon

I have to call bullshit on this.

1) I worked at places where they did not have a coding challenge, live nor take home. Colleagues were competent and it was a great job.

2) I (and many others) would rather do it in 20 minutes with interviewers staring at me, rather than spend hours of my personal time working on a throw away project for free. This way, even if I fail the interview, I'm only out 20 minutes vs hours. I'd rather go to church service than do that.

3) I like working on interesting things, but I don't like working for free. This argument is the same as saying developers should always be coding, even in their free time, for the passion of it. And that's what take home assignments are. It's a way to offload the expense of hiring onto the candidate. It's no different than unpaid labor.

If you can't weed out majority of unqualified candidates (yes, some will get through, but some will also get through even if you have a take home test) by just having a chat about software development with them, then the problem is with the employer, not the interviewee.

codemouse92 profile image
Jason C. McDonald • Edited

I'll have to counter your points, unfortunately.

1) Every company will wind up with some decent programmers, no matter what hiring processes they have. That doesn't mean that doesn't matter. The perspective of one employee within the scope of his team doesn't correlate with the overall reality in the development field. It doesn't make your experience invalid, but your experience alone does not invalidate the broader scope. Chances are, you seldom encounter the mis-hires. (And yes, there are many developers I've spoken with who wind up working with people in development positions who actually can't code.)

2) And hiring managers would rather not have to waste 20 minutes taking to yet another someone who can't code to save their life. You'd be amazed at just how many hundreds of hours get wasted on that.

3) No one likes working for free, but you're not being asked to. A coding challenge yields no direct profits for the company. This has nothing to do with the errant "developers should always be coding" philosophy.

4) Your statement about how a decent hiring manager should be capable of weeding out candidates by "just having a chat" shows you have clearly never done hiring in any meaningful capacity. Any job looks easy to the one who isn't doing it.

Maybe you still don't agree, but I'm not just talking from personal experience; I've spoken to many hiring managers and software developers about this topic for years, and these have been common threads.

earthtone0ne profile image

I'm torn on this. As a junior, unemployed, I liked take-home assignments. I had the time, and it was an opportunity to show my skills. However, when I was applying while working, I had exactly the problem you described. Three coding challenges in a month, on top of my regular responsibilities and other job hunting tasks, nearly burned me out.

I still prefer coding challenges to timed tests or algorithm problems (especially for a front-end role - it makes me question the company's judgment when their test has so little relation to the work). But it was hard enough for me to make time, and many people have a lot more hurdles than me.

No single solution works for everyone, so I think the only good answer is for a company to offer an option. Those with more experience or a great portfolio shouldn't have to build yet another to-do list app when they already can demonstrate their value in other ways. But that's harder to quantify into metrics, and opens the process up to more unconscious bias. It's hard to do it well!

asizikov profile image
Anton Sizikov

Totally agree, it's all about balance. However, I still believe that nobody should receive a take-home assignment at the beginning of the process.
This is not a fair initial filter, but it might be ok when both sides are ready to invest extra time.

Sloan, the sloth mascot
Comment deleted
xowap profile image

You are making a lot of assumptions here... Really a lot.

At some point the company needs to know what you're worth and you can't just know that by talking to the person for one hour.

To me assignments are useful when the process is well advanced and that you need to lift a doubt.

asizikov profile image
Anton Sizikov

I don't think I'm assuming too much here.
If they need to see some code it's ok. I prefer to see the candidate's code too. However, I think it's not fair to ask a candidate to invest their time before both sides are sure that they are interested in each other.

eddie profile image
Eddie • Edited

What do you do when given an assignment with a skill you dont have. Note: You made it clear in the initial interview call you have no practical knowledge of the skill and also it was not in your resume but they go ahead to give you an assignment having 50% of the skill you dont have and was given 6-8 hours to finish. Do you do the interview assignment or not?

asizikov profile image
Anton Sizikov

Hi Eddie.
Good question, thanks!

When you're missing skill to complete the assignment and you made it clear for the company then I think what they are looking for is for you to demonstrate that you're capable of learning that skill on your own in a short time.

6-8 hours deadline is very tough in my opinion, but what can you do about it, eh? Those are the rules of the game, you have to follow them I'm afraid.

Would I do that? If I wanted the job I would do my best to complete it. Even if I missed a deadline I'll send it back anyway. I would tell them, that I had to learn a few things first of course. If I were an interviewer I'd respect that attitude.

Btw, if you learned something new while working on the assignment, it's not a bad assignment after all. It's better than simply wasting your time on making yet another standard task, right?

Some comments may only be visible to logged-in visitors. Sign in to view all comments.