41

This is slightly related to the existing question Is there a professional way to refuse a time-consuming programming task given as a test for a job?.

Background

I have about 85% of a CS degree, 3–4 years of professional experience, and I have been a passionate hobbyist for as long as I remember. What I lack in professional and educational experience, I make up for many times over with my spare time tinkering. I know this, so I am applying to jobs where I may, on paper, look under-qualified, but which match my actual level of experience.

Issue

I have a bad feeling about a place I'm interviewing right now. The moment the CTO (who has been my point of contact) walked into the room, he started presenting their technical architecture and speaking as if I were already a part of their team. He seems overly ecstatic about my résumé and wants to "snatch me up before anyone else does".

This may just be his personality, of course, but it seems odd to me that a prospective employer would be so positive about a candidate who, for all they know, could be a total dud. To me, their willingness to hire a potential dud says they don't actually care that much about their developers.

Programming test

Then I got the programming test, which seemed to further support this fear of mine: the CTO had said during the interview that it should take at most a few hours, but the task is actually rather substantial. The way I read it, if the test description arrived as a specification from one of their customers, they would not be content with budgeting just a few hours for one developer to complete the project. With the most generous interpretation, we're talking at least two days of work.

And it's practically a web frontend task, while I applied for a more databasey backend position (which they acknowledged by saying that "as you see, when you are done with the frontend, this can be extended with quite an advanced backend"). Granted, one of the things that separate me from the pack is my versatility, and how I have experience doing also frontendy stuff if I need to, but it's not what I primarily want to do.

Question

Unless I have misunderstood something, I can only see this going two ways:

  1. They want to test my ability to crank out shitty code fast, because that's what they'll need me to do later on. Not a place I want to work for.

  2. They want to test my willingness to do a bunch of work for free, because that's what they'll need me to do later on. Also not a place I want to work for.

Does my thinking make sense, or am I being obviously paranoid?

I have asked them to specify more about the position they think I am a good match for (including things such as salary) before I commit a bunch of hours to the test, so I'll update this with more information as it arrives.

Edit

Oh, and I forgot. More alarm bells went off in my head when I heard about how important it is that code written for them is correct – but when I asked about testing, code review and such, it appeared they have no such workflows in place.

closed as off-topic by paparazzo, Dukeling, gnat, DarkCygnus, OldPadawan Jun 19 '18 at 10:39

This question appears to be off-topic. The users who voted to close gave this specific reason:

If this question can be reworded to fit the rules in the help center, please edit the question.

  • 2
    Comments are not for extended discussion; this conversation has been moved to chat. – Jane S Jun 18 '18 at 23:12
  • @kqr just commenting about the size of the task. In addition to Brandon's answer I'd add that maybe to discern what's important for the role you're applying for is part of the test. If you're applying for a backend only (or mostly) position then you can keep frontend at minimum (and motivate your decision). MAYBE backend + minimal frontend is small enough to be completed in less than one day. About the other alarm bells, well...interviews are to know each other but think: THAT may be the VALUE YOU BRING to the company. – Adriano Repetti Jun 19 '18 at 10:55
  • Side note: "What I lack in professional [...] I make up for many times over with my spare time tinkering. I know this, so I am applying to jobs [...] but which match my actual level of experience.". I'm sorry to say this but there isn't anything like an equivalent level of professional experience. You have it or not but you don't make it up. You can have the knowledge (and I suppose you do) but the (professional) experience is exactly that: EXPERIENCE (and it comes from all the political, maintenance, customer-facing, trade-off, prioritising situations you LIVE in a professional env) – Adriano Repetti Jun 19 '18 at 10:59
  • Sucker tests, tricks, and flat out exploiting candidates for free labor are all unfortunately things that really happen. If it makes you feel better, at least you didn't get tricked into providing free catering along with 19 other people. – BSMP Jun 19 '18 at 15:57
14

