Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I prefer homework to timed, monitored programming sessions. But the task should never be a big task.

When i interviewed for a backend development position, the task was to set up flask with two routes, connect to a dB and retrieve a couple of rows when user visited the routes.

It was not hard even though I never worked with flask before, and it wasn't supposed to be hard either. It was a test if I had basic programming skills and that was it.



Exactly - a take-home test that will take more than ~2 (maybe 3) hours to complete is unreasonable. And it should be administered only after a preliminary phone screen.

I'm willing to give up an evening for a job that appeals to me and that I have a decent chance at landing. I'm not willing to give up all my weekday free time for a week or stay up until 3am. And I won't do either if you're not willing to first invest 15 minutes to make sure there's sufficient mutual interest to be worth my investment of hours.

If you don't respect my time before hiring, I assume you won't respect it after either.


The problem with any take-home test, ESPECIALLY one that you only expect to take 2 hours, is that you hand people an advantage who do have more time to spend on it.

That was what stopped us doing it, and started looking at reasonable tests that you can't prepare for, and can't spend more than the allotted time on. So that means we weave the testing into a 1-2 hours interview, and everyone has the same chance.

(we also document our process so you can see what you're getting into before you start)

https://careers.bytemark.co.uk/full-process


Time pressure always make me perform a lot worse, on programming tests as well as iq tests.

I did an iq test that was not timed and got 10 points higher, which is quite significant and also much more how real life problem solving works as a programmer. I'm never under any time pressure in my job.


I don't love that approach. There are lots of people who can do the work well in a reasonable amount of time but don't test well under intense time pressure.

We do require candidates to use version control and (though we don't tell them so) we review individual commits to understand the candidate's approach and how they use version control, and commit timestamps to see how long implementation took them.

And the volume of candidates who pass both resume review and phone screen in our process is low enough that we're not usually comparing candidates to one another; it's "can you do the job or not". So relative advantages aren't such a big deal.


This is a very reasonable task, but most of the take-home projects I've gotten (for both frontend and backend) have been significantly larger.

The worst one was for Optimizely, who asked me to write an entire website (front-end using React, backend in Python) which will display a list of products from a database, including full tests. I determined that boilerplate and configuration would take me about 5 hours, with maybe another 5-6 hours of actual coding. They even offered to pay me something like $15/hour (literally nothing) to do this. I said no.


> the task was to set up flask with two routes

Setting up a web server is also a different skill than backend programming -- many experienced back-end programmers have never needed to spin up a new server for their job.


I'm very comfortable with never hiring a backend programmer for whom this is an insurmountable obstacle.


It's not insurmountable, but it's absolutely time consuming, especially when it's not a regular aspect of your job. I recently had to do exactly this for a prototype that I built and it took up a good 10-20% of my total project time.

Another way to look at this is, are you more concerned with testing a person's end-to-end or development skills? There's no right answer, but you have to realize that testing one comes at the expense of the other. If your company often uses brand new development stacks, it might be important to test a candidate's ability to do exactly that, but if your company has a framework in place that everyone uses, then it's probably best to focus on a candidates pure dev skills.


There are plenty of surmountable obstacles that are a waste of interview time. Why give a jr admin task that any teenager can do as a test for a professional programmer?


It does test for having a wider skill set that just memorising a text book.

Ill give you an example of a task that I got in my 2nd/3rd year of employment.

Came into work and was presented with an exotic (for the time) piece of hardware (A0 digitizer) that cost 3x my salary to be asked to.

1 Connect it up and get it talking to a PDP

2 Research and Write the code to allow the kit to interrupt the os and transfer the data to a second program (this is on RT11 which only allowed 1 process normally).

3 Work how to initialize and calibrate the kit

4 Was asked to go and chat with one of the senior engineers and work out how to use the kit to digitize the results from his experiment to produce a 3d representation of the droplet cloud - z axis was done by using a camera with a very tight focal plane


With flask it's just `flask run` which will cover all your development server needs. I agree if it's about setting up a production environment, but I don't see them implying that.


Flask has built in web server so it wasn't an issue, but I've set up nginx and apache before and would be able to do it as well if needed.


Homework is still timed. It's unavoidable. You have 3 days to spend "any convenient 4hrs, more if you need it"? Your competition spent 60 hrs on the homework, adding bells and whistles that imlddss the interviewer.


> adding bells and whistles that imlddss the interviewer.

Bells and whistles are likely to have the opposite effect on me FWIW. We've got enough work to do around here without inventing more work for yourself. 'Keep It Simple Stupid' as it were.


> timed, monitored programming sessions

When I found myself out of work last year, I interviewed for a big auto company - their interview process involved an online coding session. They gave me a spec for an assignment and asked me to complete it in 20 minutes - I could pick Java or Python. I picked Java, and got the spec - it was ridiculously simple. I can't remember the exact wording, but it was something like, "write a function that will print out the text value of a number in the range 0-4, given the numeric value (so if you got an argument of 3, you'd return 'THREE')". Well, in my haste to complete the assignment in the generous 20 minutes they gave me, I... didn't read the specification closely enough. I started writing a program that took in a _list_ of numbers on the command line and output their text values. It took about 10 minutes to code it and sanity test it - then I thought to double-check the description and, "shit, I misread it". So now, with 10 minutes remaining, I'm thinking, "if I change this to fit the description, they're going to see that it took me 15 minutes to come up with a pathetic function that should have taken me 2 minutes." So, I started refactoring the whole program to _contain_ the function that they asked for, but call it from a main routine that would parse the input, call the function, and write out the results. With 19 minutes on the clock, I submitted my abomination. The recruiter was kind enough to call me back and tell me that they had decided they had "better qualified candidates in the pipeline". Oh, well...


> better qualified candidates in the pipeline

Probably the ones that read the spec and delivered what was required. If you're going to gloss over something trivial, what does that say about your attention to detail?


Alternatively, it's someone that wrote a solution, re-validated it against the spec, realized it was not fully correct, and was able to correct it within the deadline given. Hiring isn't yet a science.


Orn someone who wrote a massively over engineered spaghetti mess instead of wrapping a block of code in a loop control.


Silver lining: people make mistakes. Especially under stress. You don’t want to work with a group that thinks we are machines.


Perhaps, but if you're given 20 minutes to do something you can do in 2, are you sure you should be making mistakes?


That's an entirely reasonable assignment that I would accept doing. Unfortunately, there are definitely way more time consuming projects being handed out regularly.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: