Ask HN: Your thoughts about online developer recruitment tools like HackerRank?
I recently appeared for the first time on online challenges as a first round of interview process on HackerRank, well experience was good but as i have participated in only 1 of such process, i don't have strong opinion about it. i have been part of live/shared coding interview, they seem to have hard limit as you must solve X% of challenges irrespective of how cleverly you solve the them? So not sure if that angle is even considered when judging the answer.
Just wanted to thoughts about such tools? do you think they do a good/bad job? Or is it proper approach to find the talent?
54 comments
[ 4.3 ms ] story [ 99.3 ms ] threadAll of this said, I think HackerRank is a great place to improve your skills in solving interview challenges and algorithmic problems.
Disclosure: I am a co-founder at source{d} where we analyse all git based projects to understand developers through their code.
A better recruiting model IMO would be to recruit people on short-term contracts (e.g. 6 months) with the contractual agreement that the worker will transition to a permanent job at the end of the 6 months providing their performance is inline with expectation.
I do use code exercises myself, but it's not some n queens problem or something - which tests nothing practical (for the positions in my team anyhow). Rather it's a simple problem, where I look for their ability to test drive code and clean code. The candidate then doesn't get pressured as they might in a live situation. If the code is good we walkthrough it in person.
That already exists. And it leads to abuse of those contract workers, because they think that if they bust themselves just a little bit more, they'll have that carrot (the job). But they're so burnt out at the end of the contract period, and the employer inevitably says "No", and then brings in a new class of fresh faced hopefuls.
For the overwhelming majority of software businesses it's far more useful to know if someone is disciplined enough to use good variable names than whether they can write an algorithm to count the number of edges in an acyclic graph.
This then filters out anyone who just can't code, and you can review the passing tests for craftsmanship.
I have some stake in https://Codility.com - I could perhaps ask them to add a new kind of tests :)
Disclaimer: I have a stake in https://codility.com/
In my experience people who understand complex concepts can also understand how to write clear code. Maybe those that you are writing about were not motivated to do that - or maybe it never occurred to them that this was needed?
Would you mind also explaining what you mean by this in "this is not always the case"? Because it does not seem to refer to my comment.
It is much more difficult to debug and fix existing code than develop it from scratch. Hence, if you found the problem hard to code in the first place, then when you come to debug it again later you've just screwed your future self.
Knowing how much to abstract and writing clear code is indeed an ability.
This leads me to think that conciseness is not necessarily as simple as we tend to think. Sure, overly concise code with clever hacks are often a nightmare to debug, but that's mostly because they are the wrong abstraction and not capturing the problem well enough.
Beyond code literacy, the most valuable skills for a 99% of programming roles are empathy and diligence. Unless you're working on the kind of programming that's arguably pure mathematics, algorithms are just not important.
There are plenty of ways to test diligence; empathy is a little harder to test directly but there are reasonable proxies.
Disclaimer: I'm working on a product for applicant filtering (generic rather than coder-specific) https://www.beapplied.com/
I think it's simply 'well, everyone is doing it so...'. So for some people it feels just safer to do what a lot of others do, while others can't be bothered, and a just don't know any better. I'd believe that's a very common reason for this approach :)
The Stockfighter-like concept is newer for them; it seems like they're also trying to work the pipeline from the other direction as well (i.e. finding good candidates for companies, instead of just testing candidates that have already applied for a position).
I don't really like it. I scored well in most that I did, but as some folks mentioned, they either test the wrong things, or have horrible UI's.
Also, there are some that end up having multiple choice answers that are really badly done (bad question syntax, having 2 correct answers, outdated questions, etc).
I personally refuse to do any of them nowadays, even if I am really interested in the company. I just can't justify the time and (in case of badly done) frustration so companies can' save a bit of time.
ui doesn't make it clear switching tasks will lose your work, and to make it worse they silently break the clipboard so you can't "cheat" thus preventing you from storing your code anywhere. makes experimentation really awful as you have to keep commenting the whole thing every try
Solving a programming challenge is not the same as winning the ICPC. And that is what a lot of people here are saying it matters how you use these tools. If you ask developers to solve the very hardest challenges used during the ICPC you are probably going to waste their time and you might miss out on candidates who would have done a good job even if they couldn't solve that challenge. But being asked to have a basic understanding of algorithms, which is what is needed to solve the average challenges, is something that I think should be taken for granted whatever position you are applying to.
HackerRank is just a tool. Its effectiveness depends on how well the company interviewing candidates configures it. I think algorithmic questions are the most popular, but it's completely configurable; you can have it ask whatever you want. It's also possible to manually review submissions. When we used it to evaluate candidates, we'd manually review the code for candidates that scored somewhere in the middle of the range. Depending on what their submission looked like, we'd decide whether or not to proceed with them. (HackerRank lets you see each version of the code attempted by the user, in addition to the final solution submitted.) We actually found it particularly efficient at finding good candidates; there was a very high correlation between interview performance and HackerRank score. If properly configured, HackerRank makes it easier to identify good candidates, which is (IMO) a good thing for everyone. For companies, it means that they spend less time interviewing bad candidates, and for candidates themselves, it means that they might be able to get their foot in the door somewhere where they'd usually get blocked by the "resume scanner" filter (since the company isn't risking engineer time/productivity to send out a simple HackerRank evaluation).
That said, HackerRank isn't perfect. My biggest complaint is the lack of feedback for some failure modes, most notably segfaults and failing non-sample testcases. For segfaults, it simply returns "segmentation fault" and you're expected to be able to find the problem (a similar tool I've seen, coderpad.io, dumps a stack trace). In some algorithmic questions, non-sample testcases include data that is vastly more voluminous than the sample data (which is intended to catch non-optimal implementations of the algorithm), but this isn't obvious at all. It would be nice if the non-sample test cases had titles (e.g. "extremely large input" or "edge case") so you could theorize about why yours failed.
People who have experience using HackerRank have a definite edge over candidates who have never used it before. If you are planning on taking a HackerRank test for a position, I would recommend trying some open questions on their site first. I also recommend having a local text editor, compiler, and debugger ready in case you hit a segfault that isn't immediately obvious. If your solution fails with "Terminated due to timeout", or your code works on all the sample cases but fails/crashes on the hidden cases, then your algorithm is likely not efficient enough (in the timeout case, look for ways to speed it up; in the 'mystery crash' case, look for ways to reduce memory usage). Lastly, if you have extra time after completing a HackerRank test, I recommend making sure your code is as clean as possible and is well-documented (but not over-documented), in case they decide to manually review it.
* the stack trace -- We avoid showing stacktraces to candidates as it has the potential of leaking information (a well created error message/stack can leak test case data).
We can and should show the trace (for languages that provide it) to reviewers. I've added an item to our internal tracker.
* Familiarity of environment: Most (if not all) of the challenges companies created by companies link to a sample test (hackerrank.com/tests/sample). We notice many but not all candidates take this before the actual challenge. Perhaps we should highlight this more.
My experience:
1. Works great if engineers apply to you, much less if you try to poach a engineer from great company.
2. Great resumes or credentials sometimes don't correlate with great performance. Especially there are hidden self-trained engineers, who can build great products, but never had CS degree or worked in well known company. It can be competitive advantage if you can give standardized test to everyone who apply, when most companies wouldn't bother to invite them for an interview.
3. Still they can save a lot of time for both ends:
a) candidate usually prefer to spend one hour on an online test than to take a day off for full day of interviews
b) company can offer this test to anyone, time of senior developers is usually too costly to offer regular interview to anyone
4. It is not a replacement for regular interview process. You still have to interview candidate. Most of the time, signal from this tests is clear if they are used properly (e.g. give mix of tasks with different difficulties).
One additional bit to add to this type of 'testing'. It's write once, "be interviewed" multiple times. Rather than the usual interviewing process that requires you to "write" some sort of test/interview every time they go to another potential employer.
Have been interviewing recently and most of the process have 3-4 steps..
This gave the benefit of a familiar working environment, and I could quickly TDD as needed. I highly recommend this approach when faced with these tests. That and working out in advance an appropriate way to accept input.
Not all of "these tools" use stress as part of the evaluation. Kattis is one example that allow candidates unlimited amount of time. However it should be noted I think it's possible to increase the time using these other tools up to some max limit.
It'll give you a clear measurement of a candidates ability to do CS homework and not much else.