Been on the other side of the table a few times. When giving candidates coding challenges, there is sometimes more to it than just writing code. When a candidate writes code at my request, I pay careful attention to how they handle the situation. Do they ask questions? Can they accept critique? I once had a candidate argue with me. The worst candidates insist their work is perfect and argue. The best candidates do decent work and participate in an open discussion about how they could improve it or handle different error cases.

What I see as a possibility in this exercise you've been given is an unrealistic deadline. He's a CTO. CTO's want everything. They want it done perfectly, they want it done now, and they want it to cost nothing. If you were to get the job and be reporting to the CTO, he needs a candidate who can push back and give him realistic expectations. He is quite possibly testing your character.

In my previous role, I once had to face a manager who set unclear expectations, unreasonable deadlines, and would criticize the team for doing good work. I stood up and defended the team and explained to him how we could communicate better to be on the same page and I explained how hard the team worked.

Turns out, he was leading the charge on forming a new development organization and this project was a test to find who should be part of the new organization and who should not. I made the cut because I pushed back, gave honest information to management, stood up for what is right, and the team did good work.

  • 10
    Those last two paragraphs are quite startling. – Wildcard Jun 18 '18 at 20:34
  • 17
    @Wildcard And not in a good way. I'm not sure I'd want to work for someone who mistreats his team/reports/employees as part of some "test". – iamnotmaynard Jun 18 '18 at 20:37
  • 5
    Well, that manager eventually became my direct manager and he was the best manager I ever had and did more for my growth than anyone. After those disagreements, we got along great. Morale of the story: Look at both sides of a story – Brandon Jun 18 '18 at 20:49
  • @Brandon "I pay careful attention to how they handle the situation." Do you also pay careful attention to making sure they will be offered a fair compensation for the time they invested in your fun little challenges? – rapt Apr 20 at 20:15
  • @rapt Are you asking if we paid candidates for interviewing? I wasn't a manager, so not really my place to get involved in compensation discussions, but pretty sure the answer is no, we did not pay candidates for interviewing. As a candidate, I've had many job interviews and never once been paid. Your tone suggests you're implying something. Can you clarify? Are you suggesting that candidates writing code is unfair? – Brandon Apr 22 at 15:36
86

The hiring process is a two way street - you are evaluating them as much as they are evaluating you and life is too short to be spent in jobs that make you miserable if you have a better option.

You don't say much about your current situation so I don't know how badly you need a new job but if you aren't desperate I'd say the number of personal red flags this has raised for you is probably an indicator that you should walk away.

To more directly answer you question some companies absolutely do use programming tests as a way to get free work out of people so that's a possibility here. Others also set unrealistic test conditions simply because they don't know any better. While the latter is certainly less heinous than the former, and Hanlon's Razor would lean me towards the latter either way it can be seen as a red flag so I would advise caution at the very least.

  • 11
    +1 Some BIG NAME companies pull the "free consulting" trick. Happened to a friend of mine who called them on it. It happens a good deal more than people think. – Richard U Jun 18 '18 at 11:19
  • You could always contact them and say that the take home test was too large, and could they give you an on-site coding assignment (say 2 or 3 hours) instead. It's possible that they dont even realise the project is so large as you say it is – vikingsteve Jun 18 '18 at 11:59
  • 4
    @vikingsteve or the flipside: you didn't ask enough questions on the specifications and you think it's a bigger task than it actually is. – TemporalWolf Jun 18 '18 at 20:12
  • 3
    @Mehrdad they complained to his recruiting company, who copped an attitude with him. So he fired his recruiter for taking their side. He won't deal with BIG NAME or the recruiter again. My friend made enough to retire about 15 years ago. He works because he loves the business. He takes no drama – Richard U Jun 18 '18 at 21:20
  • 1
    @DonThermidor_LobsterMobster: They also happen under different names. I've seen hackathons organized by companies where the topics were long running issues in the company. The company was a government contractor, and several state colleges sent their students to the hackathon. After the hackathon, over 50% of the staff working on those issue at the company was fired, and many unpaid interns were hired (the students who attended the hackathon). The company crashed and burned later on, but that's surprisingly a completely different story :) – Flater Jun 19 '18 at 6:33
27

