On asking job candidates to code(philcalcado.com) |
On asking job candidates to code(philcalcado.com) |
We detached this subthread from https://news.ycombinator.com/item?id=11290180 and marked it off-topic.
[0]http://www.institutionalinvestor.com/article/3532520/banking...
I guess I should be grateful that I look older than I am because of my rapidly receding hairline.
Fascinating! It's like Blindsight in reverse.
Here, do the T branches apply only within computing, like knowing more than one software tool? If so, I think that's not what Tim Brown meant.
Presumably an interview seeking signs of "T-branching" would propose higher level questions, like business acumen or domain curiosity or spontaneous Q&A to better understand or elaborate the requirements needed to solve a representative problem. Otherwise the "T" just equates to broad software skills.
Being able to take a Sunday to work on a challenging problem in my own editor / computer / dev environment sounds great! I wish that all companies added in their job ads something like 'if you want to skip the whiteboard send us your solution to this problem together with your resume' where the problem is a representative problem of the type of work they do, then you spend the interview discussing your solution as opposed to playing algorithm-roulette.
It would also cut down the uncertainty when you see a job ad where they ask for all sorts of different languages / skills, if you have fun doing the coding test, it's likely you'll enjoy working there, and vice-versa (in which case you might decide not to even apply)
If you're applying to just 5 companies, that's a full (well 40-hour) work week of effort for a small chance of going forward with the next stage of the interview/hazing ritual. Might be good if you are already unemployed, but incompatible with candidates who already work.
They should already have a coding document in place and they can use their boilerplate document to quickly whip up a design doc. Right??!!?
First out of the 4 I did what was asked but got refused because I didn't clean up the code afterwards ( I thought I'd been cool for demonstrating some lesser known functionalities of the language and API I was dealing with). If I've spent 4 hours doing it, I don't want to spend 2 hours making it really pretty.
Second out of the 4 I misunderstood the instructions so I went in and 'fixed' their code to make it work they way I thought they wanted it ( was maybe too tired since it was late at night after a day of working on a personal project) This was actually a job that was close to one I really, really want.
Third out of the 4 I can't remember anything about it now.
Fourth out of the 4 they really liked what I did and we had a great interview, and then I got turned down because they thought I wasn't really that interested in their company (which was true, I was just fulfilling a job search requirement while getting my startup going)
Aside from that I interviewed at a social analytics startup one time and we ended up talking data mining and they asked me to do a 2 weeks project with them to do a POC of sentiment mining Twitter/Facebook. I gave them what my consulting fees would be, but they seemed really interested in me doing it for free as conditional for pursuing employment there. So I never got to try that coding exercise.
I chose Clojure since I was learning it at the time. The problems were easy and I made working solutions, but the framework wasn't working. I gathered some call stack data and sent it to the people that make the tool. They thanked me for the feedback and later fixed the bug.
I sent the completed code by email to the company with a note about what had happened. Showing clearly that my code works in the form of some tests.
Then, on the basis of this they didn't proceed.
Incidentally, this is exactly how the "Sun Certified Java Developer" certification was structured. You were only allowed to use java.* and javax.* packages provided as part of the JRE, and even among those things like the SQL packages were off limits. Instead of sending a test suite, they provided an interface you needed to implement and then when you submitted it, they had some sort of test suite that tested your code for conformance to the spec (and if it failed, you failed). If it passed, someone would manually review your program to make sure it made sense with respect to the requirements (which were intentionally somewhat vague, like real requirements) and if you passed that step, you had to write an essay about WHY you made certain design decisions (like sockets+serialization vs. RMI, etc).
This was by far the most challenging and fun task of its type that I've done, and to this day if I see that someone has that certification I know that they have what it takes to get things done. This methodology should really be utilized more, although for many companies the overhead of designing such a challenge would be way over the top. Makes me think that things like https://www.stockfighter.io/ have a future in our industry.
I try to ask questions that aren’t completely ridiculous, but definite tests of knowledge. And in my mind I judge correctness not so much on remembering obscure syntax but on how they approached the problem, and how much time it seemed to take them to start doing something. I always ask about things like how they approach debugging, testing, etc. because these are important too and they tell you a lot about how likely the person is to be able to handle any problem you come up with.
Codility.com is a software as service company that automates this.
it also takes very little time to introduce and solve which is a plus since we prefer to give it out in-office. but we do tell the candidate beforehand that there will be a 15 coding challenge so they don't panic.
You just have to determine whether I am a liar--or, more generously, simply unable to assess my own abilities accurately.
- how is this worse then rewriting the wheel? write code only when you must
[0]http://blog.codinghorror.com/we-hire-the-best-just-like-ever...
I doubt Digital Ocean does this since they want good people, but a lot of firms absolutely design their hiring process to create an upper hand and lower your status before you even walk in the door -- especially if you're an experienced engineer.
Short timed tests or whiteboard hazing are the worst version of this. These are the most blatant attempts to commoditize software labor down into a fixed set of "primitives" like data structure trivia or riddles. This is what organizations like HackerRank exist to do: allow big companies to suppress wages by creating these sorts of commodization filters. They don't attempt to capture the value of creative problem solving at all -- because the company is not pricing the value of creative problem solving into the budget for the position, since it's a rank-and-file commodity job.
For this reason alone, you are better off flat out rejecting anything like a HackerRank test or similar online, interactive, short timed test. I would absolutely go so far as to even refuse to write code on a whiteboard if asked to do so in an in-person interview. It's fine to talk about how to solve a problem and spec things out. But the minute it becomes focused on actual fucking syntax, it's game over. You are now a cog.
Longer-form tests are a lot harder to evaluate from the candidate's point of view. Now you are asking for a significant chunk of my time, without paying me. And I am still at the mercy of whatever you happen to think constitutes a valid test. I might look at your take home test and thing, "wtf? this has nothing to do with real world work." Where does that leave me? Of course I want to impress the hiring staff, but I also don't want to get roped into a bad job, and a team that hires me to do real world work by using contrived coding examples is probably not a good place to be.
Personally, I think it's a lot more useful to talk about code that already exists. Either example code form the candidate, or example code that you give to them along with some time to study it.
Engineers read code more than they write code anyway, and right when you hire someone, even if you're a bleeding edge start-up, their short-term impact is a lot more predicated on their ability to read code and quickly learn a new system, not so much writing a bunch of stuff from scratch.
It's also pretty hard to fake competency when reading and discussing actual code. If you don't know how something works, you just don't know. You probably can't just google how the internals of some highly-specific ad hoc code works, unlike data structure trivia (which is yet another reason why it just doesn't matter how much data structure trivia you have memorized).
Basically, my overall conclusion is that when someone asks you to code in a short, timed setting, they are basically lighting a cigar, fingering their handlebar moustache, kicking their feet up on the table, and saying "dance monkey dance."
Unless you are literally desperate for the job, you should reject it right away. You are being positioned so that no matter how well you do on the test, you are but a lowly code typist and they will not take your attempts at negotiation seriously.
Whiteboarding, sure. Homework assignment that takes 8 hours, as the author experienced? No way. I'm good, my hourly rate reflects that, and I don't work for free.
Thinking in a quiet, relaxed environment beats trying to reason through a problem while also thinking about how you are "performing."
Or, they haven't. Which is why articles debating interview coding policies show up on HN almost every day. There is no "one" way.
>But if you're any good
And yet it's also well known that companies just can't get the engineering talent they require. Where is the discrepancy occurring?
The biggest issue on this site, imo, is that we can't take our heads out of our asses and admit that the vast majority of programming positions are brain dead easy. You don't need a rigorous test to vet the developer you're hiring to make what is essentially a CRUD app (and your product probably fits that description). It's to the point where companies with deep pockets (think finance) don't even bother hiring solely CS students anymore. You can take any reasonable motivated graduate, put them in training for 2 months and pop out a budding developer for your tech pipeline. One two punch of competent tech worker, and company loyalty all in a super cheap package.
First, why is it useless? Because it is an artificial and contrived exercise and not real work. Even if you design your requirements to mimic your real work environment, there's something key missing; the candidate has no knowledge of your team and your environment. How I would write code for my current team vs. how I would write code at any other job I've been at is different. You're basically asking the candidate to take a guess at what kind of paradigms your code reviewers like and what they don't like and hope it works out. One team might find use of closures smart and great, and another might find it unintuitive and adding unnecessary complexity. Your applicants have no way of knowing and just have to hope they write code your team likes.
On top of that, one contrived exercise is not a good way to get an idea of a persons' actual skill and knowledge. I'd much rather have a 30-90 minute conversation with someone where nobody writes any code than to review a contrived example. I get the appeal of the programming task, it can be done asynchronously and thus doesn't require any developer time until you go to do the review. But is it really saving you much time? Anyone who's code doesn't pass unit tests or any other automated level of screening wouldn't probably make it very far into a conversation either.
If I have an applicant spend 1-4 hours writing a code example I've had them use at least as much and probably more of their time for far less benefit than if I had simply called them up on Skype and talked to them about programming. The conversation will reveal not only a lot more to me about their actual skill set, but also their personality and how they might fit into my team. Now I realize teams doing exercises aren't skipping the conversation step, but I'm advocating for skipping the programming task step and going right to the conversation if someone's resume is solid and they can intelligently answer some basic questions (a handful of questions that should take no more than a couple minutes to answer, not an essay.)
Second, why would I say it drives off good candidates? Because I know a lot of really good developers (including myself) who skip any job posting that requires writing code as part of the application process. Why do I do that? Because it tells me the team behind this application is immature. They haven't yet gotten to the point in their careers where they realize these exercises are a waste of everyone's time. That means there's probably going to be a lot of other young dude bullshit in the team that I'm not interested in dealing with.
Also, one could just as easily see a "massive" assignment as arrogance from the employer.
Even with whiteboard interviews, you still need to prepare for them. I would say I probably spend at least 8 hours preparing for them mainly because of its arbitrary nature. I have no idea what they will be asking.
With a take-home programming challenge, there is less uncertainty. By looking at the exercise, you can make a good estimate on how many hours it would take and see if it's worth doing.
After those 4 weeks, I didn't get the job. Around the 3rd week I felt like my time was wasted. I want to work for this place, but if I want try again later in life, I probably won't because it took up way too much of my time with little to no value.
It sucks that I'm required to sacrifice my personal and vacation days to find potential new employment.
This means that taking every sunday to work on cool / interesting self-contained problems would be great, and much better than spending time revising red-black trees and avl tree rotations and sorts and so on for the n-th time to prepare for the whiteboarding
And no, they can't determine how awesome you are based on a normal interview process. Nobody can.
I've interviewed people with "20+ years of industry experience" who will swear up and down they can hack the Linux kernel but then can't reverse a string in place or write a function that determines if a word is a palindrome or not.
Having someone write some code, any code is meant to weed out those muppets. Just show me you can actually write a loop. With an 'if' statement somewhere. Please. That's all I ask. You have 15 years+ experience with SQL server? How about a simple JOIN statement? Please?
Now, companies like Google take that too far and I'm 99% positive that the day-to-day job for more than 19/20 people who work there does not involve suffix trees or reverse-printing a linked list through recursion or implementing a stack with two queues, but those are meant to shrink the pool of potential hires from the thousands to the dozens. Nobody wants to sit through a normal interview with thousands of people, better to stump most of them with idiotic, useless quiz questions and interview only a few dozen in person. I get it.
I think interviewing for software jobs is horrible everywhere, period. We just have no way to determine if someone is good or not - you can put anything on your resume and it's hard to verify and compare/contrast with other candidates.
I believe the solution is to hire someone temporarily for a few months on reduced salary/benefits (which would still be considered an amazing deal for 85% of the work force in the US) and see how they work out - can they actually produce? If so - full time, if not - bye.
That's a feature. They get the good, undervalued talent early.
"If an interviewer is not capable of determining my knowledge level by a normal interview that tells me right away something up, and I probably don't want to work with them because they aren't too smart themselves."
News flash, all companies are horrible at determining knowledge level by a "normal" interview. The only ones that have a hope are those that use some sort of test or have existing work to review.
*who are just as likely to leave for another company as soon as something better comes along?
I'm not sure I understand this. A dev who valued their time very much would already be working at a job they liked enough not to be looking. As job satisfaction declines, time opens up to work on whatever you want to call this, a technical feeler, perhaps. A dev who values their time wouldn't get snowed under by a ton of these because they wouldn't be applying willy-nilly, only to those places they want to work.
I applaud their decision to pay for correct answers, as it balances the "cost" bourne by the applicant and employer. Employers who send out tests en masse have an asymmetric advantage -- they can force many candidates to incur a cost without incurring much or any cost of their side. This causes bad behaviours.
Traditionally in interviews, companies "paid" with their time, but online exams skewed that. Paying something per correct answer at least makes them think twice before inviting hundreds to the exam that they have no real intention of ever interviewing.
It's all just ways to filter. If I can filter you through our mutual network, I'll do that - if I can't, open source code; if I can't, coding test.
Edit: thinking more about this, it's good to see that it's a paid puzzle, so even if you don't get an interview, you are still compensated for your time.
Having a broader perspective - its maybe only in programming that the hiring process is so much easier. For almost any other job you need the right technical skills, years of expensive schooling, unpaid internships and have done a lot of networking ( cough nepotism cough ) - its only in programming that raw skills can get you anywhere.
Now, what do you suppose happened next? I never heard from them again and all of my attempts at communication were ignored. I'm starting to think my age is becoming a factor (mid 30s) -- and also these kids have no sense of respect and professional courtesy. I'd like to say this was an isolated incident, but that would be a lie.
Stupid me just spent his Saturday doing another such project, though at least this one presented a more interesting problem. I swear, if I find out I had my time wasted again I'm going into consulting. Or maybe I'll go to truck driving school. Or open a cafe. Screw this "employee" stuff.
The fact that so many employers treat candidates like this tells me that the whole "it's hard to find good developers" line is a lie.
To me, the most useful question is this: "here is an example project that we'd be likely to do, how would you build it?" Then you just let them walk through the steps they'd take.
From there you can launch into why they made the choices they made, trade-offs, philosophy, etc. When you hear people explain how they would make something real, you start to learn a lot of things about them without even needing to ask, and so you're less likely to get scripted answers. They're also probably in their comfort zone at this point, so you get to see them in a more real way.
I don't necessarily mind "homework" style projects, but I tend to shy away from that sort of thing as it's not always respectful of the candidates time.
Two questions I usually avoid (but see getting asked all the time): puzzle questions, and language trivia. I don't ask puzzle questions because I've never seen it correlate to something useful. Most puzzles require an "aha" moment where your subconscious bubbles up some kind of answer, but the easiest way to short circuit that part of a persons brain is to put them in front of strangers with a time constraint. Puzzles might give you a clue as to a persons overall IQ and confidence, but it won't tell you a lot about how they can do the job.
Puzzle questions are also "expensive", in that they usually put a candidate on edge, and they set off the candidates bullshit detector. Let's keep in mind that we're going to reject the majority of candidates, statistically speaking, but you still want them to think highly of your company. If they feel like they're being rejected for a BS reason, you've just created animosity towards your company. It's important that the people you reject still feel respected.
I don't ask language or framework trivia, as I don't think it's useful. I might lob a softball about a framework just to make sure they've actually used it, but I'm not going to ask something hard.
I always have turned down homework assignments. It just feels insulting and disrespectful. Even whiteboard crap is useless but I'm OK with it considering they've paid for my travel expenses etc.
If you think about it ... homework assignments are a classic case of B's looking for C's. A's wouldn't need to resort to such silliness. They can identify (as an interviewer) and exhibit (as an A interviewee) with just an intelligent conversation.
I feel like I wasted the half-day I spent on their code challenge. I don't expect a job, but a simple "Thanks but no thanks," would be nice.
I've created from scratch: new CRDT data-types for geospatial problems, new highly-available transaction patterns that provide useful causal history and atomic visibility, large-scale messaging platforms (400k ops/sec), high-throughput machine learning pipelines, lock-free lightweight-process mailbox implementations, and an end-to-end build pipeline for generating bare-metal rumpkernels to be parallel deployed to N-number of Minnowboard Max devices. Among other things.
If you asked me to do homework to prove to you that I can "program", I'd have a brief discussion with you about how misguided that seems, thank you for your time, and walk away.
I mean fully "hundreds of connections" to a socket pool? Are you serious? If I submit a solution that can do "hundreds of thousands of connections" that includes QuickCheck tests for your protocol and my implementation, Ansible scripts for deployment and orchestration, and a Makefile that builds it, tests it, bakes it into a unikernel, and drives the Ansible scripts to push it out and start the end-to-end load test, do I get to be CEO or something?
Why is tech hiring so full of strange, meaningless obstacle courses? Do we just collectively not have better ideas?
Using a combination of (semi-)rigorous personality profiling (time constrained), and mapping the abstract problem domain of their prior work to the problems I actually have for them to work on, it's been possible to align new people with the work such that they're intrinsically motivated, and make sure all the bases are covered for the necessary roles (hacker, inventor, finisher, watchdog, etc.) to carry a very large greenfield project from start to finish.
I've never once given a cute riddle, puzzle, or coding challenge as a part of the interview process, and actively dissuade others from doing it as well.
A moderately experienced dev will not spend much time to apply, and frankly would probably enjoy the interface better than most job application websites. :-)
A lesser experienced dev will end up spending more time, but really if they are successful we would still want to look at them.
The goals of a technical interview should be: - Confirm the credentials presented aren't complete BS - Validate they know enough to be immediately helpful - Assess their long term potential (brains, social skills)
Coding challenges tend to be good at the first two points but very questionable for the third. Incidentally, given that I'm seeing a 50% washout rate from a basic SQL code question (supported by confessions from candidates that they fabricated credentials/experience), you would be silly not to include some form of practical test.
The third point (potential) is best measured by talking with them about a project they really cared about. For those who cannot share work examples, pick a good side project. Don't get hung up on the content - focus on their passion. You'll get a better view of my capabilities if you chat with me about building an ad server, mobile optimization, or SEO analytics (real world projects I care about) than with a contrived example.
As for the github profile of code shrugs why? Seems like a bit of a cult to me. I'm happy to sharing anything that's useful (and do so on my blog) but don't have the free time to spend developing code for the sake of "work samples". My work samples run on production servers as commercial projects, thank you very much..... Suspect many other good candidates are the same.
Yes, I'm coming to the realisation that it's idealistic to assume that anyone with N years experience will be at a certain level of ability.
"(potential) is best measured by talking with them about a project they really cared about"
I agree. I've always thought that once you've made sure that a candidate's programming knowledge isn't fabricated, the best way to evaluate them is to get talking about code. Whether that's proprietary code they've written but can't share, or it's on a GitHub profile for all to see shouldn't make a huge difference.
It was super neat. Totally hired that person.
I particularly like how this team iterated on their uploader problem, abstracting it out to a socket server and providing a test suite for it. Reacting to ambiguity by abstracting the problem was clever. And, of course, a great illustration of how a standardized hiring tool can, like any software project, be iterated on and improved --- unlike a free-form whiteboard interview.
So far, I have completed around 12 1 hour phone coding tests, the same amount of 30 min chats with recruiters, I have 8x 5 hour on-sites scheduled, have spent about 4 long days on one take-home assignment, 6-8 hours on another, and have two more assignments to complete, both of which I estimate will take over 8 hours each.
I haven't had a weekend for the past 2 weeks because I've been working on assignments and I'm pretty stressed and exhausted.
This process has made me consider changing careers because it's so exhausting. When companies give you take-home assignments I don't think they realise how many things you have going on at the same time.
Additionally, I've found that a one hour coding test has allowed companies to move faster in the process with me than those who have given assignments. When I receive an offer from a company I am happy with then I will tell those companies with assignments I haven't finished that I won't be moving forward with them and they will miss out on a great candidate!
Me too. I'm so put off by the entire process but it seems that to stay relevant, you have to get lucky and end up at a place that keeps your skills up-to-date with opportunities to learn and use the latest tech, or you jump ship every 2-3 years meaning you're once again dealing with this insane pressure of interviewing. Throw in ageism once you get past your mid-30s or so and the mere thought of staying in the industry starts to look quite depressing :-/
Furthermore, after providing ZERO feedback in the past when I have provided github links, offline code samples, personalized cover sheets, etc. to prospective employers this also will not be done. I'm not going to worry and beat myself up because you can't be bothered to provide feedback even when requested to do so.
Homework for programming jobs is just like homework for school: it is not used to judge competency but to demonstrate that your time is not your own as it belongs to someone else. In the case of programming jobs the homework assignment also acts as a filter to weed out employees who will not be properly subservient to the employer.
I was surprised how a couple really basic concepts evaporated from my head during the in-person white boarding. The questions though were reasonable and the interviewers were friendly. All in all a positive experience just an incredible investment of time it seems for all concerned.
The take away is I need to practice solving problems on a white board with just 3 hours of sleep. The sleep deprivation part might be the most important factor to simulate.
Hm. Maybe bourbon? Or a good cider?
In practice, it means I spent 20 hours on my last piece of sample code I submitted to a job I was excited about. Only to be told no thanks, with the feedback of:
"Your app meets what we spec'd out, but it differs from our style."
And to be clear, after I repeatedly asked for what they were looking for in this code, they replied "we are purposely providing nothing except functional requirements to see what you produce".
I could have given them exactly what they want, but I guess they'd rather just wait and hope that someone magically codes the same way they do?
Honestly I should have billed them after that.
I was very suspicious of being an actual feature development. I've said I would only do that if they would pay me to.
They answered that they feel very sorry for me because a lot of the candidates feel the coding challenge very challenging because they can learn new stuff and they love it
go figure
In comparison, a YC company (who eventually got acquired) actually responded very positively to my suggestion that I get paid to do the test they required, not dissimilar to bringing in a freelance contractor for a day.
Is giving out an 8+ hour programming project as part of the application process really considered good hiring practice? If you apply to five jobs, you're expected to spend an entire unpaid work week writing code that doesn't benefit anyone? If a company receives 20 applicants, their ideal candidate selection wastes a collective work month?
I don't really understand this ideal. What's the point of maintaining an online portfolio and a github profile full of code if companies prefer to waste your time writing a pointless uploader?
The ability to see what some code was trying to do and how to fix it and make it extendable and or understandable for future generations is invaluable.
Instead I would have a Mock PR in a github style discussion forum. Have it be a contrived example of some things that could be improved or some things that could spark really good discussion. Give the mock PR link to the candidate and ask them to Peer review the code. Make the discussion and comments of the the candidate the basis for which you determine their aptitude. If they have a lot of depth in their critique then you can be relatively confident how they would interact with the team in a real work scenario.
As a candidate going through the job search process now, though, I have to say that it gets tiring to do a project or programming test for every different company. I can juggle more traditional applications (phone screens, on-site interviews) at a time than applications that require coding projects as I'm limited by the number of 4-hour (or 8-hour or whatever) blocks of time I can devote to completing a project for each one.
Mine is crafted so a really competent developer could get it done in 30 minutes, and intermediate 2 hours and a junior probably not finish. I tell them to send what they have in after two hours that I'm as interested in seeing the structure and thought process than the final result. It seems much better than having someone do it at the office or one a whiteboard for accessing basic competence.
Yes it sucks, but after you get bit once or twice by hiring people who knew all the right words but can't actually produce something useful you get a lot more open to it. I'll gladly take the time to take you out to lunch to discuss the job and code assignment and give feedback afterwards, investing a couple of hours into finding your next job shouldn't be this huge ordeal and gives off a diva vibe I don't want in my organization anyway.
I've only hired tens of people, and while that is not a massive sample size, I'm still astonished by the simple questions we ask that people get stuck on. The one that continues to shock me:
"In any language of your choice, write a function that takes an array of ints and returns the sum of those ints (If you use a language such as php do not use array_sum)"
I'm just looking for something like:
function sum($ints) {
$sum = 0;
foreach($ints as $i) {
$sum += $i;
}
return $sum;
}Then we follow up with something like: "lets say your input array contains [4,-7,0], walk me through the code"
And we finally ask "talk to me about some things that could go wrong at runtime that might cause issues with this function". Expecting people to talk about overflows (maxint?) or if its a dynamic language like php, checking for non-integer values.
I estimate that around 50% of people get ruled out during the "coding" exercise mentioned above. It is astonishing that these people even apply for developer jobs.
However, I'm happy to work on any real task for a reduced or limited fee. It's a win-win: the company gets to know the candidate under real conditions, has an actual task solved at a reduced price, and the developer does not give away his/her time for free. Plus, if it works out, the candidate has learned already the first steps about the company's system and process and can directly build on it.
I'm always wondering why not more companies do this.
If you're dealing with too many candidates, issuing a simple 1-hour coding challenge will weed out the uninterested (and won't favor people that have 4-8 hours to devote to a huge coding challenge).
* The 2nd guy I've interviewed with was completely non interested on doing it. He was checking the phone all the time and getting off and on. I felt so awkward because of his lack of interest.
* I didn't get _ANY_ feedback at all, just got refused. After 6hours in their office...
Yeah, either you pay me for that time, or I'll just look elsewhere.
(And granted, that might exactly be what the company is looking for: a way to reduce the amount of applicants they have to sift through)
Timed coding tests are just a waste of everyone's time, whether it's a weekend take-home thing, or a 30 minute whiteboard thing, or anything in between. They do not account for individual developers' needs, like privacy, their own editor or IDE, and they exist in this ether between bullshit trivia and an outright working internship that ought to be paid.
The other huge thing is that in a lot of firms (I doubt Digital Ocean is like this, but many firms are) "programming" is a low-status, junior activity. In these companies, if someone asks you to write code in an interview, especially if you are an experienced candidate with a GitHub profile, references, and project experience, then even merely asking you to code is more like saying "dance, monkey, dance" and setting the whole atmosphere of your negotiations and interviews in such a way where you are the lucky low-status person who should be so grateful as to receive a job.
Unless you get a really great cultural feeling from speaking with technical team members first, the best general advice is to simply reject employers who ask you to write code. If they ask you to write code before even speaking with you, absolutely reject. Full stop.
I also think all candidates should fully reject internet-based timed "exams" as well. Things like HackerRank are designed to commoditize software labor, which is a creative design activity and if it even can be commoditized at all, it surely can't be boiled down to data structure trivia that you have to code around in a browser-based IDE with a literal clock ticking down.
Anything like HackerRank immediately screams "quantity not quality" and is straight rejection-worthy, no questions asked.
We haven't considered doing a take home test for 2 reasons. 1) We want to see how well the person can get around windows/keyboard. I believe this is important. 2) What we are asking to code is very basic. If we sent something home it would have to be harder.
Are you thinking that the in-person coding would make them nervous? I ask because we are clearly doing something wrong if it's hard to find candidates that can do basic programming. Even if the person is entry level, that would be fine as long as they are an A player at the entry level... if that makes any sense.
Don't give up. Most established companies aren't run by 20-somethings. If the seniors are already in their mid-20s and lack professionalism, then most likely there are other issues going on at this company. You may have dodged the proverbial bullet.
Wish I could upvote this twice! Every rejection I've ever received came with an information-rich sideband that told me more about the prospective employer than an acceptance would have. In at least half of such cases I said to myself: "phew, that was a bullet I was lucky to dodge... imagine how it might feel to work with these people!"
So it looks a bit weird to them and the thought process is something like "this guy is talented, what is wrong with him that he's a walk on? I'm not willing to find out, pass."
Yeah, I dunno. I mean, some have poor soft skills, definitely. But I would argue that engineers in many companies are simply insulated more than other groups. The biggest reason for this is that Engineering is thought of as a cost center, which has a number of resulting consequences.
Other groups like Product are exposed to many other groups (Sales, BD, Exec, Engineering) and so naturally their networks are larger and more diverse.
More established companies will probably have 30 to mid 30 as the median age, and will have much more professional hiring process (relatively)
Also there is a saying that goes around: A's hire A's, B's hire C's
There are cases where you will be declined as "overqualified" or "no cultural fit" when they mean "will replace my job or at best make me look bad" and "too old" respectively.
I wouldn't give up yet. There are a lot of software architect positions if you have the relevant experience. Median age is higher than 30 I'm pretty sure.
But the "we don't have enough developers" is a blunt lie, "we don't have enough excellent developers" is also a lie. "We don't have enough rock star developers who are ok not being paid enough and have no aspiration to become team leads and just want to code all their career and work overtime" is probably more accurate.
Even after than many interviewers look at your resume like 10 minutes before the interview there is no chance that they would read through your code on github. github as your resume is overrated.
I am curious to know if people hire or get hired purely based on their github profile without a technical interview.
* If you don't provide a link to your github profile, I'm not supposed to look at it. This an HR requirement. Other companies may use this same policy.
* I definitely look at github, but it's not always easy to tell if a project is original or not. Quite often I'm presented with either 30 forks, or a few projects that seem like they started as some boilerplate.
* Don't just provide github, also provide a specific project to look at. Even better, point out a particular section that you are proud of.
* Even with a well-stocked github, I will still ask you to code. This likely isn't to tell if you can code, but to figure out what it would be like to work with you.
So far, there hasn't been one candidate that had anything resembling a portfolio online, but we don't hire all that often and i've only been doing it for a bit over a year.
Last time this happened I was informed that Russian and Indian are races. Talking about my coworkers by their country of origin (I was saying how refreshing it was to work with a broad array of people in SF vs what I normally work with [white male] in Oklahoma.)
Russian is a race. Seriously.
HR employees are worthless in my experience (~35 years in the labor force).
Probably that's exactly why you were ignored. The guy was scared of competition. (Maybe they were looking for a tech lead and he felt threatened by your expertise.)
Or being moved down in the stack ranking and cut.
I can certainly still program, but interviewing...I'm tired of it. Tired of being asked picayune questions like I just graduated. Maybe I should I change my CV title from 'Senior Software Engineer'... that actually implies 30-something, late 20s. but what? "Part time CTO and dog's body for a few small startups/companies"?
I know I can do most anything I put some effort into, the relearning process is not hard. But everyone wants a warm body they can immediately plug in. I get interest due to my CV, but they want to stick me into jobs I'm too senior for. I need to figure out what to change... or tell recruiters, no absolutely not, no more front end work, ever!
well, my advice is start planning your career change now - I wish I had 10 years ago, instead of merely idly thinking about it.
There are no shortage of companies that need someone your age who have been around the block and can bring professionalism in addition to a wealth of experience. Don't sell yourself short. Even if they called you back after a month of ignoring you would you really want to work for them? Probably not. Generally ding dongs like that are only capable of hiring other ding dongs(confirmation bias), hold out for working with adults. You age is an asset not liability.
Unfortunately, this seems to be par for the course these days - I have a lot of friends who complain about the same thing. It's just indicative of a total lack of professional courtesy, and you should consider yourself lucky that you didn't end up working with people like that.
You know, the thing is there's nothing new, you're just seeing today what the illusion of the paycheck prevented you to see before. Take this as an opportunity to move your life forward : no matter how exciting your next job is, give to yourself a deadline to bootstrap a SAAS business as a nightjob and have enough customer within 6 months to - at least - replace your salary.
Also, in these cases, I'd recommend you simply call back yourself. Think of it as the opposite of the judicial system (for the US and most of Europe, at least): the burden of proof is on the prosecution. In this case, it's on the job-seeker. You're the one who has to show you want the job and that you're the best fit. The company's role is to find a good fit (and to do so by using their resources in a reasonable way).
That being said, I wouldn't advise on doing "homework" assignments that are exceedingly long.
For the record, when I am on the recruiting side of the fence, I always do a phone screening first, with live coding in a shared editor. Only then might remote homework or on site coding come up, and I always tried to make sure the effort is minimal. It's hard to find something that fits all people and minds though. Try to design a recruiting scheme, and let me know how it works out and if it doesn't piss anyone off. :)
The courtesy thing is another issue entirely, of course, and obviously a lot less defendable...
That is correct. The market is so flooded with workers that ageism is easily affordable.
You can keep trying if you want but the suggestion "it will all work out if you just try harder because the system is ultimately rational" is inaccurate and unproductive. If you glance around the work place and count the percentage of people 10 years older than you, you can guesstimate the odds of continued employment.
dfraser992 advice is, unfortunately, they way the world really works: neither ageism nor the flood of workers is going to be widely admitted to let alone addressed in the foreseeable future.
I'd say in this particular case the guy felt threatened and/or you were too expensive(or assumed to be too expensive)
Maybe it depends on the company, but for smaller companies and startups it's not only if you can do what they need it's if you fit in and the other employees like you and want to work with you. You don't want to hire or work with a jack ass, especially smaller teams. You could be the best developer/programmer/engineer in the world, but if no one wants to work with you, well, they probably won't contact or hire you.
It could be for the better and I'm not saying you are a jack ass. You might start there and after a month or 6 decide you don't fit in, feel miserable, and don't like the environment and decide to leave and have to go through this all over again.
Keep at it. Eventually you will find a company that wants your expertise and you enjoy working for and like people you work with. Both sides have to ultimately decide on a good balance. Technical abilities are not the only factor and I wouldn't jump to the conclusion that it's an age issue.
As an aside I have not come across any issues with age and I'm in my lower-30's. I think it has less to do with age and more to do with how your present yourself, act, work, and communicate. No one believes I'm even nearing 30 when I interview or am being interviewed for example and it's never actually been brought up or mentioned for me that I recall.
My current company was getting some poor candidates who passed the phone screen (the phone screen was the usual 1 hour code something in a google docs while we both look at it) type of screen. So we added a homework problem that takes a couple of hours to pull off. I found when I interviewed I had no interest in coding or following each companies stupid and arbitrary interview process. I do worry that it's too much of a pointless pain - but we have been able to reject a few people at the "homework" stage because they were just atrocious.
If someone has been a public github contributor, that should be even better than a homework problem.
Indeed, I agree
When they have someone hiring not based on what's best for the company but what's best for their own career goals, you know you're going to have issues.
Welcome to the world of tailoring yourself for the job. I'm in my 40s, so it gets worse. Can't wait until I'm over 50!
It seems like someone could get a pretty good staff if they targeted all the late 30+ people.
I would have asked them to look at that code and ask me any question they have about it. If they are not willing to do that I wouldn't have bothered continuing the conversation with them.
> the mid 20-something lead developer
Okay I am going to do something I don't like to do which is judge somebody on their age but a "lead developer" at around 25? Sorry but unless that person is some rockstar programmer (conceived with a copy of K&R in the womb) I find it very hard to believe somebody 3-4 years out of uni has the experience to be a "lead" at very much.
> told me he thought I was a better programmer than him.
Well that is something I guess, at least he didn't think he was God's gift to the programming world!
> Now, what do you suppose happened next? I never heard from them again and all of my attempts at communication were ignored.
Yes drives me insane. It is so fucking rude.
> I'm starting to think my age is becoming a factor (mid 30s)
Could be, hopefully not but a company that puts a mid-20-something as the "lead" developer might only be interested in getting young and therefore cheap employees.
> and also these kids have no sense of respect and professional courtesy.
Very true. That is partly why I don't think a mid-20s person can be a "lead" for much as they don't have the professional experience to lead. A lead developer isn't just a great programmer but also a great leader. Somebody for the regular staff to look up to and rely on for mentorship.
> I'd like to say this was an isolated incident, but that would be a lie.
It happens to us all. Some companies (IT and other) are shit. It is just the way of the world. Don't dwell on it too much, it is just more mental energy wasted and they already wasted a whole Saturday of your life yet were not even respectful enough to call and say "you were great but we prefer this other person". I mostly hate having that conversation (giving and receiving) but it has to be done, it is about respecting that persons time and even though you are not offering them a job you can offer them feedback so they do not walk away from the process empty handed. Sometimes that feedback is all they need to better themselves in the future.
> Stupid me just spent his Saturday doing another such project, though at least this one presented a more interesting problem.
Live and learn. In the future if you already have demonstrations of your work then ask them to look at that first and if they want to continue the process then you look at doing something specific for them. At least you seem to have found a small positive from it in that the problem was interesting :)
> The fact that so many employers treat candidates like this tells me that the whole "it's hard to find good developers" line is a lie.
A lot of the problems with finding a good dev is just finding a good employee for the company as a whole. You might have a good developer who is an asshole and will only cause issues.
Anyway just move on and forget about them. It is cliché relationship advice but you deserve better than them.
Yes, over half my team members are older than me. However, most of them come from electrical engineering backgrounds and have less professional programming experience than I do. There is no friction, though. They're great guys, and they don't demonstrate any sort of ageist attitudes. There's definitely a level of mutual respect and trust, and I try to foster open communication throughout the team.
Three years out of university, I got an offer to be a senior software engineer and technical lead. It came with a 50% pay raise. I'll admit I had some reservations before taking the position. What if I'm not good enough? What if I fail? The thing is, the people who hired me (I was interviewed by no fewer than 7 different people at the company, all in one day), thought that I had the skills necessary to succeed (otherwise they wouldn't have offered me the position). I took the position and I'm glad I did.
It has been the best job I've ever had. Until now, I'd never worked in an environment that placed so much trust in, and demonstrated so much respect for, its employees. There's a good bit of freedom, and the company is very good at rewarding its employees for good work. My only complaint is that the development environment is less than ideal (Oracle Grid Engine, all work done in the cloud, Perforce, SAP, lots of shitty products to deal with in the development workflow). I'm only willing to put up with that because the nature of the job (and the people I work with) is so good otherwise.
Maybe you're right that the term "lead" is thrown around too much in our industry, but I don't think it's insane to put a young person in such a position as long as they're otherwise qualified. As an aside, if you're ever doubting yourself, listen to what your peers are telling you!
Now, on one hand, I dropped out and been in the industry (gamedev) for the last ten years. On the other hand, I've actually been on designer and producer positions for the first 6. But then again, on the third hand, I was programming non-stop since 8 and turned in MIX emulator (from Knuth's books) as a school project at 15.
So, may be we can at least agree that any broad statements about professional level of huge groups of people united only by their age, race, country of origin or other unrelated stuff are unlikely to be true for everyone in that group, because people are unique and deserve to be judged individually?
Yeah, this is so true it hurts
Not only kids mind you
Don't do these take homework projects. Don't work for free.
It's not a lie, you just forgot the last half of that sentence. "It's hard to find good developers, who are willing to work for the peanuts I'm offering."
If it was about 10 hours, $1K was usually OK. I never had a problem asking for this, but the problem is that so many companies are doing it now that they cannot afford to pay everyone.
When I'm adding to my own team I would rather talk to them about code than have them do these screens. It's more holistic and I get more of a sense of how they think. If I'm going to give them a code challenge like this I wait until after the phone screen so I don't waste people's time.
Taking up hours of a candidate's time is excessive, but it seems reasonable to ask for some demonstration of your ability, when so many candidates simply cannot code.
So why not simply ask technical questions during an interview? I'd think you'd be able to determine whether or not someone know what he is talking about by simply asking him a few questions on the matter.
If you were actually looking for a full time position you'd do the interview. It's completely reasonable to require an unpaid interview from a candidate.
Work-sample tests measure the latter.
A worker's experience is a heuristic for programming skill, but a heuristic of a heuristic is like an average of a set of averages: Useless.
I think that's debatable. The quality of your measurement is then simply a function of how well your tests are in the first place. Do you really think giving a person FizzBuzz is any kind of accurate predictor of future success at a job?
As a intermediate (after so many years, should I just replace that with 'mediocre') dev I think a test like this would be a fantastic way both for a company to judge me and for me to judge what a company would expect from me.
There's a huge variety in dev roles ranging from challenging to code monkey and it's sometimes hard to figure out from a job posting or even conventional conversational interview where along the spectrum the expectations are, but establishing those expectations on both sides is critical.
It does make me wonder how hard it would be to come up with basic challenges for different roles to simply apply to the job using their skills. I guess for some rolls harder than others. :-)
The goal wouldn't be a hard challenge, just one that shows basic competency and problem solving ability within their field.
Still this would take time and effort to create. That said, the last time I hired someone I probably spent 100 hours reading resumes, filtering candidates, and interviewing people.
Because every method of hiring has its own biases and tradeoffs. Requiring work samples biases against programmers who aren't interested in doing a "homework assignment". For example, I don't enjoy whiteboard interviews but I'd rather write some fragments in front of the interviewer and "think out loud" instead of working on a multi-hour (or multi-day) coding project. Writing on a whiteboard is just not that big of a pressure cooker to me.
One could argue that the majority would prefer self-paced work samples instead of whiteboard interviews and you're optimizing for a wider candidate pool. That's fine but it's still a tradeoff. I think you're running a smaller scale boutique firm so work samples makes sense for you.
For a company like Google Inc who is more selective[1] than Harvard University, I don't see a compelling need for them to rely on work samples. That company is so desirable for programmers that any "work samples" Google tries to standardize on would get leaked and endlessly discussed on stackoverflow (see FizzBuzz for precedence.) If Google has to keep changing out the work samples to stay ahead of the street knowledge, you've lost the ability to compare work samples over the years which was one of the motivations to use that method in the first place.
At their scale and selectivity, the "study your algorithms book and prepare to be grilled on the whiteboard" seems to work best for them. Yes, they reject a lot of false-negatives but it's offset by ... their scale and selectivity. They can afford to reject false-negatives. If their screening methods were truly terrible, I don't see how the label "ex-Googler" would have the currency it does in the marketplace.
[1]http://thenextweb.com/google/2010/09/14/one-half-of-one-perc...
Selectivity is only good if it selects for traits you want, and, in practice, what you want is not a uniform skillset. So being selective for one trait, any trait, is already a bad idea.
Even the basics of the interview format make a difference. At other companies, all coding interviews are timed at 45 minutes or so, including the problem statement. It's a bit like going to an episode of Chopped. It's certainly selecting for 'can you think under pressure' along with 'are you friendly enough that your interviewer will help you when you are getting something wrong without docking your score'. But that's not good for a careful candidate that is trying to build sturdy, reliable code. So guess what: The company's codebase has few tests, things fail often when deployed to production, and reliability is a problem. It's not that they are willingly selecting against careful programmers, but it's a consequence of the interview process.
The moment you are hiring a lot of people, and you think you have a single model that works, you are hiring from a cookie cutter, and you'll get gingerbread men.
Companies that do work samples minimize on-site coding interviews, because the whole point of offsite work sample testing is that most candidates can't provide an accurate picture of their aptitude in an on-site coding interview.
No interviewing software developer prefers an extra 6 hours of on-site interview to an off-site coding challenge.
The problem developers have with "homework problems" is really a problem with bullshit companies that won't provide timely feedback on their submission. Nobody wants to do homework that goes into a black hole, only to find out 6 months later that they were in consideration for the role. That's a problem with all hiring companies, and it is orthogonal to the structure of the interview itself.
Nitpick, but I'd love to see a citation on that. Google, like every technology company on the planet (modulo a small error value) goes to great lengths to recruit and hires lots and lots of people.
On pair programming tasks, I had a pair programming session with a guy, he gave me an empty project and a poorly specified brief, verbally, then gave me 15 minutes to crank something out. It was pathetic. I didn't get the job and the feedback was, "he didn't know some of the keyboard shortcuts I'd expect." In hindsight, I'm glad I didn't get that one but at the time things were getting desperate.
The best process was the one where I finally got a job. We talked on the phone for an hour and a half and by the end you could just tell we had that, "developer bond". His approach was the best I'd seen. He just talked through some of the problems he had, I proposed solutions and we talked through pros and cons. He treated me as an equal from the start. After that we had the face-to-face HR questions (how do you resolve conflict, etc.) which they have to ask because it's a big company, and another one with another manager but by then it was pretty much a done deal.
And I think that's the way to do a decent hiring process. Don't behave like an authoritative dick, and use phone interviews to screen candidates. Programming projects don't work because it's going to take you forever to review them, and pair-programming doesn't work because there's not enough time, and it's kind of horrible for the candidate.
My best job experiences are exactly as you describe.
The worst have been companies that sought me out (I didn't apply) and then wasted my time during the phone screen (having background conversations with other people in the room, asking me to repeat answers to questions because they weren't listening)...I'm looking at you, Uber.
I've had the same experience, and I absolutely agree. Just about all my best interviews were with someone where we just hit it off and talked deep tech for an hour. On most of these we had to consciously cut the conversation off because we went long. I don't think that, when this sort of interaction occurs, you know the person is going to be good at writing production code. But at least you do know they're the "sort" of person you would expect to be good at it, and frankly none of the other methods discussed do a better job at providing that assurance.
1. Phone screen amounting to about 45 minutes.
2. Skype interview with small code samples between two interviewers at 45 minutes each.
3. 2-week paid trial doing real work.
I had #2 yesterday and am currently waiting to hear back from them about moving onward.
There exists a continuum of hiring practices which place more or less burden upon candidates. I would encourage HNers with input into their company hiring practices to choose less burdensome approaches over more burdensome approaches, particularly when less burdensome approaches also yield additional signal about ability.
A thing you can expect to be asked in 2016: you can expect to be asked to have an on-site interview in a city you do not live in. (How many people will be asked to do this for the SFBA or NYC? Literally jumbo jets full, this week.) For some candidates, this will involve more than 16 hours on planes, a (minimally) overnight stay in a business hotel, and six solid hours of interviews in the course of an 8~10 hour day. This requires minimally 2~3 days of these candidates' lives.
Most companies keep "conversion rate between onsites and job offers" very close to their vest. To put it mildly: it is not guaranteed that if you're flown out you will get an offer.
If you are hypothetically designing your interview process, and you replace the onsite with even an excessively long project, that's a win. The project can be written at the candidate's own pace and schedules conveniently around their other obligations. They do not have to arrange child care, take off time from work, or make tradeoffs like "Do I do the project or do I attend a friend's wedding?"
If you fly across an ocean and start bombing an interview, that's a terrible result for everyone. If you happen to be doing a project and discover "Oh, wait a minute, I've really miscalibrated here: this is far above my level of expertise with $FOO and honestly if this is the character of the work then I'm not sure I want to do it", then you have an easy option: simply close the window and, maybe, send a two-sentence email to the person who you were talking to.
Smart use of projects as a filtering mechanism can minimize costs to candidates and the company of administering high-cost testing (e.g. onsites, long projects, etc) to candidates who will ultimately not be successful at receiving offers and/or defer the high-cost assessments until the anticipated chance of receiving an offer is "very high."
... To put it mildly: it is not guaranteed that if you're flown out you will get an offer.
..., and you replace the onsite with even an excessively long project, that's a win. The project can be written at the candidate's own pace and schedules conveniently around their other obligations. They do not have to arrange child care, take off time from work, or make tradeoffs like "Do I do the project or do I attend a friend's wedding?"
All true but my observation is that the companies that put candidates through multi-day-out-of-town interview processes can afford to miss out on the candidates that can't do it. Tellingly, the type of companies like Google and Microsoft that put a lot of burden on candidates hire heavily from a pipeline of fresh college graduates. Not surprisingly, a lot of 22-year olds don't have existing jobs or kids they have to juggle to commit to intensive interview processes. Sure, they also interview older middle-aged candidates but the benchmark tolerance for hoop-jumping is set by the 22-year olds therefore you won't get sympathy from employers about disrupting your life to stay in the running. For those companies, even if they are flying you out, you're still in the "evaluation" stage and could be 50/50 accept/reject.
Contrast that with boutique consulting firms that hire from the 30+ age bracket (often by poaching other consulting firms' employees.) A lot of their candidates already have existing (lucrative) jobs. Most of their evaluation is done on multiple phone interviews. If the company decides to fly you to their headquarters to interview, you basically have the job unless you unzip your pants and urinate on the interviewer's desk. The onsite interview is not a technical screening but a personality sanity check. At that stage, you're 90/10 accept/reject.
One company in Amsterdam, just last week, I went through a four step process, the last one being the onsite interview. I did really well in the first two, but then in third I went with a wrong approach to the problem and couldn't get my mind in the right position again. The person judging me just kept putting pressure. I got really nervous and couldn't do any more interviews that day... my mind really got completely blocked for the rest of the day.
That happens and, really, the company spent so much time of me (and me on them) for everything to be decided on that? feels wrong..
I'd say 8 hours is too long. I always strive for a 4 hours, but I've seen that 4 hours chop 16 hours off of the candidates time and more than 32 off of the companies.
> What's the point of maintaining an online portfolio and a github profile full of code
The vast, vast, vast majority of candidates do not have an online profile full of code. Either because their code is IP restricted or they do not have time outside of work to maintain that. I view using online profiles as a decided anti-pattern in hiring on the company side as it restricts your candidate pool to a tiny subset of the community that I've seen no evidence provides any more value in outcome and its much more prejudicial to the candidate population than any coding assignment can ever be.
It's not perfect, it'd be great if everyone could have a work sample but as you say that's just not the world we live in.
The reasons I don't like long coding assessment projects and the reasons I don't already have an example code profile are the same. Reinventing all the same wheels in different programming languages just isn't as fun for me as it once was, and I don't have as much time to dick around with any specific side project, especially ones that don't have any immediate utility to me or my family.
Does anyone ever ask about how I spec'd, designed, built, installed, and maintained my DIY entertainment center? No. Same methodology as building software, you know, except the problems are solved with different tools from a different toolbox.
If you're truly really looking for someone "T-shaped", you have to realize that the tittle on that T might include things entirely outside the realm of software or computer hardware, like how to hang a bear bag when camping, or how to fly a small single-engine aircraft, or how to train cats to use regular toilets, or how to run for political office, or what to do when you get a flat tire, or how to hold someone else's baby, or how to hit a gong target from 300m, or how to make a longbow for under $10 at Home Depot, or how to report a pothole so the city will fix it, or how to repair a pothole when the city won't do it, or how to play "Flight of the Bumblebee" while slowly rotating your B-flat concert tuba through 360 degrees.
All those miscellaneous, general-purpose skills do, in fact, make someone more effective at quite a lot of software-related tasks, sometimes in unexpected ways. But they are never going to appear on a resume, or crop up in the answers to any of the stock interview questions. When you include a criterion that specifically selects for people whose after-work hobbies also involve software, you are implicitly selecting against those who do other things, because there is much, much more to life than writing code.
There was only a very narrow slice of time when I actually wrote code for fun in my free time, from the ages of 15-25. It basically stopped after I got laid off from my first software job, and interviewing for software jobs became my next full time job. That's when I realized that I needed to do other things in my life, because it didn't matter how much I loved software if it didn't love me back.
So if you think need a portfolio to get a job, you might want to build one up that includes more than just code samples. The software industry does not love you back. It will move on to someone younger when it gets bored of you.
The difference is that we do this as paid work. Whatever their going rate is, we'll match it.
A surprisingly high number of candidates interview quite well and look promising on paper, but fail horribly in a "real world" coding test.
What company are you talking about hiring for? I'm looking for work as a programmer, and I'd prefer to apply to places with a hiring process like this. You can find some code I've written (a server clone for www.stockfighter.io/) at https://github.com/bcoburn3/forex
My email is bcoburn3@gmail.com if you'd prefer to respond that way
As developers, we often take a 5+ hour whiteboard interview on some of the fundamentals of CS, but presented as challenging problems. We may also have to do a take-home "project" which can be viewed as a "practical" component of a comprehensive.
I don't object to this per se. What I dislike about it (as I've mentioned on HN before) is that we take these exams without the protocols that evolved over centuries in exam-heavy institutions (universities, professions) to safeguard against abuse ensure the process is fair and decent to the people taking the exams.
The exam must not be capricious, it must be relevant and consistent across candidates, it must be created and assessed by competent members of the profession, there must be an associated study path, the content of the exam should't be a huge surprise to the candidate, candidates are provided with feedback should they fail.
And, perhaps most importantly, the process of taking and passing the exam provides the candidate with a certain stature, a lasting credential that is widely respected in the profession. The candidate doesn't have to re-take this exam over and over every time he or she interviews (in many ways, that is the point of the exam).
In many ways, I feel that programmers experience the downsides of this sort of professional entrance exam but without the positives.
I'm glad to see this discussed on HN, because I really do think that software "interviewing" as entrance-exam is one of the things that eventually drives people out of the field (or causes them never enter it in the first place). It's not a good thing for our field.
I'm not saying it's an easy question with an easy answer, just that our current approach is failing.
It seems pretty simple to me, if you consider the entire protocol as what it is: a negotiation, with one side asserting their dominant position.
Please excuse me hn for beating this horse to death, but for God's sake, Programmers of the World, Organize.
A surprising amount of people don't maintain a very impressive public profile (me included, tbh). These people need the opportunity to showcase their skills and the only way to do so is by spending some time coding a nice solution.
We try to minimize the candidate's overhead by providing general guidance in the challenges we issue (like "please demonstrate the SOLID principles").
Then we do a code review on the solution, in which we also spend some time. We point out issues, suggest possible improvements and give props on stuff we consider well done. At the end, if the candidate doesn't progress they at least learned something useful. We hope that this way our recruitment process might always be worth the time.
You're on the phone with them, you can ask them if they'd prefer a little challenge to showcase their skills, or whether they'd like to provide a portfolio example instead.
Maybe a bright self-taught college student switching tracks into software would pick #1, a parent switching jobs would pick #2.
More generally, I think the target should be to make the work sample test take a similar amount of time to the in person interview you'd have to do instead.
That's just shabby and disrespectful, regardless of how many other candidates they're talking to, or how they evaluated this particular candidate.
However I really liked the Thoughtworks challenges and couldn't resist coding for eight hours. It's better than spending one hour on-site for a badly designed 'challenge'.
I could be wrong, though.
It also opens the hiring company to potential liability with regards to IP laws if you are hiring in a similar industry.
Every time this has come up, the company would not pay that rate, and offered something more like $20/hr.
It is just insane to me that if you are interviewing me for a position which makes $105,000 a year and cannot offer even close to equivalent compensation for the interview.
He is saying that even though he was working long hours at his current job, he was so enticed by this interview challenge that, even after a long and difficult day thinking about a (programming) problem, he couldn't keep it off of his mind on his train ride home.
> What's the point of maintaining an online portfolio and a github profile full of code if companies prefer to waste your time writing a pointless uploader?
There are a few problems with using GitHub or BitBucket profiles. First, not everybody has them, or they don't update them frequently, or whatever. Second, it's pretty easy to fake a GitHub profile by copy/pasting code from other places, using other people's code, or pushing broken stuff that doesn't really work. And third, a lot of people's GitHub profiles are cluttered up with a bunch of forked repos that they haven't even pushed code to and don't really contribute to at all.
I'm not at all worried about 8 "unpaid" hours.
It's better than a 5 minute brain teaser question. Any job worth having is worth spending 8 hours applying for. Anyone who views this as "free work" probably won't be a good hire for other reasons.
While this seems like a good idea on paper, you know that people are not going to stop after 2 hours unless you force them to (i.e. by doing the assignment on-site).
>get it done in 30 minutes, and intermediate 2 hours and a junior probably not finish.
What kind of exercise could a junior programmer not finish? Give up or produce miserable code sure, but not being able to finish? Do you require some really strange domain-specific knowledge?
PS: The website in your profile doesn't seem to be working.
You've be surprised. Maybe I expect too much, but the assignment is essentially network aware k/v store with a single get command and set command. Extremely poor mans redis and a step up from an echo server but for some people doing anything over a network that isn't HTTP breaks them.
Thanks for website, my consulting/blog site that pretty much fell into disrepair after taking architect position at a startup.
To me requiring me to waste that much time indicate the company being a diva, something I wouldn't want in my employer.
10-20 hours invested to find and and sell yourself to the job you'll be spending the next year at (optimistically 1% of the working hours during the next year and realistically a lot less) seems like a good use of time to me, but to each his own.
Now the entire lot apply for jobs at your company, and you hire two of those who can code. Within 3 months the rest of the good ones have found jobs, but 30 others have temporarily been unemployed and none of the bad ones have been unemployed.
So you interview again and roughly 40% of the programmers you interview can't code. But that doesn't mean that even 5% of the programmers out there can't code, it just means it is the same bad programmers that interview in lots of places.
It is the same when employers say they are getting ten or twenty job applications for every open position - that doesn't mean anything because everybody who is unemployed applies to more than one place, but from only one side of the fence it sure looks like that.
I would never want to suggest that 'most programmers are bad' or anything like that, i think the real issue is that people who are not really great programmers apply for jobs that are beyond their level of skill at the time of their application.
> but 30 others have temporarily been unemployed and none of the bad ones have been unemployed
Is this 30 new programmers plus 20 of the original candidates who can't code? Should that be "none of the bad ones have been employed"?
Not trying to be a smart ass, but being average is not only the developers fault, it could also be the company's.
Having said that, i think when people have a great personal Github repo where it appears they should be able to answer the above question, but in practice cannot do it without looking up the answer on Stack Overflow...then there is an issue.
Sure, you would think that would be a trivial task for a professional coder. But it is amazing how much you can accomplish without ever having to do anything other than model some data, write some business logic and security around it, and build a front end. Frameworks FTW. The downside is that they don't know how to code without the frameworks.
Parsing data is a very low barrier to entry. Likewise, a person that can write an ORM data model without understanding the basics of a database is a disaster waiting to happen. If you don't understand the primitives you're working with, you're hopeless when the abstractions you use inevitably break down.
Also, your assertion that "as job satisfaction declines, time opens up" also does not follow. Plenty of very talented people are both unsatisfied and snowed under with crap.
Finally, saying that a Dev wouldn't be snowed under because they wouldn't be applying willy-nilly would hold iff hiring practices at firms where even remotely efficient and fair.
Simply not true. Maybe there's a few exceptions, but in general, most companies (especially in tech - just check out our great diversity :|), filter based on arbitrary things like 'school', 'specific # years of technical experience', and other flavours of the day.
Example: I had an interview with Mozilla many years ago, where the first question was, I kid you not, "Are you a Javascript rockstar?". I said no (being truthful - I was naive back then), to which the reply was an immediate "Sorry - bye".
The skill of programming is more like carpentry, mechanic, heavy machinery operation, or machining. I'm not going to higher a carpenter that can't tell the difference between a hammer and a saw, and I won't find a machinist useful if they can't run a lathe.
We need to start thinking of programming as a journeyman tradecraft career.
Or your belly, for that matter.
Keep a record of the behaviour - they are burnt for the rest of time.
Two hours of messing about on Instagram trying to get an authentication token for their API I eventually figured it out, only to realize I was authenticated in some sand boxed mode, so only meta-data was being returned. I needed to have the acccount approved before I could use it properly.
That was a waste of two hours of my life.
If you told me to do this take home assignment I would've politely smiled and said 'sure let me do it right away'. Then I go home, research more about your product and the market, try out your demo product, figure out how things work and release an open source version and make it free. Surely, that is a much better indicator than 'Build a CRUD using Yii'.
A few years ago, I did this to one company I interviewed at who were super arrogant and condescending. I just checked their website and it returns 404. Looks like people prefered my free open source version instead of paying them for it.
Don't fuck with me.
I wasn't arguing in favor of work-sample tests for every company and every candidate, just saying their scope is different (although work-sample tests are more likely to find the untapped potential in the marketplace).
I don't think that, when this sort of interaction occurs, you know the person is going to be good at writing production code. But at least you do know they're the "sort" of person you would expect to be good at it, and frankly none of the other methods discussed do a better job at providing that assurance.
I some times feel that part of the problem with hiring is that people expect too much of an interview process. Whatever tricks you pull to test out people, there's only so much that you can actually learn about people through a few hours of interaction, in a contrived context. Talking tech with developer candidates is great because a) it puts you in a natural conversation, which affords you to get some idea whether you like the person or not and b) it reveals at least something about their technical skill - it's hard to fake deep knowledge, if you don't have it.But, noone gives a shit about that they would rather have me reversing a binary tree on a whiteboard.
As for GitHub, I've downloaded libraries from it, but I have a pretty healthy dislike of Git, which is awful, and refuse to use it for any personal projects. (I only use it at work because I have to-- in any case, work repos are of course private.) I used to have a few projects publicly available on Google Code, but now that's shut down, so there's really just nothing. I do have private repos for my hobby work.
In case it matters, most of my development is in C#.NET.
But asking to be paid during the interview seems too much, even though you could have spent 3 days of your life, traveling each way plus the interview day.
If I were you I would look for candidates that actually have some projects they can showcase that proves they know how to code, and offer them the chance to either do an easier in-person test or a take-home project. During the job search I personally jumped at the chance to do take-home projects since I view them as learning experiences, but for more experienced people I can see them being viewed as tedious. Most truly passionate entry level programmers looking for their first job and some direction I hope would jump at that chance to get some more directed experience as well.
"We ask that you provide:
1) an implementation of this sample project (estimated 8 hours time).
2) a work sample that meets the following criteria (same criteria we are looking for in the sample project)"
I wouldn't ever use something like FizzBuzz to assess a candidate. It would be more of "here's a mostly finished sample application with a corresponding SQL file, add this feature (e.g. a search bar for a blog) and fix any (intentionally introduced) security bugs you find".
They would be evaluated based on how successfully they complete the main task, and if they have an eye for finding/patching vulnerabilities, that's a bonus that can be used as a secondary selector if a lot of candidates pass. If no one does, it won't be used against them.
That's how I'd approach it, personally. Something specific to the kind of work we're doing, but abstract enough to be approachable without a lot of insider knowledge.
Whether that tells you anything about their ability to do fizzbuzz level programming in a more normal work environment is an open question.
There are a few HN readers who've had experience of "choking" on fizzbuzz level programming tests during interviews - even though it's trivial there's something about the interview situation that causes some people to sometimes freeze.
Many years ago there was a limited demand for remote work, which probably tapered the supply, but in my experience from every 3 leads you followed (granted you had the experience), 2 were promising and 1 was almost always an offer. Now a days it's more like you need to follow 30 leads to get one 'meh' answer. I don't feel it's an age issue, it's just a general market condition.
With more companies acceptance of remote work, mixed in with the "we can't find local talent" mantra, the hiring process has turned more hands-off which in turn is producing these insane hiring procedures and cycles.
To make matters worse, everything from the smallest start-up to the largest tech company is adopting the same 'exclusive hiring practices' while they sit back wait for the resumes to roll in and/or send in work samples. All of this is hands-off trying to get candidates to 'fill slots' costs them next to nothing until the final phases. But for candidates it's just a time consuming PITA.
My only advice is to treat the process as any business transaction. Try to gauge how much they are invested in the hiring process, if they are asking you for hours or days on end while they appear to invest a couple of minutes of 'human time' RUN! These are lottery-like odds of landing an offer and unfortunatly this is endemic in large companies as well as unknown startups.
So true. I've found myself back on the market recently and what I'm finding is a large number of companies resorting to HackerRank pre-screens where they pick out anywhere from 3-6 puzzle-type coding challenges, give you an hour or so to complete them and if you don't nail them all, you're out. And that's just for the initial screening - there's no guarantee you'll make it past the N phone screens and in-persons you'll have after the initial screening.
Insanity, indeed. I hope someone writes a book on the crazy hiring practices in our industry, compared to other fields. Maybe I will someday - have to land a job first, lol :-/
Alternatively, give them your hourly rate and expectation that you will be paid for all work performed, including "hiring homework". That should weed out much of the illegitimate prospective employers.
Is that more or less useful than a github profile?
Just curious.
It shows something slightly different than a github profile since it doesn't typically show full projects but both can show off competence pretty well IMO.
Someone with a well written technical blog or good github portfolio is definitely going to have an advantage in any hiring I do.
I believe usability is the most important trait for a software product, and not only does Git have terrible usability, but its designed in such a way to make it nearly impossible for anybody else to improve its usability. (Although they can improve it's accessibility somewhat-- not everybody is capable of using a CLI interface.)
And it's in a product space (revision control) where the average product's usability is already bottom-of-the-barrel. It's kind of impressive in a way they managed to deepen the barrel a bit.
I'm forced to use (struggle with) Git at work, over my objections. There's no way in hell I'd use it for a hobby project where I have a choice.
I see just sharing my opinion of Git is enough to get voted-down on this site. Oh well. Vote me down. "Person dislikes something popular!" is obviously worthy of derision.
Systems, problem solving, engineering. Happens everywhere not just on a computer screen.
Otherwise I agree with what you said, and the best way to tease those details out of a candidate is to have an informal, personal discussion like getting lunch or getting beers together. But that's not enterprise scale.
Now take a more normal organization where the hiring pipeline is guided by people who treat it either as a sales process or a regulatory one. Those people are given their marching orders by executives that either believe or want it to be true that employees are fungible and readily available. The actual resources are allocated by middle management that are already resource constrained (thus the need to hire) and the people doing the interviews have never thought about it being something they can apply engineering skills against. Its a hard problem...
Also, I suspect your marketing department might prefer if you never downplay how hard it is ;)
Funnily enough, often people who clearly are top rate don't think so (impostor syndrome). Dunning–Kruger appears to be very healthy in development circles.
Companies: DON'T DO THIS! I, for one, actively discourage smart friends from interviewing at places that treat candidates like shit.
I felt so humiliated, worthless and traumatized that I stopped interviewing for atleast 3 years after that. I now have (irrational) fear of interviews.
This experience has dissuaded many of my friends from applying there.
This should be the lesson for employers: an interview candidate who feels good about their interviewing experience, even if they aren't hired, can refer their qualified friends to your company. The alternative is that they might discourage good candidates from interviewing with your company by warning people on Hacker News about its hiring practices. Also, the candidate might be a good fit for a different position in the future.
That told me exactly what I needed to know. I'd be instantly rejected because of not going to a "good school".
Next time they do that, I hope the candidate says whatever profanities they feel obliged to say to the interviewer's face. And then walks out.
By all means, keep posting + telling your friends about this experience.
I was an internal referral there for an ml position. They rolled a fucking front-end developer who had never looked at my resume into my first interview just shy of 25 minutes late. And yes I'm sure about the time, because I was walking out at 25 minutes. Dude was nice and we had fun chatting (not about work, just a cool outdoorsy dude), but we had nothing in common in the work we do. I finally talked to one of their ml people and absolutely nailed that part of the interview. And talked to a weird founder (who always asks weird questions. That were not a good fit for a quantitative person.)
They then decided they weren't sure if I wanted to work there (apparently because, you know, I'm in the habit of wasting a day of my life interviewing for giggles) and made me have another conversation with an early engineer there. Who was really cool, but still, it was a strange process.
They also low-balled me on cash, and were strange about it when I turned them down and didn't negotiate at all. Someone else offered me $20k more and I figured it was a sign they wanted me so I went with them.
The whole thing was a strange experience.
I was referred by a college classmate and close friend who used to work there at the time, who knows me extremely well, and is easily in the top 1% of engineers I know (Linux contributor, loved by every employer he's ever had, etc.). He told me I totally had the level to work there, and was better than most people he worked with. So I went along with it, and went to their holiday parties, where one of their execs schmoozed with me for a while, told me I sounded like a great fit, and a recruiter would be in touch with me.
I talk to the recruiter on the phone, get assigned a home coding challenge. I spend a Saturday on it, and get a perfect score on it. I don't know if it was by design or not, but it showed me the rankings of every person who ever did that challenge. I was tied for 1st place with 40 or so other past candidates, in a pool of a few thousand participants.
I do their onsite interviews (fortunately I was local to SF) - don't remember much, except that they felt very stilted. But it was the usual "here's a canned problem I know the best answer to, you have 40 minutes to figure it out while I give out cryptic clues". After 3 or 4 of them, I sit in the room alone for about 30 minutes - the recruiter then comes to me and tells me that they won't move forward, bye bye.
My friend met me outside for a smoke, and told me he had no clue what happened. Oh well. AirBnB definitely left a bitter taste in my mouth, but I got a much better gig at a much better company a few months later, so things worked out.
I have worked with, and currently worked with people who are amazing problem solvers and developers who went to community college or trade schools. Recently I worked with one of the smartest people I've ever known who had no college experience at all. He's so good at his job his makes over 6 figures with a high school diploma with no student loan debt.. how could you not call this person smart?
I definitely wouldn't say that people who come top schools aren't top talent, but it's no guarantee and I think it's silly when people require it.
My degree's not from a good school?
That's nothing; your shirt didn't exactly come off the best dressed mannequin in the Sears window.
Something is utterly, terribly wrong with their process if the coding exercise made them think that you were worth flying in for an interview and then they cut short the interview process because they thought it was going so badly.
There are other signs that the tech leadership at airbnb is confused. Witness this almost parody of a video of their devs describing how they worked their way through pretty much every javascript hotness de jour through the years. I honestly thought this was some sort of a parody initially...
That's just nuts, what a horrible experience.
I've had rejection emails from huge companies and tiny startups personally written by the hiring manager. It's not that hard.
Really really glad I didn't end up there.
Sure, you know that their ability to do it is there, but you still don't know that they will and you still don't know that if they didn't they could learn. You can get that information from having the right conversation.
What testing tools do you use? What's your approach to testing? What pitfalls have you run into with testing? What projects have the best and worst documentation that you've used. How does this affect the work you do? How do you make your code usable to others? What's your opinion about input and output of functions? Separation of concerns, etc?
Or the best question of all: What books about programming have you read and liked and why?
You can't stare at somebody's code and know if you'll like working with them. More importantly, weedout challenges are a solution for the wrong problem. If you're worried about wasting your time bringing in the wrong people to interview, maybe focus on getting better indicators on the kinds of people that you (want to) bring in.
Maybe thats because they are under resourced in their day to day, and don't get a chance to do things nicely despite complaining to management about it constantly.
To do both is wasteful, but if I did either and that _didn't result in a conversation about code_, I wouldn't continue with the interview process. Their processes are broken.
That depends heavily on what they're actually screening for. I've received an embarrassing number of utterly atrocious code challenges from candidates in the past. If you can't code something like a roman numeral generator/reader (when allowed to do so at home, in whatever language you want, spending as long as you want on it) then continuing the interview process at this point is a huge waste of time.
In those processes, the purpose was to weed out people that simply could not code at all. Or even cheat, since there are solutions all over the internet for any language you want.
A later stage was to do some programming with us, and we'd talk through issues and see how they dealt with problems/etc.
I imagine though that if you explicitly call it a weed out that a sizable percentage of the quality talent pool won't apply...unless they're a referral, and then why are they doing a code challenge anyway?
On that note: giving code challenges to employee referrals, especially hiring to their own teams, is a clear indicator that you don't trust your employees.
What annoys me is I often see companies promote an inexperienced (due to age) developer to lead or architect or some other title when they are really not that at all. The company does it to keep the person happy [read: shut them up] with a title rather than pull out the company wallet and pay more. I know dozens, maybe even in the hundred+, people who were duped into that. Often because "it will look amazing on your CV!" or "we promise we will review your pay if things work out in 6 months" in the hope you forget about it or don't want to bring it up.
The problem I have with this is that it devalues the actual lead, architects, whatever the current trendy title is.
I look at it this way - A lead developer could be lead on a very important bit of software that somehow fits into something that could cause loss of life. If it were a structural engineer they wouldn't just be promoted to a lead architect after a couple of years in the game. Same with a surgeon or registrar or a judge or detective or ... the list is very long! Except in IT for some reason.
I do not mean to belittle anyone who is a lead developer and under 30. Good for you if you really are skilled and experienced enough to truly deserve that title, my problem is over the years I would say a good 90% of those "lead" somethings under 30 are not deserving of the title.
Hm, actually I haven't seen it. For me, "lead" has a very exact meaning: a developer who is personally responsible for code that developers people write, and has authority appropriate to that responsibility.
What else can it mean?
So there are a few buzzwords in that but that is pretty much my personal experience of what a lead developer should be.
I think part of the problem is that there is no industry standard definition of what a lead developer is. It has been my experience it is abused in the ways I mentioned in my previous post.
Again this is all just my personal experience. We are all shaped by our history and though we try and not judge people automatically it will happen from time to time.
That could work for those without a job, but if I'm securely in a job, if I'm going to be switching to a 2 week contract, there needs to be a significant bonus attached.
Duolingo wanted a functioning nontrivial (albeit sparse) app, expected to take 10 hours to write. I found it amusing on its own, but interviewed & got multiple offers elsewhere in less time.
A clever option is emailing the recruiter at Duolingo with something like "hey, I've got a competing offer, so the 10 hour coding challenge is really not something I have time for at the moment. Is there any other way to proceed through the hiring process?" Either way they answer, you're okay with.
I thought work might have dried up. But I got a call the next day from somebody who had dug up my number in an old rolodex, desperate to get me to pick up the slack on a project. So, right back in the saddle!
That works better if you have 10 or 20 years of experience at different places. So there are people out there thinking of you.
I'm actually a mediocre software engineer. Making an accounting system do XYZ for the 4000th time isn't interesting anymore. Doing it in Angular with all the new whizbang whistles and shit is more annoying than fun.
I'm looking at a career switch or something different. I can't keep creating the same nonsense over and over and watch IT run by people that largely wouldn't be good as managers of a McDonald's much less an entire organization's IT department.
The first way to see if a company actually understands the importance of IT is to see whether they have a CIO or a Director of IT / VP Engineering / Other less than CIO role. If they can't even commit a C role, what do you think their thoughts are on IT?
</rant former IT Director> :-)
Though them not doing it and spending the energy to "complain to management constantly" might be a problem too. I'm sure we're all familiar with terrible management practices, but some people are complainers and some people are pushovers and you don't want either (or at least you don't want to bias your team towards one or the other).
Being able to calmly explain a process problem and demonstrate why is a critical skill. If you're in a company where that's a waste of time, don't complain, just leave. If you can't fix or guide people, your code still won't get shit done.
I think a lot of people, ourselves included, think that we're in the business of writing code, but this is actually a mistake. We're doing business Operations, yes, with the capital-O. The only difference is that our tools to get the job done are "our software, our people and other people's software" instead of just "our people and other peoples' software".
Developer is the right title for us most of the time.
From my own experience as an interviewer, "has a degree" was absolutely not even a factor when determining who was good and who wasn't.
> My time and contributions will not be appropriately valued by such a company and I won't like working there
I don't get how that's related.
> I don't want to start out a hopefully multi-year relationship on dishonesty.
There's no dishonesty there, the applicants were given a simple task to do in order to progress to the next step. If you're applying for a software engineer position and cannot even make a decent attempt at an extremely simple task when given complete flexibility then it's a waste of both of our time to continue.
(edit - I should point out that this was not at my current employer)
"Hi, I'd like to ask you to work for a very temporary contract with us so, if it doesn't work out, you have to scramble to find more work and maybe risk homelessness."
Them: "Your skills are great, nice job on the coding project. You seem like a really good fit. We want to hire you, but we'd like you to work on a temporary contract with us at first to see how it goes for both of us."
Me: "Hmm, OK, this does seem like a very good fit and I'm cool with the test-drive. My off-site rate is $150/hr, I can have the contract on your desk in two days."
Them: "Er, wha ..., no, you see, we'll take the salary we talked about and just translate that to an hourly rate. It shouldn't be a big deal, this will only be for three months max."
Net of it: after killing it in the interview, I'm offered a short term C2C contract at drastically reduced rates, doing my usual best work, while getting no employee benefits and paying my own SE taxes, retirement contributions, and all business expenses.
I've encountered such propositions only a few times in the past 5 years, and walked each time obviously, but I still find the chutzpah of these companies astonishing.
On the other hand, maybe that was the last part of the interview? They may have wanted to see if I had any self-respect, any self-confidence, could do math, and understand basic business concepts like taxation and fully-loaded employment costs? A "no" to any of these things would have meant I'd be a more ignorant, cheaper and thus much more highly-valued employee as time went on.
Edit: typo
See, e.g., http://www.jobsite.co.uk/worklife/probation-periods-19677/
For the last few years this has been written into law and employees don't get their full employment rights (such as the right to contest an unfair dismissal) until you've been employed for 12 months. (A de-facto one year probation period.)
I should note that employee rights during this probation period are probably stronger than in many US states.
In one case I know, the interviewing + travel took two work days and two nights. That's thousands of dollars for a consultant! Add to that the grand or so of travel expenses for the company, interviewer time and overall, every senior hire costs applicants + company well over ten thousand dollars, past paying the recruiting team.
Compare that to a company that does the whole process over Hangouts/ScreenHero. The waste is amazing.
So basically they find a legal way to discriminate against older candidates?
All companies can afford to waste less money than they need too.
The way a company signals their respect for my time is by either compensating me for the time I spent on them instead of literally anything else, or by demonstrating that they are spending an equivalent amount of time on me rather than anything else.
If I am doing a project that takes me 8 hours, that company should either be writing me a check (for somewhere between $100 and $500, probably) or planning the mother of all individual sales pitches to convince me to not just work there, but also to go the entire distance through their interview process.
No company has ever done this for me. Every last one of them has expected the candidates to spend as much of their own time (and even money) as necessary. Several (all of them in Denver, possibly by coincidence) have even reneged on paying travel expenses. Tyler Tech in Lakewood, CO, tried to get out of paying for my hotel room, declined to spring for a rental car, and remains to this day the most hostile interview I have ever suffered through.
They also had me drive my own car from Madison to Milwaukee, to catch a flight that actually stopped in Madison after the first leg, just so they could save a few bucks on the airfare. And then they refused to pay for the mileage between Madison and Milwaukee, after promising earlier to reimburse all my travel expenses.
I put up with an awful lot of inconvenience from interviewers without comment, but every little slight is ratcheting up the minimum acceptable offer from that company. And if you act like sleazebags at the interview, you had best be prepared to lose any candidates with an ear to the grapevine.
Resume-to-offer attrition rates are often as high as 99.9%. In-person interview-to-offer attrition rates are rarely worse than 90% and often in the 30%-50% range.
The thing about homework is that it costs companies basically nothing (one form email followed by an automatic grader in some cases), so they can afford to give it as early as possible - strictly by the numbers, this means offers cost on average 1000x8 hours. Whereas in the in-person interview case, the big cost is much later in the process, so it's more like 10x8 hours per offer.
Worse yet, this cost falls heavier on developers that have more trouble getting jobs, who are probably less likely to be able to weather that cost. Not a great situation.
Sure, Google/Microsoft have the legendary "6 hour" marathon interviews with multiple teams with lunch in the middle but for smaller scale of companies, they don't have bandwidth to mess around with all-day interviews. It's ~2 hours. In this thread, it shows I'm not the only one who prefers onsite whiteboard over homework projects so the "no developer prefers" claim is too absolutist.
>The problem developers have with "homework problems" is really a problem with bullshit companies that won't provide timely feedback on their submission.
Regardless if the feedback is received within 10 minutes or 10 days of submission, if I apply to 4 companies, I don't want to do 4 homework projects. I simply don't. At least with 4 onsite interviews, I see glimpses of the office and meet the interviewers.
The final round of on-site interviews usually eats a whole day, and is preceded by a whole battery of time-wasting phone interviews, which themselves eat as much time as a coding challenge and often involve coding with someone else over the phone or Skype.
There are companies that are not Google that have multiple rounds of on-site interviews.
I'd prefer it, since if I pass the coding challenge, I'm likely in for a airplane flight and an on-site interview anyway, so I've still lost that time from my life in addition to the time spent on the coding challenge. Unless the coding challenge is conducted INSTEAD of an on-site hazing session, in which case, well, E-mail in profile!
Very good companies can tell you over the phone after you finish work sample challenges what your odds are of getting an offer.
It's not an expensive investment for what you get, and since the meeting should happen soon after the code is written, it's easy to provide basic feedback.
Here's another one showing 75,000 resumes received in one week: http://www.sfgate.com/business/article/Google-gets-record-75...
When you have the luxury to pick the best, from the best of the best, you don't have to follow the advice given by HN armchair quarterbacks like us.
And engineer headcount costs are a huge component of their business --- so much so that they've been accused of breaking the law to collude with other companies to avoid competition in hiring!
Google is succeeding in spite of the waste and unreliability of their hiring processes, not because of them.
But there's no evidence that switching to self-paced work samples would cost them less. With Google's popularity, they'd get more false-positives from candidates that copied the code from widely disseminated previous projects. False-positives cost money.
Your medium size firm with smaller volume of candidates won't have that problem of increasing false-positives.
Sure, with whiteboard interviews, the rejected candidates (and even ex-Googlers) can write a "brain dump" blog with blow-by-blow algorithm questions but history seems to show that these don't work so well as cheating mechanisms.
What kind of work sample project could Google realistically design for 10000 programmers to complete? (It can't be as hard as "solve this Clay Millennium problem" or as easy as "reverse this string". Anything between those 2 extremes is trivial to copy to github.) How often do they need to redesign the work sample? What about objective "comparisons" which was touted as a feature of that method? What about the programmers that don't want to do the work sample? (They do exist!) Is there also a cost to filtering them out?
It's great you're really enthusiastic about work samples and want more companies to adopt it but I see no slam dunk evidence that they are the universal best method for every company.
One thing that really rustles my jimmies is the constant assertion that "false negatives are (effectively) free". I think Google and the companies who hire like them seriously underestimate how much this costs them, both the direct costs of spending so much to ultimately reject people and the indirect costs from the work that is not getting done or being foisted on another overloaded engineer.
SELECT TOP 1000 FROM resumes ORDER BY received_date
will produce 1000 job offers but speaks nothing to selectivity.But that's what the definition of "selectivity" is for database retrieval. Selectivity == n_rows_selected/n_row_count. The "larger number" was the denominator and the "small number" was the numerator.
Your example SQL is not consistent with your previous sentence:
SELECT TOP 1000 FROM resumes ORDER BY received_date
Notice that nowhere is the total row count for resumes known in your isolated example? So yeah, we don't have the denominator to determine selectivity.For examples of Harvard and Google, we know the denominators (the total applications and total resumes). Therefore we know the selectivity.
I suspect you're mixing up "mathematical selectivity" from "decision process selectivity" because Google's internal decision tree for hiring might look to outsiders as "black box" or nonsensical.
Also, asking someone to code in front of you is a terrible way to figure out what it would be like to work with them.
1) It's an artificial non-cooperative environment.
2) It doesn't tell you anything at all about how they present and communicate their ideas.
3) The absolute best-case scenario is you figure out one degree of conscientiousness, which isn't enough to build a working profile model of them.
I'd be curious to know if you know the personality profiles of the people you already work with, which profile framework you use, if you know what composite mix of profiles will lead to meeting your institutional success criteria, and then how you go about assessing a person's profile to fill the gaps that you have in that composite.
FWIW, we follow-up on what candidates thought of the interview process and it is overwhelmingly positive. I don't think it is overly stressful. Although, I'm not sure it's possible to make an interview not stressful at all! :)
EDIT: It's simple if you think of it in terms of a single project. But, if you think of it in terms of many, most of which are no contribution or a small bug fix, it can represent a large time investment. That's why I recommend candidates point out a specific piece of code.
You'd more or less need to get feedback only from people who are already happily and gainfully employed who are also close to neutral on the 'agreeableness' spectrum.
At any rate. You can remove the stress from an interview mostly the same way a therapist can remove stress from iterative therapy. By building an ad-hoc environment of trust, safety, cooperation, and goal alignment.
Hiring is probably the most important thing you can do in/for any company. It should be a time investment on your part. If you don't feel like you're given enough time to do hiring correctly, then I'd suggest setting different expectations with your leadership about how to use your time or what quality of candidate to expect given the time you have.
Seeing a bunch of bug fixes across many projects tells you a lot about that person. So rather than going into the process looking for an extremely narrow thing (like some big project they are the sole maintainer of); go into it looking for anything that's there and see what kind of information is there to help you construct a useful narrative/model of that candidate.
Lots of bug fixes across many projects may not indicate that they can own a singular vision from start to finish (though you can assess that from getting them to tell you a story about literally anything), but it does tell you that they can read other people's code, supply feedback in the way of working alternatives, will take the initiative to solve a problem themselves rather than wait for the maintainer or someone else to get around to it, and focuses on getting things working rather than design-paralysis.
First time I'm hearing about such a policy. Can you explain the reasoning?
It's most likely an overly broad means of protecting against employment discrimination.
For example, I know that where I am it's against the law to ask if someone is married during the hiring process and that's pretty clear on many Facebook pages.
In the specific case it is probably overblown, but HR fears aren't entirely rational.
I could be plenty wrong though, and I'd love to hear from HR/recruiters about their experiences with cover letters.
Hiring decisions are hard to generalize, because different companies have different needs at different times.
Won't disagree there!
How do you know what level to pitch the interview at if you don't know what language features someone understands and how they code?
Where I work we now set a small simple test which is very representative of what colleagues do because we've had so many time wasters. I'm looking to see their style, the fact that they can actually read a simple spec (apparently over half can't), and that they can explain why they approached the solution how they did. If their test is no good, we don't waste each others' time.
If someone has a decent GH account I'll look at that too - if it's sufficiently comprehensive (very rare to see anyone with a GH account at all, let alone their own projects in it) they won't need to do the homework (should take about an hour, less if they're good). This just saves us wasted time.
Remember - you might know you're good. How do you expect strangers to?
While I agree it's frustrating dealing with someone like this, often times it's easy to pick out the statements/topics that the person is regurgitating.
Google is manifestly too capriciously selective in their interviews. They are infamous for turning down people who go on to do excellent stuff elsewhere. Watching acquaintances navigate their process makes me believe the infamy is well-earned.
That's an argument that is separable from the question of how best to design the Google interview process. I think Google's interview process should be work-sample based, like I think every tech company's should be. But you could argue that either way. We can both agree that Google's challenges are sui generis. We're both reasonable and might disagree on the rest of it.
Where I don't think reasonable people can disagree is on the question of whether Google overpays for engineers. They do. They pay a tax for the luxury of being capricious about who to hire. They can afford to do that, but most companies can't.
Employment with [company] is "at-will." This means that you may terminate your employment at any time, with no prior notice given to [company]. It also means that the company may terminate your employment at any time, with or without notice or cause. While the company generally adheres to progressive discipline, it is not bound or obligated to do so.
As an at-will employee, you are not guaranteed, in any manner, that you will be employed for any set period of time. No one in the company, except the President, in a written, signed contract, may make any representation or promise to you that you are other than an at-will employee. Any employee, manager or supervisor who makes such a representation or promise to you is not authorized to do so.
Like for instance, if you were to meet me, you would probably immediately peg me as high on extroversion. While understandable given the outward traits I project, you'd have needed to really thoroughly created a controlled environment during an interview (requiring a series panel, a day-long engagement, and an intentional highly-social event in the middle) to figure out that I'm actually introverted, but have just learned how to benefit myself by projecting extroverted traits.
Now the richness of any assessment is bound by time, planning, training, and practice. If you want to get really good at it, you learn to do it in realtime by assessing people you know well, assessing yourself, then moving on to acquaintances, and eventually onto strangers. In each step you need to be aware of where your assessments are drifting from the model. Like if you assess yourself or someone else as high on agreeableness because you find that you're very typically conciliatory or trend toward diplomacy and keeping the peace amongst your peers, but you also are prone to "blow-ups" where you drop the hammer on people in rare, but consistent, circumstances (when you've "been pushed too far"), then you're probably not as high on agreeableness as you think, and are probably higher on neuroticism than you think you are.
Given enough inputs and hypotheses you can get pretty good at this. Good enough to provide useful points for making decisions given otherwise limited information. More importantly you can get good at how you setup your environments and your interactions to get higher quality signals from your limited information. For instance, say I wanted to assess someone's "Openness" because I wanted to bring them onto a team where their primary responsibility will be in driving phases of invention. The simplest pass would be to just ask them about personal activities and look for signals of risk-taking. However, one needs to control for the difference between risk-taking due to openness to experience and risk-taking due to self-destructive traits. The former would be awesome for the job role and the latter will bring down the whole ship. To control for that you'd want to put additional emphasis on assessing neuroticism and conscientiousness. Doing that can be as simple as leaving a lot of awkward pauses in the conversation and see how they deal with it. Does it make them uncomfortable? Do they feel compelled to fill the air with something? What do they fill it with? Relatable stories, trivia about their work history, etc. When they talk about anything, not just work-related things (sometimes specifically not work-related things), what level of detail do they provide? Is it consistent? Is it always TMI, always 30k ft view, or can they move fluidly from one to the other?
Things like that. Different kinds of job roles require a different kind of personality profile to be successful, and more important than that, the composite of personality profiles filling those job roles is a requirement for a healthy team where each person is competitive with themselves, but cooperative with their peers, and has the right mix of people to own each phase of the development and business process.
I've played around with the Big Five model ages ago and found it to be a really good way to look at personality. I especially liked its usefulness for self-assessment - like you say it's easy to self-deceive yourself into thinking that you're much more open and non-neurotic than you really are, but so long as you are honest with yourself it can be a good tool in understanding your own strengths and weaknesses. I hadn't really tried practising it on strangers, though, that would definitely be a useful exercise!
I'm actually in the process of setting up a crowdfunding campaign for a personal project that I'm working on, and if that goes well then I'll be thinking about bringing in more people on board - hence why I asked you about this.
I have to say, the way you're going about this is really impressive in terms of methodology. Most high-level advice in this area that I've seen is full of hand-waving and vagueness, but you've got the whole thing down to a science. Especially the part where you talk about counterfactuals! So many people overlook that.
If you don't mind answering another question, I would appreciate more of your thoughts on this. You've said that you look for particular combinations of traits to fill in particular roles (hacker, inventor, finisher, watchdog, etc.) - what are the traits that you look for in each of them and how exactly do you envision each role's responsibilities within the company? (Is there a set number of such roles that you discovered or do you find yourself inventing new ones as the company evolves?)
Also, it sounds like you've been doing this for a while and probably have quite a few people on board, which would make the dynamic of hiring someone a bit different than if you were just starting out. If you were back to square one and had to consider hiring your first employee or even finding a potential co-founder, how would you approach that?
That's not really fair though. Tons of people apply for jobs because they need a job. I've surely done it in the past. I've applied and accepted jobs I didn't give a damn crap about. I had to pay rent, feed 2 kids, and pay my wife's tuition. And even did so with multiple jobs at the same time. Anything else was secondary. I went into interviews, praised the greatness of the ideas of some shitty startups which were doomed to fail. I always showed up prepared and was "professional" (in so far as you can show up and not give a rat's ass, but not let it show), and always tried to show I was invested by having already ideas about their products, website, etc... But still, didn't actually care for that stuff.
So, I was motivated and a good "employee", but was I a good fit? Probably not.
And, on the other hand, I also actually did interview at times just for giggles. Or for practice. Or just in case. Or to get leverage.
And when I was the recruiting, while I surely wouldn't assume that the person in front of me would be "interviewing for giggles" (at first), I can totally understand the "weren't sure if I wanted to work there". Like I answered on another part of this thread: the onus / burden of proof is on you, you are the one who has to show you really want to be there (even though you actually may not).
It's screwed up, but it's how it is, because we also work for money. I know I did often. Still did my best in any job I got though.
(And you should not expect that either, actually. I'm similarly pissed by friends or colleagues who tell me "damn it's like these guys don't care about the job or don't give it all". Well, heck yeah, why would they?)
Then you are an asshole. Seriously you wasted how many people's time for your own amusement? If you want practice or informational interviews there are ways to achieve those without being completely inconsiderate and disrespectful of peoples time.
It fits that you are suspicious of other people based on your own questionable practices. Most normal people don't do this however.
I don't think anything is a better practice than an actual interview. Doing a rehearsal or workshops won't compare.
But thanks for the insult, random stranger.
Besides, if that was your only take away from my comment, I think you may have missed the main point. Maybe you were too infuriated by that point already.
And I think that when it comes to cumulative time-wasting, the culprit is usually more the interviewer (or the incompetent recruiting agency).
Also, would be interested in having data on the "most normal people don't do this" bit. I know plenty who do or did at some point, across several countries.
https://www.glassdoor.com/Interview/Airbnb-Interview-Questio...
So, discrimination is rampant because it works so well. Its not fair, possibly not legal, but hard to stamp out.
If that's the filter they want to use -- the time to apply it is before inviting the candidate to take 3 days out of his/her life to fly across the country for an interview. If it's such a huge "ding" for them that a candidate doesn't come from a certain set of preferred schools -- fine, don't invite them for an interview. It's really quite simple.
Of it's a "ding", but they want to give the candidate a "shot" -- that's fine too, but there's no need to blatantly neg the candidate right to their face. It serves no purpose; it's just uncivil and unprofessional. (No purpose, that is, other than to give the interviewer an ego rush, and thereby provide a temporary defense of sorts against their own very deeply rooted insecurities. That, and to basically deep-six the candidate's performance, and nullify whatever enthusiasm they might have had for Airbnb during the rest of the, by that point, manifestly pointless "interview").
And the fact that such allegedly highly educated people would so quickly resort to numbskull behavior like this suggests that maybe's it's not such a good filter, after all.
Now I look at what's happening with Theranos and laugh, and laugh :)
My experience is that running a hiring process that lights up only on the kind of talent that qualifies itself with a standard tech interview is ludicrously expensive. People that do well in standard tech interviews can work anywhere they want. If you can only hire those people, you are competing for talent with the wealthiest (or most overfunded) tech companies in the market.
Fortunately: performance in tech interviews is in fact not a good proxy for programming ability (in fact, there are ways in which being good at interviews can obscure deficits in candidates), and you can get ridiculous discounts to the price Google pays for talent if you don't try to hire people the dumb way Google does.
And consider the US Air Force. They have an unlimited number of young people willing to learn to fly jets. Qualified candidates even. So they can filter any way they like, and still not run out of applicants. So their filters seem capricious, because they sometimes are. And it doesn't matter.
Is Silicon Valley in that position? Depends upon who you are. I don't think Google for instance is running out of candidates.
And really there are levels of bad hire. There's the bad hire who really doesn't know how to do the job and will never get good enough to do it. That person should be very easy to spot with not too much effort in the interview process. The dangerous hire is someone who on the surface can do the work but has a toxic attitude and/or doesn't learn/grow. I'm not sure putting someone through a torturous interview process is going to root that person out.
I think where a lot of the elitist hiring is at now is that many companies aren't so much trying to filter out people who can't do the job, so much as they're holding out for who they think are rockstars. So they put candidates through the ringer with the thought that what will be left is rockstar material.
But many highly-qualified individuals won't jump through hoops for any but the top tier companies, and sometimes not even then. Furthermore, by definition, rockstars make up a very small percentage of the devs out there. What are the chances that every company who is holding out for elite coders even has any applying? Especially considering that elite people probably don't jump around often.
Thank you for confirming that you were using the colloquial version of "selectivity" which doesn't require knowing the denominator instead of mathematical "selectivity" which does.
You're using "selective" like this definition: http://www.merriam-webster.com/dictionary/selective
I was using "selective" like this: http://www.programmerinterview.com/index.php/database-sql/ca...
The following wiki page ranks college selectivity and it absolutely requires the denominator to do so: https://en.wikipedia.org/wiki/Rankings_of_universities_in_th...
That wiki page orders the ranking on mathematical selectivity and not colloquial selectivity. My previous comment of Google Inc being more "selective" than Harvard is to be interpreted as mathematical selectivity. Sorry for not stating it more explicitly to prevent confusion.
If your assertion is just that Google rejects a higher proportion of applicants than Harvard, that's... not at all interesting. The lottery rejects and even larger proportion of applicants for its 'grant' program, but I'm not going to try to learn anything from how it goes about picking winners.
GlassDoor didn't just put itself together one morning, or a free, open-source one would already exist.
Do you also spread the meme about "Viagra was invented by accident", as if all the clinical testing, information dissemnation, regulatory approval, chemical isolation, etc were accidents too?
Sample size of one, but I dropped out of a top public school, immediately started working full-time x 1.5, and ended up with a resume that my now-graduating colleagues are blown away by. A few top companies (Google and Yelp! included) have flat out refused to screen me based on no other conversation than "Oh, I never finished school because _____". Hell, I interned for a large bank and received a great job offer which was promptly rescinded after the right manager found out what everybody else already knew.
It's one thing if I fail the interview process. I get that. I know I have a lot to learn. But the way some of these companies act is just messed up. FWIW, none of my independent clients care.
Yeah, banks (and many big companies) are like that.
I once came across a job application that had TOP SCHOOLS ONLY emblazoned across the top.
Thanks for saving me my time in applying.
At some schools, the CS curriculum is focused on "pure" computer science. These curricula are packed full of theoretical CS and rigorous mathematical courses, and are great for people who hope to go into CS research or academia.
At other schools, the "CS" curriculum would be better called "software engineering." These curricula focus on programming and applied CS, giving more "practical" skills for people planning to proceed straight to industry.
At NC State, the undergraduate CS curriculum was a pretty good balance between both. You'll get a mix of both theoretical and applied CS, the downside being that you won't get very deep coverage of either. However, I feel that I was well-prepared to enter industry after graduation, and I've been pretty successful in my line of work.
Here's a small subset of what I studied as an undergrad at NC State:
Theoretical | Applied
-------------------------------------------------------------
Discrete mathematics | Java
Automata theory | C
Computability & complexity | x86 assembly language
Linear algebra | Software engineering
and some courses that offered a healthy mix of both: Mix
----------------------------
Data structures & algorithms
Operating systems
Computer graphics
Artificial intelligence
Database management systems
Multimedia systems
Human-computer interaction
Of course, there are a lot more courses offered than just these, but this is a subset of the ones I took, along with how I would categorize them. Using your restricted and free electives, it's definitely possible to plan a degree that leans one way or the other: more theoretical or more applied, but the way the required courses are laid out, your foundation will always be a bit of both. There's also a "Senior Design" capstone project, where you're put into a small team (~4 students) and given a project from a local sponsor company. You'll work closely with some contacts at that company on a real-world software project. I formed lasting bonds with my team mates, and we still keep in touch to this day. Two of us were also offered full-time positions at EMC (our team's sponsor company), where I worked for about 2 years before leaving for greener pastures.Another benefit of NC State is that it's in the NC Research Triangle area, and the Research Triangle Park is only about 10 minutes down I-40 from campus. RTP is home to a TON of tech companies, so there are plenty of opportunities for relevant employment, both for students (internships, co-ops) and for recent graduates (full-time work).
Raleigh is also a great place to live and work. Plenty to do, great job availability, low cost of living, and traffic is never too bad. The only downside is that the public transportation story isn't nearly as good as, say, D.C.'s (the bus system isn't terrible, though -- I generally found that I could get where I wanted to go in a reasonable amount of time, and there are connecting buses that will take you to nearby Durham (Duke) and Chapel Hill (UNC)).
I very much enjoyed my time at NC State, and if I could go back and choose a university again, knowing what I know now, I'd choose NC State again.
I hope this helps! Feel free to ask me questions :)
Might be smarter to have a "Where did you hear about this internship?" question instead and have "on-campus event" as a choice.
But not knowing what exactly that [part of history] was about, of course we can only speculate.
Whereas you could have also looked at it this way: "They must have seen some big positives in me, being as they asked me to come talk to them, knowing full well about [past history]." You know, the glass half-full route.
But then again, I'm not you, and I wasn't there.
So don't necessarily count yourself out immediately. Take what I said with a grain of salt.
However, since they do have lists like that (they being unicorn-type companies, I think) they quite likely do use it as a metric- maybe not necessarily a requirement.