A big take-home project is not uncommon especially when you're interviewing at a startup. Whether you do the project or not depends on how much you want the job and if you think they're not just trying to get free work out of you.

To me, if the project is testing you on something you don't even want to do (red flag) and way too much work for the time given (double red flag), I would walk away.

  • 9
    Would it hurt to contact them and ask how much time they expect you to spend on the project? – vikingsteve Jun 18 '18 at 11:58
  • 3
    The OP doesn't specify what country this is in but I would expect any company that uses the output of interviewees that were never employed there would be putting themselves in some sort of legal jeopardy, e.g. copyright. That doesn't mean that it won't ever happen but it seems somewhat unlikely. If you want the job, I wouldn't let that concern get in the way. – JimmyJames Jun 18 '18 at 13:53
  • 3
    I wouldn't say its common either. And they're regularly refused by experienced devs. – Gabe Sechan Jun 18 '18 at 14:27
  • Usually in companies that throw take-homes at candidates, the person who manages the communication about the take-home is a clueless recruiter/HR person. The developers prefer to stay behind the curtain, unaccountable. Whether the recruiter functions as a middleman between the candidate and the developers, or the recruiter concocts the boiled responses by themselves — either way, the candidate often does not get a chance to discuss the project and honest time estimates directly with a developer. The candidate rarely gets meaningful answers. – rapt Apr 20 at 20:30
5

If the manager was all way as you are on the board (even when you did not met before and your resume is not adequate) and then gave you a "test", which he even had not ready at that time and it would be request from their customer, counting for a lot of hours work and there also is no way they would get your "results" other, then their customer is satisfied...

Well all that screems to me "we want you do some work for us for free, but we may not hire you (and pay you), even if you do excelent work, but our customer is unreasonable".

Solid company would not put their reputation with customer on unknown "person from the street" without testing the result at the company.

Solid company would have the test already prepared, evaluated and probably even solution for it to compare with.

If the manager is so much enthusiatic, he needs you to do the work - bad mark for the company too. (Also it suggest, that they are short of staff and they need anyone and everyone willing to to do work for them - so at best your coworkers would be anyone willing ignore all red flags and improving Joel test score would be giantic (and probably unpaid and unrewarded, except your good feeling) work.)

I would politely reject the work, either immediatelly, or when the "test" would arrive to me and would shows up as work I do not want to do on daily base.

Or maybe - would I be more interested in the work anyway) I would offer to do the "test work" for them at my usual hour rate and ask them to provide exact and written directions, how much hours they want to pay you for (at the risc of the work be unfinished after the limit and not continued on, until they hire you or assign it to somebody else), or if they are willing pay all and any time until the "testwork" is done to your standards (or any negotiated before and written standards)

This way it can lead to two ends

  • else they wants you (and the work done) so bad that they are willing pay you for your work (and you get paid) - and maybe (maybe not) potentially you find good work with only slightly excentric/unskilled hiring manager
  • or it was trap to get free work from you, the manager get angry and broke negotiation, waiting for another one willing to do upaid work (and probably get not hired anyway, as this would cost them money to pay for employee) - and you would not fall for it.

Other possibility is, that you need any work now, and do that and get possibly hired and end doing front end work - because you did it so well last time - for the rest of the time, while they would be looking for somebody to do backend work (as this possition is not filled yet) or they assign the backend to some of their employees, who do it regularry, but cannot/wantnot do the front-end.


Maybe I am wrong, but all what I had seen and hear tells me, this would be some variation of the above cases.

3

I will give an opposing view.

It is possible that you just are putting too much into the task. The main problem I have with hiring people with degrees (especially CS degrees) is that they think then need to make this perfect, wonderful, awesome code. And while that is a nice to have, in the real world that can be absolutely useless.

However, you state that you have 2-3 years of real-world experience. I would be excited about that. It means that you should already know better than to think of world the same as your laboratory. So now comes the programming test.

(You don't mention the task so it's hard to know for sure) I could see a test that "and most do" could be solved in two general ways. The fist is a 0.5-2 hour fix, the other is a 10-12 hour fix. And see what you turn in (or if you walk away).

The higher up you go in management, the less it matters how good the code is and the more it matters that it does what it's supposed to. What I would be looking for is the 0.5-hour fix and a comment in the code, or a note that goes with it somehow mentioning there was a better way. That would be the golden ticket for me.

The reason is this. When your working on a product, there will be times, despite best efforts when you just need to fix the thing. All your testing, and process, and UAT, and etc. etc. is meaningless and you just need to deploy a fix now. It should be rare, but it does happen.

A developer that want's to sacrifice uptime (for example) to make the perfect code, is not an asset.

So yes it is possible that the CTO is excited to pick up someone working on their CS degree with 2 years real-world experience. Code tests are not always on a part of a project that you may be working on. Especially in smaller shops. And code tests are usually more about things other than your ability to code.

However, the interview process works both ways. You are also interviewing them. If you don't feel like these requests are reasonable, then just decline the process and move on. Personally, I would do the task as fast a possible, and see what happens. So what if he gets "free work" in the end it doesn't really matter, and I would be able to know that I tried.

  • 10
    As much as pragmatism is invariably better than perfectionism, "quick and dirty" is simply a highly effective approach for producing mountains of technical debt. I would be very wary of working for anyone who's first requirement would be to establish that I'd be prepared to throw out filthy code in a hurry, to me that suggests that they operate in a state of pure chaos (their lack of testing and review processes would seem to confirm this). If that is their aim, it's yet another good reason for the OP to run away. – BrummiePete Jun 18 '18 at 13:09
  • I will admit that the lack of testing and review is a problem. I would be worried about that too. But at the same time, I personally try to "weed out" applicants that spend 16 hours on a 0.5-hour task where the code in question is knowingly going to be thrown away. And yes many, many applicants do this when they are fresh out of school. The OP's 2 years IRL experience should keep him from doing that, but maybe not. – coteyr Jun 18 '18 at 13:16
  • Yes, I very much know the type that you're trying to weed out, but can that not be done more simply via an interview question? Something along the lines of "Our customer's in a big hurry, how would you speed up the project?" If the answer there is either "I absolutely wouldn't" or "I'd race through it like a headless chicken", I'd end the interview right there. If it's something more constructive like "I'd skip the unit tests", "I'd hard-code x or y" or whatever, I'd maintain my interest. – BrummiePete Jun 18 '18 at 13:36
  • I am also sometime forced to "make miracle overnight by black magic" (and later fight the Frankenstain monster I just created), but I do that with knowing, that all is under version control, there are sanity tests all over existing code and regularry done full backups. (Actually I did one this weekend and have to write that correctly in next month or so - even if that worked by many lucky coincidecies, unrealistic expectations and pure luck, there was FIXME and TODOs all over code and asserts that would kill that right when it step even slightly of tracks) ... – gilhad Jun 18 '18 at 19:57
  • 4
    "The higher up you go in management, the less it matters how good the code is and the more it matters that it does what it's supposed to" Management that doesn't understand code quality and maintainability shouldn't be in that position at all. The same mgmt that pushes for quick fixes regardless of quality will quickly develop amnesia when the team tries to explain why velocity has dropped ,and why the code base unmaintainable, and fixes take twice as long. – contactmatt Jun 19 '18 at 0:02
0

Another option other than the two you outlined is that they don't actually expect you to do this, at least not properly.

Many employers will go through three basic question/challenges in the interview, something simple (they expect you to know the answer straight away), something not so simple (maybe multiple answers), so they can discuss the answer with you and see how you respond. And lastly, they might ask you something you cannot know (or in this case cannot do in the time frame provided), you're kind of expected in this scenario to answer with "I don't know", or fail so you can talk about it, it's supposed to be impossible to do, and they might be measuring you on your response to this.

If you suspect they aren't trying to make you do a real task they have without paying you for it, I think it's quite acceptable to go back to them and outline why it's a much bigger task than they think, going back with an idea of how it could be implemented and the work involved would be better than just saying "it's too much work".

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