Hacker News new | past | comments | ask | show | jobs | submit login
Hiring Is Broken: What Do Developers Say About Technical Interviews? (researchgate.net)
239 points by azhenley on Aug 15, 2019 | hide | past | favorite | 460 comments



I once interviewed at a company that had you write a traveling salesman program where you were planning the shortest path of flights between cities. It was a take home test where you were given at least a week to complete it. I completed the test in record setting time (3 days earlier than most), mine was the only one that was fully documented with comments (no one else bothered to do this), they said I had the most visually stunning user interface (most were ugly or unusable; I even animated the plane flying between cities), the program came to the outcome in the shortest runnable time, out of all the submitters they said my program was the most optimized solution (not the best ever made, but the best submitted to this company so far), and mine was the only one that actually worked correctly and ran without flaws. They then proceeded to have me come in for the 6 hour interview in which they asked questions like, "Write a working hash table from scratch on the whiteboard." I got nervous and passed the question, they ended the interview early and rejected my application.


The problem with take-home tests is you may have had help, or someone else did the test for you. If you didn't do well in the in-person test, they may have reasonably assumed that was the case. Especially if the home test was unusually good.

I was aware candidates would do things like this when I applied for job long ago. I also was aware that employers were suspicious of these sorts of things. So I brought along listings of code I'd written, pulled them out, and walked the interviewer through how they worked to show I knew my stuff. Note that they didn't ask for this, I just did it proactively. I got an offer, too, and was told some time later by the interviewer that that was why.


My company gives a take-home test. When the candidate comes in for the interview I go over their code with them and ask questions about it: Why did you take this approach? How could you test this method?

I don't care how much help they got if they can discuss their solution coherently. This also shows the candidate that we took their solution seriously.


And how many candidates spend hours of their valuable time in those take-home assignments, only to get beaten by a purchased solution?

It's wonderful you don't care about the fact that these solutions are purchased. I'm sure your attitude is a great comfort for all the honest professionals who worked hard to find the time to do a 5 hour take-home, only to see their job taken away by dishonest candidates who paid for the solution.

Taken to its logical conclusions, if your attitude is representative, then everyone should just buy take-home solutions and just spend a bit of time understanding them before the onsite. Now we're back to square one, except at least we're not actively screening for dishonesty anymore.


That's not the problem that take home assignment is facing right now. As you said, it's the experience issue, people feel shit after doing it, rejected without any reason.

If copying/buying solution is actually a problem, that means take home project is a thing that's happening, and copying is the new problem to solve along the way.

We're far from there.


> If copying/buying solution is actually a problem, that means take home project is a thing that's happening, and copying is the new problem to solve along the way.

In case you didn't know this: take-home is very much happening. I was job-searching not too long ago, and roughly 10% of the places I talked to insisted on take-home assignments. I declined all these requests because I'm a senior engineer with many options, but clearly many candidates are taking them.

There really is a problem with people buying solutions for take-home assignments, I saw that when I was hiring. It just isn't acknowledged, so effectively it has become a competitive advantage for dishonest candidates who are willing to cheat.


I was worried about that for senior candidates, and if I had a good recommendation or had some sort of screen call with them I’d usually skip the takehome.

Very occasionally the candidate came in and just was wildly off, but usually it was fine.

Later on we changed to having all candidates submit the takehome under the logic that if they’re a, “positive” candidate that they’ll be inclined to see this as an opportunity to strut their stuff. I was a little unsure about this approach but we went with it.

I’m curious how senior folks feel about these different attitudes.


> I’m curious how senior folks feel about these different attitudes.

It's quite simple: I'm a senior engineer and I will never do a takehome assignment.

Every time I'm on the job market, there's a certain percentage of positions that require a take home. I just skip them.

I don't explain my position, since I learned long ago that it just leads to arguments and confrontations with the very same recruiter who just a hours ago cold-called you begging you to interview.

I just terminate the process as quietly and unobtrusively as I can.

I wish I could comfort you by saying I ever regret this decision, but the truth is that the best jobs out there - the Google, Netflix, Airbnb jobs - do not require a take-home assignments. I guess they know better than to restrict their candidate pool in this competitive market.

It tends to be the below-average and (often) crappiest jobs that require take-homes, to the point it became a red flag to me. Now I often wonder "what kind of a desperate crappy senior engineer had to jump through all your hoops in this market, especially when you're just one anonymous company out of tens of thousands to be hiring engineers, with nothing special to recommend you this early in the process?".

In short, to insist on take-home tasks in this market is to give up on your strongest candidates. Neither me nor many senior engineers I know will at all consider spending 5+ hours on takehomes when we can easily get dozens (!) of onsites with short, fun remote screens. I will also be very skeptical of any engineer who in this market is willing to do these hours of takehomes after a long, hard day of coding at work.

One last point: it seems quite unfair rude to me for a potential employer to ask me to unilaterally dedicate 5+ hours of my rare valuable time, when we barely begun the process. It's especially out of place and comical when the same recruiter who literally begged you to interview in the first cold-call, is suddenly demanding you do 5+ hours of unpaid work. At least in remote screens, I know the employer is investing some of their own resources into this process as well.


Thanks for your candor, I generally had this sense. If we had something like, “we usually ask for a take-home but a pointer to a code sample you’d be willing to discuss will work.” Would that be acceptable?

My logic on the take home was that interviews are hard without something to talk about and contrived problems are not super reflective of real work. Therefore, I’d send a dumb version of a simple task we have, then we’d walk through trade offs and such.

If I have some code you wrote and can walk me through that’s a very useful datapoint not just for competence (if you’ve been around a while you probably are good) but for personality and how we’d work together.

Does that seem more reasonable as a trade off for your time?


I think in general all of these things just start to come off as dishonest, when senior engineers think about what makes them feel "senior," or what they respect and value in "senior" colleagues.

At some point I think senior engineers realize that coding is the absolute least of your worries as someone expected to do things like interface with the business side, plan medium/long-term roadmaps, improve dev tools or general architecture to make juniors more productive, or mentor/train/manage juniors.

When the entire process seems to be heavily weighted towards coding, it gives off the vibe that this is a company that recognizes overworking and churning out code as traits of a senior engineer, instead of shrewd decision-making, efficient delegation, smart scoping of projects, strong leadership skills, etc etc etc.

I don't want to spend my free time building a portfolio of random bullshit code any more than I want to spend time on your take home test. Because I can't for the life of me see why having an impressive (or average) github profile should be the leading indicator for senior engineering skills.

What is wrong with simple live-coding sessions on very small pieces of code while discussing objectives, edge cases, extensions, etc? Coupled with a high-level systems design session with whiteboard diagrams but no code, and a behavioral interview assessing leadership skills, extracurriculars, personality type, etc. Sane companies seem perfectly fine with sticking to this formula.

Where is this idea that we need more and more, deeper and deeper assessment of candidates coming from? What problem(s) is this solving to look at large amounts of pre-written code from candidates?


That's all very fair. The Q I usually ask of all candidates onsite is a design, "give-me-pseudocode/prototypes/class outlines" question which I find infinitely more useful in probing how someone thinks than whiteboard algorithm/coding qs. And to be clear, I wouldn't want to see BS code, but if someone had contributed to an open source project or had some sort of side project that they would have done anyway, that would have been useful.

I think our focus on code was based on the fact that everyone needed to write code. We were a small company so there was less of the architecture work. We may well have benefited from doing more of it, but we still needed people to ship lots of code.

You do ask a very important question for which I don't really have an answer: why do we care so much about these take-homes or coding interviews for people who have been around for a while?

For me I'd say because I want to have a point of comparison with all other candidates, but that's a pretty weak answer. I'll think more about it.


> In short, to insist on take-home tasks in this market is to give up on your strongest candidates.

This assertion makes absolutely no sense at all. Not being able to pass a simple fizzbuzz test doesn't mean the candidate is among the strongest there is. It just means that the candidate was either incapable of taking such a simple test or unwilling to provide any assurance that his alleged seniority made him a paper tiger.

I've personally interviewed a candidate who had a double major in math and CS, had a PhD, declared having over 10years of experience as a senior software dev, and on the first interview he showed he didn't even knew how to include a third-party library on what he claimed to be his programming language of choice he used most of his career.

That's the sort of stuff that take at home tests help weed out. If he took the test he wouldn't have wasted hours of his and our time.


I encourage you to actually read the thread before commenting.

Nobody is talking about fizzbuzz. We are all talking about take home assignments that take hours, generally 5-10 hours and sometimes more.


Honestly it's annoying and does not tell that much. We recruted once a guy that passed algorithm tests on site. We had to fire him 9 month later. He wasn't abble to handle code he had not written and was disappearing every time there was a production issue. Tottally unreliable.


If I'm doing homework I expect an office visit. And pizza, or lunch, or something. I expect to be a serious candidate.

I code and troubleshoot for $$$, and unless there is a direct route to interview + hire (or at least lunch) I'm not interested. I understand there are sorting methods needed to do hiring, and I'll play that game if I have to, but if there is no direct, up front expectation that I'm in the running then it's just kind of patronizing without payoff.


I think the previous post wasn't literally saying they would be okay with someone purchasing a solution. Just that it's okay if they had help with the problem, even it's quite a bit, as long as they actually understand the code.

I can't imagine a scenario where a person can't solve the problem, so hires someone to do it, then explains it as well as the person that actually wrote the code. If you can explain it that well, with reasoning for tradeoffs and design decisions, you might as well have written the code yourself and saved some money.


> And how many candidates spend hours of their valuable time in those take-home assignments, only to get beaten by a purchased solution?

In the few hiring processes where I've participated as a hiring consultant, take at home tests were only used in the initial stages of a hiring process to filter out blatantly incompetent candidates, who in some cases represented about 90% of all applicants. We're talking about basic fizzbuzz stuff.

Even so, in subsequent stages the candidates who made the cut were again evaluated based on their technical skills, mostly to weed out candidates who might have cheated their way through the first stage.

This meant that it was impossible for dishonest candidates to eat the lunch of candidates who were cut due to their performance of the take at home test because anyone who failed that test was obviously not a competent developer. I mean, are you expecting to be hired as a professional software developer if you can't write a for loop?


Have you read any of the comments in this thread? We are talking about take-home tasks that take 5 to 10 hours or more, not fizzbuzz.

You are naive if you think you solved cheating by checking technical skills on the onsite. What if I'm a 7/10 candidate, and someone else is a 9/10, but I cheat and submit the solution of my friend who is a 10/10. I'll get the flight ticket to the onsite, the better qualified guy will not, and you will have to choose from a smaller pool of candidates, in which I might be the best one.


My companies do something a bit different: we ask people to pick any issue from any opensource project in our tech stack and try to land a patch closing it.

We think this is better then wasting the candidate's time on a toy project - at least the can write off their time on the opensource-karma account.

Also, we can check not only their code but also their communication style and other skills that matter in the real world (projects on our tech stack have a high threshold for documentation, unit tests and other stuff that matters).

We call it "social code challenge" and it is working wonderfully for our recruiting process.


I basically like the approach, but I'm a bit wary after playing devils advocate with it for a moment.

A candidate might reasonably assume that they can look better than the other candidates by spending more time on the problem and tackling a larger or more impressive ticket. If you imagine a world where all interviews were like this, candidates could end up working 60 hours a week on these projects in the normal course of job hunting (easier to imagine if you assume that the talent shortage isn't permanent). Probably, since they can see the size of the contributions made by previous candidates, the pressure increases over time as well.

edit: it would be amazing for FOSS in general though. Imagine how much faster GNOME would be if hiring committees required you to write bug fixes for popular projects.


> A candidate might reasonably assume that they can look better than the other candidates by spending more time on the problem

The same is true with a take-home, candidates see the (often underestimated) statement "this should not take more than X hours" and assume they will have a better shot if the invest more than the X hours.

I forgot to mention that we also accept past contributions - in the end the hypothetical candidate can spread this 60 hours investment over any other hiring processes using the same method.

I'm thinking about writing a "social code challenge manifesto".


Many employers coming looking for D programmers to hire have looked at accepted D contributions to the Dlang repository. It's a great way to build one's resume and find great people.


Exactly, many people complain about about not being hired because they lack experience and they can't build experience if they are not hired.

My advice is always "build experience contributing to FOSS projects in your spare time".

We are pushing the envelope and often find bugs or lacking features. I want to hire people that can fix/implement those and send the PRs upstream instead of nagging the project maintainers.


There are no gates in the D community. Anyone can contribute. Of course, for contributions to be merged the bar is pretty high.


Seems like a good approach but beware "any issue" that's really a decoy filed by applicants aware of your hiring process. Unlikely yes, but worth considering, if only to appreciate the initiative behind such ruse.


Love this, especially with evaluating not only code but how well they collaborate. Ideally if the candidate had already submitted such a patch they could just explain it.


Exactly. And it is way easier to fake a resume than fake public reputation. For example, looking at a stackoverflow profile I can tell if someone knows how to ask and how to answer (a good question is 90% of the answer).

[1] https://stackoverflow.com/users/22656/jon-skeet

[2] https://stackoverflow.com/users/444036/paulo-scardine


That’s a really great idea. Only issue is it’s harder to compare between candidates but a little common sense would probably solve That.


This is real smart. I think more company should do this


Why bother giving a take-home test if you don't trust the results?

Why compare the results to work done in a completely different medium with no opportunity to iterate on the output, take a break or work comfortably?

If you assign a take-home test, make the interview focus on discussing the product.


Why bother giving a take-home test if you don't trust the results?

You can have one-way trust in a take-home. If they don't meet your quality bar, you can discard the resume. And it takes near zero work on the company's part, that's why so many companies like it.

However, some people will just get a lot of help on the take-home. So it isn't fair to the other applicants if you treat a take-home as anything other than a filter.


Because you can eliminate most applicants that way by cutting no/poor submissions


Yes but you also cut all the people who are good enough they know they can get a job somewhere that doesn't pull something like this.


> The problem with take-home tests is you may have had help

I think we over focus on these scary edge cases where some trickster is trying to con their way into the job. The worst case is you just fire them when they are unable to do the work, and that's on them.

Besides, what environment discourages help? I ask friends for help with my job all the time.

The cost of over optimizing for avoiding those false positives (ie: bad candidate marked good) is a huge drop in true positives (ie: good candidate marked good). It's silly.


> I think we over focus on these scary edge cases where some trickster is trying to con their way into the job. The worst case is you just fire them when they are unable to do the work, and that's on them.

The problem is once you offer them a job you stop searching for a candidate. Then you get a bad hire and even if it's quick you won't really know for a while, so then you're really behind.

It's bad enough when you hire someone who really wasn't qualified but didn't do anything bad. Now you have to get rid of someone who probably left a previous position and, like above, you have to go get someone to do the job you were hiring for in the first place. Worst of all possible worlds.

Perhaps the calculus is different in a big company, but for a startup your approach sounds pretty bad.


For what it's worth, I'm not convinced that my approach will actually let more "bad" people through. My personal opinion is that you will improve both your rate of good candidate hiring and lower your rate of good candidate rejection.

I believe that the existing system intends to optimize heavily for "reject bad candidates" and actually fails at that too.

Give candidates a take home, then review it with them.

I have a lot of reasons for believing this approach would be far superior to the "sit in a room and get interrogated for 7 hours" approach.


> hire someone who really wasn't qualified but didn't do anything bad

This sounds like a contradiction to me. How are you defining "unqualified" and "bad" here?


>I think we over focus on these scary edge cases where some trickster is trying to con their way into the job. The worst case is you just fire them when they are unable to do the work, and that's on them.

The whole reason for the long hiring process is that firing is hard (legally, financially, emotionally). If you're willing to dismiss this difficulty, you're assuming away the core problem.


In the US, where most startups are based, firing is actually quite easy. For a brand new employee, it's especially easy.

All that BS about it being hard financially or legally? Not true. At all. It's just an excuse startups use because they don't understand basic HR functions. And that's why every company of a reasonable size (i.e., more than a few dozen people) has an HR department, even if it's just one person. Because they know how to do this stuff.


So every company is wrong and you’re right?


My comments are based on what nearly every major company in the US actually does, not what people in Silicon Valley think other companies do. Since all those other companies have HR departments and most of the startups in SV don't, I'm pretty comfortable with my stance.

After all, managing hiring and firing are literally the primary reasons HR departments exist in every company making more than a few million $/year. Especially the profitable ones.


Every company in the US has an aversion to firing that leads them to use expensive defensive measures (in the case of the larger ones: severance pay, PIPs, standardized performance reviews, diversity training) for when they feel they have to go though with it.

Whether or not you’re talking about Silicon Valley, you’ve endorsed a much stronger claim, that such measures are pointless because firing is just so easy.

If you’re not ready to defend that claim, then maybe you should walk back on your original. Or at least show some some sign that you recognize things aren’t as easy or simple as your original blithe dismissal implies.

Remember, you didn’t even think the emotional side merited an acknowledgement.


> Every company in the US has an aversion to firing that leads them to use expensive defensive measures (in the case of the larger ones: severance pay, PIPs, standardized performance reviews, diversity training) for when they feel they have to go though with it.

Not really. It's just harder to hire again usually than figure out how to coerce the problem you have already to be less of a problem. That's the nature of the market right now.

If developers were easy to find and hire then they would be getting fired left and right like happens with just about any other commodity job.


This is simply not true. Employers have been hiring like crazy all across the country for the past few years.

And severance pay is not a thing for most employees, just the ones, like programmers, that have fairly cushy white collar jobs.

You need to stop seeing everything through a rose-tinted SV lens and look at it the way the rest of the country does. I'm ready to defend my claims. Are you?


But we aren't talking about non programming jobs. We are talking about programming jobs.

What everyone else does is completely irrelevant.

In the programming world, specifically, which is what we are talking about, firing is extremely costly.

This is proved by what companies in the programming world are doing right now.

If you disagree, then you are disagreeing with basically every major tech company in the world. And personal, my bet on who is right would be those tech companies, not you.


Oh if we're going to limit this to programming jobs then I know for a fact that the majority of programming jobs do not pay for relocation or a signing bonus. Especially not in the startup world.

And when they do, it's standard practice to require that relocation and signing bonuses be repaid if the employee resigns or is terminated within a certain time frame after joining the company.

I work pretty regularly with HR. Do you?


I have worked at 5 different companies over the years, and Every single one of them was absolutely terrified of firing engineers.

Not only have I worked at a bunch of different companies, but I have also straight up failed at some of the earlier jobs, and have been in situations where I absolutely deserved to be fired, yet it took literally months for anyone to even approach the topic of my performance.

I am talking, situations of me not doing any work, for months, because I didn't care and was looking for new jobs during that time period.

My experience has shown to me that engineers are pretty damn untouchable. And yes, these have been (mid sized) startups.

The one time I had a reloc bonus, of a job that I left after 5 months, they did not ask for it back, and simply never talked to me again.

It is not about signing bonuses though. It is mostly about things like bad Glassdoor reviews. Many engineers would never ever work at a company where the engineers were constantly terrified of, and complaing about being fired quickly.

Also, disgruntled ex employees are something that you don't ever want to deal with.


I'm not saying to not interview people I'm saying that the existing process is petrified of a bad apple making their way through it, at almost all costs.

How many people can truly, reliably, "fake" their way through a take home? How many people could then do an in person code review and fake their way through that as well?

I doubt it's that many, but you'll get way better returns on good candidates, in my opinion.


Firing somebody can set you back $100,000 (or more if they're in a protected class). Worse, a bad hire can wreck your schedule.

I've encountered programmers who know their stuff, can talk about it intelligently and knowledgeably, but cannot write code worth spit. It's not as rare as you might think. It's sort of like someone with an art degree who has no talent for actually painting.


It's just silly that startups will go months without filling a position so they can avoid spending a week on a person that they might need to fire. This is an example of a premature optimization. A problem faced by less than 1% of companies nationwide is not something you need to worry about. It would be like leasing the top floor of an office building in Silicon Valley for top dollar because you heard that NYC occasionally floods in the winter.

If someone is in a protected class and they get fired within the first week, does anyone really think they'll win a lawsuit alleging discrimination? Does anyone actually think they'd get beyond a motion to dismiss (usually the first motion filed by a defendant)? If the employer was discriminating against protected classes they wouldn't have hired the employee in the first place. These types of claims are quickly dismissed and usually incur minimal legal fees.


So, to be clear, firing is not the goal, it's just the worst case. 100k sounds high but honestly, not something I'm familiar with. I wonder how much money is lost on recruiting being so ineffective? Given that the current process is about ~6-7 hours of eng time per on-site candidate, I'm not convinced that the cost of firing is going to outway the costs of recruiting being considerably optimized.

I'm not sure I see how someone is going to: a) Write a take home project b) Explain their design decisions, respond to code review, etc, in person

and somehow not be able to "write code worth spit" or otherwise game the system consistently.

edit: Would love to hear (in the US) where that 100k comes from. At-will state means I can fire you for whatever reason, can't imagine it really comes close to 100k tbh.


Don''t know why you're being downvoted, but 100k is definitely not the cost of firing a just-hired employee in the US.

If you're paying a new-hire-fast-fire more than the salary due to them for the period worked (and any other amounts listed in their offer letter, if one existed), then you need to talk to a labor lawyer because you're definitely doing something wrong...unless you're paying them to shut up about the experience.


Lots of costs:

1. relocation expenses

2. starting bonus

3. headhunter fees

4. severance pay

5. COBRA

6. it can take a while to determine they're incompetent if they're good at the facade

7. if they're in a protected class, you have to go through a period (often 6 months or more) of documenting their incompetence and leaving a trail of trying to help them improve

8. firing someone always comes with it the risk of a lawsuit, and meritless lawsuits are commonplace, but they still cost a LOT of money to defend.

9. disruption to your team, scheduling slippage, having to allocate someone else to fix the incompetent work, etc.


If you actually think those are the costs of firing a new hire, you need to talk to a labor lawyer immediately, because 1, 2, and 3 are hiring costs which don't apply to most jobs--startups included. Only in the rarefied world of FAANG and VC-funded money-losing unicorns do new hires get relocation expenses and a starting bonus. Even associates starting new jobs at BigLaw firms don't get paid relocation expenses or starting bonuses. And if you're doing the hiring in-house why are you paying a headhunter fee?

5. COBRA is paid by the employee, not the employer.

6. Somehow every other industry except programming manages to do this just fine.

7. This is completely and utterly false. If a new hire doesn't work out you can just let them go. Somehow, companies do this all the time without issues, including companies with much cushier jobs than startups.

8. Everything comes with the risk of a lawsuit. You're prematurely optimizing for the 0.0001% case, for an imagined scenario that isn't that expensive to defend.

9. Most of these apply to leaving the position open for months without filling. So let me add one to your list that applies if you don't fill the job: employee burnout leaving to existing employees leaving before the open position is filled, leaving you with more positions to fill than you started with.


Paid relocation expenses is fairly common outside of SV for highly compensated employees, however, they are structured so that you must pay it back if you don't stay employed for a certain time (usually a year). I've never heard of a relocation bonus that wasn't structured this way.

Retention bonuses and starting bonuses are structured the same, you sign an agreement to get that bonus that says you pay it back if either you or the company decides to end employment within a certain timeframe.


I agree with you for the most part, however, you keep claiming that relocation are not usually paid. I know that relocation packages are very commonly offered to programmers, even in entry-level positions, in the finance and oil industries.


> severance pay

Unless this is a contracted for benefit, this isn't a separate cost from lawsuit risk, but a mitigation of lawsuit risk: severance pay is paid to people on condition of waiving claims.

> if they're in a protected class

If you start a sentence this way, it's a clear sign you don't know what you are talking about. Except for a few special cases (“age over 40” and “veteran status”), every employment protected class is a dimension on which discrimination against any value is equally restricted, and everyone has some value on each axis (race, sex, etc.)

So, everyone is “in a protected class”. Well, several of them, actually.

> you have to go through a period (often 6 months or more) of documenting their incompetence and leaving a trail of trying to help them improve

No, you don’t, and you can’t really count this “requirement” and lawsuit risk as separate costs, since this is simply a policy companies adopt to mitigate lawsuit risk.


> you can’t really count this “requirement” and lawsuit risk as separate costs, since this is simply a policy companies adopt to mitigate lawsuit risk.

Mitigating lawsuit risks is costly.


> Mitigating lawsuit risks is costly.

It certainly has a cost, but it's part of the cost of lawsuit risk, not a separate, additional cost.


Oh, those are costs of hiring someone, not just the firing.

And I said earlier I maintain that my method of interviewing will actually reduce those costs.


And when you fire someone, you have to hire another. So the costs are incurred because you made a bad hire.


This all feels like a stretch.


Think of it this way. If I sell my house, I pay a 6% commission. If I reject the offer, I still owe the commission. I pay the commission. Then if I sell it again, I pay another 6% commission.


I understand your misunderstanding now.

If you sell your house, you pay a 6% commission on closing. If you reject the offer, there is no closing, and you don't owe the commission. Because the house didn't sell. If you sell the house, you can't sell it again unless you're committing fraud...But assuming you meant you find another buyer, and successfully close with the second buyer, you would then owe a single 6% commission to your real estate broker, not two 6% commissions.

This is also not how recruitment bonuses work, and I say that as someone that works closely with HR on the tax/legal side of things.

If you pay a recruiter a recruitment bonus, their recruited employee has to remain with the company for X amount of time (aka "trial period"). Usually at least 3 months, but it varies. Once that happens, the bonus "vests" and is due to the recruiter. (Many recruiters will try to get paid before the trial period ends, but you don't actually have to pay them yet.) If you terminate the employee before the trial period ends, the recruiter is not owed a recruitment bonus. These are all standard provisions for recruitment contracts involving 3rd party recruiters. (Note: this is for the contract with the recruiter, not the recruitment employee. The employee's employment contract, if any, may not include any language about a trial period.)

Of course, it's very possible for a startup without an HR department to leave out the trial period language from their recruiter contracts. Because they didn't know any better because they didn't think that HR personnel provided useful functions. Now you know why HR departments exist.


> I'm not sure I see how someone [...]

I understand, it isn't intuitive. I hope my analogy of someone well trained in art, yet still can't paint worth a damn, makes sense.

Or pilots who ace all the pre-flight training, yet simply are too uncoordinated to fly well. (That's me. I know all about flying, yet should never be in the pilot's seat.)

Some people are just unable to synthesis good code out of all their knowledge.


I don't really like arguing analogies. I'm not convinced that a take home + code review is easily gamed.


I've seen it happen often enough to know. It's not that hard - just read the code you copied until you understand how it works.


If they understand how it works well enough to go through a code review and modify it based on that code review, what's the problem? That just... sounds like what your work is going to be.


> what's the problem?

Good question. Like I said elsewhere in this thread, there are many people who are knowledgeable and intelligent about coding, but cannot code. They are different skills. I've met many people like this.

I could study Romeo+Juliet and know everything about it that lit professors know. But I could never write it.

For another example, from my time at Boeing, the engineers were divided into two independent groups. One group designed, the other group analyzed and checked the designs. They were different skills, and the engineers would gravitate to whichever path best suited them.


My point is more that if they can do all of those things and "game" the interview they seem like a good hire.


It’s because everyone is copying Google.

FAANG companies have this problem: when you hire thousands of people a year, a higher false-positive rate is a big deal.

When you are startupbro.com, you don’t have this problem, but you’re desperately cargo-culting your way to success, and doing anything in a way that goes against the grain causes the other bros to accuse you of “bad signaling”.

See also: why tech companies cram together in San Francisco.


>when you hire thousands of people a year, a higher false-positive rate is a big deal.

My friend's employer is currently hiring thousands of people a year with a single interview lasting 1-2 hours without problems. Some highly technical and some manual laborers.

Then do this by putting new employees on a probationary period for the first six months. Many of their employees are union, and it still works out, the unions agree to this arrangement.


Couldn't agree more. Almost every startup in LA I interviewed with seemed to suffer from some sort of imposter syndrome. Even a hint of a question about their technology choices or their business model and they look at you like you just ran over their dog. HOW DARE YOU QUESTION THE GREAT AND WISE WIZARD?!??


> firing is hard (legally, financially, emotionally)

How is it that, simultaneously, firing is hard and job security sucks?


Job security doesn't suck, at least not for developers in a strong economy.


It's really not that hard at all to fire someone, at least in the U.S. I think most companies do it because they don't know any better and they heard that's what Google does.


>The problem with take-home tests is you may have had help, or someone else did the test for you

Ask about the code. Ask about the thought process. Ask how to debug it. Ask how to change it or improve it. Put one of the company's team members with them and pair code for half an hour. Find a bug or two and fix it.

There's no lack of questions to confirm if someone did the work themselves. This is easy to figure out once you have working code in front of everyone.


I've had candidates who can explain it all, and aced the take home. Failed all interviews. I spent 20 minutes chatting amicably with them letting them enthusiastically ask questions and then asked them to iterate an array and PR nt the elements. Print function was given. Array was given. They could not write the code in 40 minutes. I did this make good interview after the candidate had tanked their other interviews on tech and soft skills. Even if your Terrible on a white board you should be able to write a for loop.

Had other candidates totally ace the take home and flat out state first thing that they can't code and ask to switch to a non coding interview or to go home.

Some people spend a lot of time practicing to cheat. Given how much this industry pays it shouldn't be surprising.

Both of these happened 3 weeks ago when I was interviewing 32 candidates in a event. But several times in the last few years as well.

No I don't have statistics on this or pure confirmation... Kinda hard to get that info from suspected cheaters.

There are problems with every type of interviews a d they're hueristics for skill not a judge of skill.


Anxiety on the first interview maybe?

I would love to meet someone who was at ease, could explain code in detail (including talking about looping over arrays) and then NOT be able to produce that code.

The second one flat out cheated, but I bet they wouldn't have been able to explain the take home so you might have caught them.

Kinda weak speculation on my part but I guess I could be wrong. I've literally never met anyone like that.

What is the take home like? Maybe the code/answers have leaked somewhere?


The second one could infact explain it all. And could solve design problems. This happens a lot actually, rusty former coders or people who learned in college and never actually did it so it stuck.

The first one could also explain the code fine. Interviews 2 and 3 they were comfortable and able to design decent systems but fell over on code. This why I was given the task of "get any code whatsoever after you put them at ease"


You can cheat by paying someone for the solution, and it also comes with a clear verbal explanation that you can read.

What GP describes is more common than you'd think. Not surprising when the prize for cheating is a 6 figure job, and there's no penalty at all for getting caught.


I've seen cases where people had a friend, someone they were dating or a cs major roommate who it was very likely did the code for them (they mentioned these people encouraging them in interviews)

In the gp scenarios they said they were able to Google almost all of the take home and stich the parts together. The overall solution/problem isn't Googleable, we checked.


It doesn't have to be Googleable. There are many people offering to provide solutions for take-home assignments for pay.


Re getting help. If you can get people to create high quality code for you on short notice you’d actually be a great asset to the company.


Cute, but practically it's often easy to muster resources for the short term that you can't reliably access long term.


The problem with take home tests is that they take up a lot of your spare time.


Or put more succinctly: https://twitter.com/mxcl/status/608682016205344768?lang=en

"Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so f* off."


Is it just me or does this reasoning not make any sense?

"NASA: 90% of our rocket scientists use the A/C you just fixed, but you can't explain how a rocket works so f* off"

Presumably what matters is whether homebrew is technically significant or relevant, not just that they use it?


If anything it's the reverse: "NASA: 90% of our rocket scientists use the rocket you designed, but you can't fix an AC so f* off"


I'd think that writing an extremely widely used package manager is good evidence of your competency as a software engineer. Whereas in your analogy the qualification is totally irrelevant to the position.


I think it's just you.

0. The actual job of a software developer is usually to develop software with some real-world use and benefit, not to write cs101 code on a whiteboard while someone watches you and grades you for speed and accuracy.

1. Software is what Google does, and Google does tons of software from tools to infrastructure to services to games. If you created a key software tool that tons of people use at Google to do their jobs, it's pretty relevant.

2. Software isn't like doing routine maintenance on an existing A/C system - it's usually somewhere between inventing A/C and creating a new design for data center A/C systems then building, deploying, and operating it.


Without making any judgement about this particular situation, this logic isn't sound:

1. I develop tool X, which is a simple popular solution.

2. Some company Y is hiring engineers to develop solutions that are far more complex and demanding than what my tool does, for instance because they have to support billions of concurrent users.

3. I deserve the job because most of Y's engineers use the simple tool X that I developed, even though the job requires far more advanced skills than I have demonstrated writing X, and I actually don't have these skills and will totally fail at the job if hired.


I think Noah's point was that homebrew wasn't a simple tool. And, not only was it evidence of the developer's capabilities but it was also used extensively by all of the employer's own engineers. A tool they all relied heavily on to get their own jobs done. Making it clear he could create software they found important for their own production. And, made it possible for them to deliver service to billions of users.

He got nervous on the whiteboard when asked a relatively simple question. They proceeded to shut him out of the position, completely disregarding his ample qualifications signified by their extensive use of his product. Which is a kind of tragedy.

Comparing an A/C unit to rocket science isn't an equivalent comparison. I can't think of a good analogy to be honest, but that isn't even close.

No other field I can think of really has the problem ours does. You can either make A/C units and rockets, or you can't.

But, in software engineering, it is highly possible to be able to say..... develop high quality GPS mapping software from scratch used by the Navy. Then turn around and have a company making word processing software reject you because you couldn't write a Mandelbrot fractal generator from memory on a whiteboard with a marker.

The fractal generator has zero to do with their word processing product and will never be a useful test of your abilities. Clearly the guy who made GPS mapping software can figure out how to write a word processor. Not to mention, they already have the word processor written so he'd only be assisting them in maintaining their existing code. In other words, he's already demonstrated his ability to write and maintain code of a high caliber. None of it makes any sense.

I really don't think any other field has this issue. It is weird as hell, and unusually pervasive in our culture.

Edit: It won't let me hit reply on your comment below. I think we've hit the maximum length for this comment thread. But, I'll respond by saying I don't know what position he was applying for. I'm not sure he ever explained beyond that tweet. The first I heard about it was Noah mentioning it. But, if it made their lives easier so they can deliver products on time to their own customers it makes sense they have a position somewhere in their company that would be a fit for him. At the very least it proves he is a good developer. Massive systems like the ones Google creates are made by many good engineers working together to make it possible.

The point was they knew he was a good dev.


Our field isn't quite so unique, and the rocket vs AC example is actually perfect.

Both are engineering projects. But one is simple and a solved problem, the other is far more complex.

The fact that many people at Google use Homebrew doesn't automatically qualify a Homebrew developer to work at Google. Maybe Google would develop Homebrew by itself if there was no tool like that available. Perhaps it would do a better job than said developer. Either way, it doesn't automatically imply that you can do whatever it is Google wants you to do just because you developed a tool that some of their engineers use.

Also, let's get real, to say that Google engineers use a package management system to "get their work done" and then describe said PMS as integrally related and essential to their work... more than a little bit of a stretch.


I'm just making a point about the abstract argument. I have no idea about whether Homebrew is technically impressive or not, but it sounds like people think that it is?


Your analogy doesn't make sense. He didn't fix the A/C, he invented it


It’s just you. Do you know what Homebrew is? Do you agree with Google’s no-hire decision?


"I developed a simple popular tool that many of your employees are using, therefore you must offer me a job that requires far more complex skills that I cannot demonstrate."


Simple is good in software engineering. Far too many unnecessarily complex solutions out there.


Simple solutions for simple problems. More complex solutions for more complex problems. It's quite possible that the problem Homebrew solves is much simpler than the problems Google is hiring engineers to solve.


I always felt like this meant that google dodged a bullet. Not being entitled is perhaps the most important thing I want when hiring. I really don't see why developing homebrew should guarantee a job at google.


It doesn't guarantee a job at google, but I don't think that was the point. If he feels that the reasons for his disqualification are absurd, how should he voice that frustration while not being perceived as entitled? Are hiring practices beyond critique?


I once interviewed at a company that had me write a couple styles of matrix multiplication in C as a take home test, as well as give a one-page description of a project I had done. The project I described heavily involved graph searches.

Then I had a phone interview where they started off by commenting that I was the only one to include tests and address undefined behaviour. Then I had to write a piece of code to traverse a tree and add numbers, I can't remember what it was exactly, but I got nervous and messed up somehow.

Then I waited for 2 weeks just to hear back that they wanted someone more experienced with graph theory.


Expecting perfection on a white-board test is setting everyone up for failure. At best that's a large napkin exercise. Though having a failure, or a point where for whatever reason production is a bottleneck (if they happen to do it without obvious faults) is an opportunity to identify that either thing is the case in that section and move forward with how they'd react; what should be changed, etc.

We're all still human; expect failure to happen. See what happens next.


100% agree. I interviewed at Microsoft nearly a decade ago now. I was told I'd be interviewing for the company, and then if I was hired, based on preference and ability and need I'd be placed with a team

When I got there I was told I'd be interviewing for the SQL Server team, interesting work, but not something I'm interested in. I had never taken operating systems in university because it was always available at a time that another class I HAD to take occurred.

So by some random chance, I'd never heard of a semaphore. Perhaps inexcusable at this point in my career, but I was ignorant of the topic at that time.

My first interview question was to write a way to let many readers on a resource, and only 1 writer, with no readers reading at the time of the writer writing. I decided to use lists of something or another, ProcessId, or something similar.

Every time I would go to write the code, i'd get a few characters in, and the interviewer would interrupt me and ask me questions to help me along. Since I had no idea what a semaphore was, much less that I was supposed to use it, we spent like 30 minutes of this back and forth, me trying to write, him interrupting me. By the end of the session I had a single line initializing a list written.

Some of my other interviews during that battery of interviews went better than that one for sure but, needless to say, I didn't get the job.


My favorite interview experience was when I passed a live coding exercise on Monday and had time to optimize, then completely failed the exact same problem on Friday with a different company because my nerves hit me.


I feel for you man, I drove 4 hours from Sacramento to Palo Alto for a great start up job. I nailed the phone interview and thought all was going to go well. The first onsite interview went pretty well. The second part went south and my nerves got me. I really wanted the job but I blew it. I got good feedback and I'm working on interview problems. It was my first interview in 20 years but again I really wanted the job.


You are not alone in such experiences. After going through something like that, I no longer do take-homes.


If I were ever to give a coding interview, I wouldn't be asking the candidate to implement a certain data structure, but rather explain the pros and cons of using say, an array vs a linked list and when you would use one over another. Because at the end of the day, you will not be implementing them but using them.


At a previous education startup I did a lot of interviewing of candidates. The question I feel gave me the most insight into candidates was very, very broad. After explaining (generally) how the company’s product worked, I’d ask them something like, “Let’s have a conversation about how you would design a system to distribute e-textbooks to students.”

I would reassure them there is not a right answer, that the exercise was just asking them to engage with the question. It was so effective as an indicator of future performance, and, according to those who eventually were hired, felt fair to them.

Of course this implies all my biases to people who can have a 1:1 convo about a very vaguely specified problem and so on. No idea if it’d be positive for everyone, but I wish someone would interview me like that.


Exactly, after years and years of interviewing and building teams I learned that the best way to interview about data structures is to do Q&A related to them.

Even if you are going to work in a project that requires building such structures, I demand that you don't do it from memory, but make sure to get help from resources to ensure that your structures are sound.


If they were willing to give you a top compensation, then OK, writing hash table from the scratch is a pretty common question at Google/FB. If it was for some generic job with generic pay, they did you a great service by rejecting you.


"Writing a hash table from scratch" is a programming 101 problem just slightly harder than FizzBuzz, but not by much.

Though I guess these days I guess 'software development' means downloading Javascript crap from github and copy-pasting CSS.


> "Writing a hash table from scratch" is a programming 101 problem just slightly harder than FizzBuzz, but not by much.

No, it's bloody not.

What's your hash function? Why? What do you do on hash collisions. How many buckets and how big? Does your hash function map to identity or not? Do you exclude certain fields from hashing? How do you handle contention from multiple threads? I can go on and on.

The fact that you think writing a hash is easy betrays a stunning amount of ignorance.


To be fair, the interview question a few posts up mentioned a working hash table, saying nothing about efficiency or thread safety. (though such a question could be gamed with a linked list as a "well akshuolly" a single-bucket hash table...)


That's the difference between a hashtable you might want to use in practice and a toy example to have someone write some code while quizzing some CS theory.


> I got nervous and passed the question, they ended the interview early and rejected my application.

When interviewing, we test for presentation, self-control and anxiety as well. For me it's not a big deal, but for the guys that were interviewing you it seems it was.

Software development is a very stressful job, if you can't even handle the interview, how would you handle real life (c) at this corporation?


Software development does not have to be a stressful experience. I'm sorry that you believe it does as that implies that your experience has largely been stressful.

In my mind, that perspective is a huge red flag for me when I'm on the job hunt. If you are trying to stress me out in an interview rather than make me comfortable then I have to thank you for letting me know before I started working there that you would be exhausting both physically and emotionally.


It's just the sign it's a terrible place to work at.


What they do doesn't make sense at all!

The company chose to spend a lot of time evaluating all these take home projects, in the first step, and then reject people for silly reason afterwards? It's a lose-lose situation.

Sounds like their hiring procedure is deeply broken.


Let me give a charitable and slightly less negative interpretation:

It may have looked like the applicant had someone else do the take-home assignment for him.

That said, I imagine that they could have interviewed in a more constructive way that may have been less stressful (e.g., walk us through your thought processes as you completed this take home assignment — most frauds can’t do this convincingly).

The company definitely could have done better. If you have someone hitting a home run on a take home assignment, at that point a no-hire decision better have some very strong justification behind it.


I went back and looked through my emails with them. When I asked why they rejected not only did the cite the interview questions as a problem they didn't like that I was vague in response to "What is your GPA?" I had responded "Average"


Wow!

Sounds like there are better places to work.

I hope you landed in a good place.


They asked for a very specific question with your GPA and you didn't answer it. I don't know what you'd expect.


That sucks, I'm sorry. How do you know the quality of others' submissions?

>I got nervous and passed the question

I didn't know that was allowed. Has that worked for people in the past?


The employer informed me how my results fared.

I went back and looked at the emails. I can't edit my original comment so I'll jot the corrections here. They gave 3 days not a week. I completed the submission in 7 hours, they required you track how many hours you spent and when. I used a genetic algorithm to solve the problem. And, I took advantage of multiple cores if they were available to divide the work load.

Looking at the email there were signs even in their review of my submission that their outlook wasn't completely rosy. They mentioned things like how I failed to correct for differential conversion factors based on global location and stuff like that.

Skipping the question obviously didn't work out for me as I didn't get the position.

It was a weird experience to be put on the spot with such great skepticism with all my past accomplishments and knowing how much they respected my test submission. In a way it was humiliating. I didn't leave that interview feeling very good about myself. I still regret it to this day. In some ways I wish I could go back in time and pass on the interview, I think I would be more confident today.


Thanks for the update; it makes more sense now.

I bombed an interview where I couldn't understand the prompt, literally. Like the interviewer spoke it to me, and I restated the problem, and he said "no it's…" and drew something on the white board, and I listened and restated it, and we went back and forth like that for about 15 minutes. To this day I don't understand what he was asking for, only that involved a rate of bank customers and a Greek lambda.

Getting good jobs means pushing your limits and it's therefore a numbers game. Feeling shame from rejection is natural, but also generally unhelpful these days, so it's worth unlearning.


I remember doing a take home and adding it to github as requested by the company. Then I realized every one else who applied did the same thing and left up their solution and found all the other candidate answers using a simple search. This was prior to github making private repos free.


I was not expecting your story to take that turn... that sounds like a bad experience! I hope something better came along.


I've worked on pretty cool projects since then at other companies. And, it isn't the only interview I've ever had like that, it is more common than I would like. It is sometimes very hard for me to prove myself. Even though I've had plenty of jobs in the past with proof I can code and with good references. I sometimes feel like I'm an imposter, even while kicking ass on a project.


There is a lot of discussion in the comments on this thread about take home tests not being useful. I believe we've have a pretty good hiring process that makes significant use of take home tests (16-18 hours of them in fact). At the same time, I assure you that we care deeply about making the best use of our and the applicants time. This is what we do to make that happen:

- We make a commitment to reply to every candidate who applies as instructed. Not every reply can be detailed, but candidates are never applying to a black hole.

- We have a very detailed job description that answers a lot of the questions many developers have about a company up front. There is always a chance that we are lying or don't live up to what we say, but the info is at least there so the applicants can make an informed decision about whether they are really interested in working for us. The details about our application process are also stated clearly up front so that candidates know what they are getting into.

- We ask pretty in-depth follow questions about technical experience to make sure it aligns with what we are looking for. This filters out a decent amount of candidates who would be unlikely to pass the rest of our process saving them and us time. Other than roughly validating that the candidates work experience falls within the range we are looking for, we find resumes to be mostly useless.

- The initial "take home" exercise we ask applicants to complete takes 60-90 minutes. It's not a coding exercise and they are given a document that helps them prep for the work they are going to be asked to do. We have found over time that this is more predictive of success in our organization that doing an initial phone screen. Candidates are given relatively detailed feedback on this exercise, usually within 3 business days of submitting their work.

- The next step is a Zoom interview. We have a few very basic coding tasks that we ask them to do as part of this interview. These tasks are representative of real world skills a developer would need and not in any way convoluted or academic. The environment could be challenging for some due to the fact that we are watching over their shoulder, but again the tasks are very basic and the goal is simply to see that the tasks are able to be finished in a reasonable time. This isn't to tell us if the candidate can do the job, it just helps us filter out candidates who are likely to fail badly on the next part of our interview process. It saves them time and us time and money. We have occasionally passed candidates on this step who seemed like their bad performance might have been from nervousness and, to date, those candidates have never performed well on the rest of our skills tests.

The candidate has an opportunity to ask any questions they would like during this interview.

We also talk about money at this stage. Our salary range and benefits are published on the job description so we ask the candidate what their expectations are from a compensation perspective. If they are reluctant to share details, that's fine, but we at least confirm that they understand that our published compensation is what we are actually planning on paying and ask that if that is not suitable to them, that they let us know that now before moving along in the process.

Only if everything is aligning at this stage, do we then ask them to commit to a significant more time working through our skills tests process. Our increasing "ask" of the candidate's time is deliberately progressive. We are trying to only ask more of them when we have had the chance to vet them for obvious mismatches and vice versa.

- We then move into a two part skills test process (16-18 hours). All candidates who move on to these tests are compensated at around $50 per hour. All tests are timed and represent real world tasks our developers do on a daily basis. The first three have to be scheduled and proctored but the fourth is really "take home" and can be done at the developers leisure.

If they pass all of those tests, the work on the fourth test goes through a code review process and is then reviewed with the candidate as part of their second video interview, in a very similar way to how we would do a code review for one of our projects.

- Finally, if all that goes well, we do an on-site interview which is mostly a work day (or two) with the project they are working on, again, very representative of the work our developers do on a daily basis. The costs of travel and lodging are compensated at this stage, but we are not paying them hourly. The work they do for us is not customer based work and does not generate revenue for us.

I can't say this is a perfect process and it is a lot to ask of an applicant. But, we also put a lot of time and money into this process for those who get to the later stages. So it's a "give, give" if you will.

I'm sure some will take issue with this process and some don't apply because they don't like the intensity or commitment involved. But I honestly can't fathom trying to decide on someone's technical ability by spending less time seeing how they handle actual programming tasks. So, we do ask a lot from applicants, but our skills tests work out ok specifically because:

- As much as possible, our process is designed to be "evidence based." We rely heavily on skills tests and evaluations that look at how the candidate does work that is very similar to the work we actually need them to do in the job.

- We work hard to provide the candidate with all the info they need from us to determine if we'd be a good fit for them before we ask for more than a few hours of their time

- All programming tasks are done on their own machine with the editor/tools of their choice (we do choose the language the skills tests are in which align with the technologies which are posted as required in the job descriptions)

- All programming tasks are highly representative of actual work a candidate would do if they were hired. The fact that they are timed is probably the one thing that is most "contrived" about the tests.

- The skills tests are paid at ~$50 per hour

- The grading of the candidates work is pretty straight forward. We have a rubric of sorts for what we are looking for and, to the best of our ability, that rubric aligns with the same things we'd be looking for during a code review of one of our employees that was working on a customer project. There are no trick questions and there are no academic or algorithmic oriented questions (because our day to day tasks don't usually involve those skills)

- While it's possible someone could get another developer to take the skills tests for them, the on-site work day(s) would likely reveal their deceit rather quickly. And, if not, we are a small organization and would figure it out pretty quickly if they made it all the way through and actually started working with us.

I'd love to have a simpler and less time consuming process for everyone's sake (it takes a lot of our time to administer this process too). But without the validation that comes with the candidate participating in these exercises for us, hiring becomes more of a guess than an evaluation. At least, I haven't figured out how to do it differently yet and the advice I read hear on HN and elsewhere about dev hiring hasn't convinced me of a better way to do it.

We do offer some candidates the option of skipping the on-site interview and instead work with us in a 30-90 day contract to hire situation. This is actually, probably, the best scenario for us but it obviously doesn't work for all candidates to leave a stable employment situation for such an offer.


The key thing is that you filter out anyone you aren't willing to risk paying $800 or more to do the testing before asking them to commit to the extra time.

This is pretty onerous, but it should be pretty damn good at rejecting bad candidates.

I do wonder how many good or great candidates you lose with this method, though.


They'e also likely filtering out anyone who currently has a job, or a family, or even is interviewing at other companies. The process described here and in the posting at https://www.level12.io/careers/full-stack-web-app-developer-... is on the order of 30 to 40 hours. That's a massive time commitment.


I've wondered that myself. I don't know of a good way to evaluate that. I've thought about looking at bounce rate on the job description page or even showing a popup on bounce detection asking for feedback on the job description and application process, but haven't executed on either yet because I'm not convinced the effort would be worth it. If someone is going to bounce, how likely are they to take the time to tell us why.

It's also more than just the $800 we pay out. I personally proctor and grade the tests. That takes me 4-6 hours. Given my billing rate and roll in the company, that's arguably a greater cost to us than what we pay out to the candidate.


What's the salary like to jump through all these hoops?


80-105k plus 1-2k "profit sharing" "bonus" for usa-only remote

https://www.level12.io/careers/full-stack-web-app-developer-...


Is this really normal for web developer? I don't work in web dev, but I would absolutely not put up with this for only a 100k salary and getting paid roughly one grand for an interview process that takes in total days.

Reason why is because I've had interviews at other companies which are far less interrogative from the company towards me. For example, for my current job (embedded systems) I had:

- 30 minute phone interview with a technically competent hr rep - a quick very easy online quiz (multiple choice/few sentence answers) -one more 30 minute phone interview with a developer (open ended technical discussion) -onsite for roughly 2 to 3 hours with a dew developers, all very open ended technical discussions

It was honestly the best hiring process I encountered. I didn't feel like I was even tested during the interviews, it was genuinely enjoyable technical conversations.


As best I can tell, our process is not typical. But it's also not fundamentally a bad thing. It obviously doesn't interest you and I'm sure there are others who wouldn't apply for the same reason.

But, there are others out there who appreciate a more thorough approach and might view the process you described as inadequate.

Also, our salary range is higher for senior devs.

I think what matters is whether the process being used by the organization is resulting in the hiring of developers that are a good match. I'm glad we are doing things this way even though it makes hiring take longer and likely filters out candidates who could do the work. It's an imperfect balancing act, one I'm always looking to improve. The main point of the post I made above was to show how IMO take home exams can be executed well, not to argue that everyone needs such an elaborate application process.


> rsyring 7 hours ago [-]

As best I can tell, our process is not typical. But it's also not fundamentally a bad thing. It obviously doesn't interest you and I'm sure there are others who wouldn't apply for the same reason. But, there are others out there who appreciate a more thorough approach and might view the process you described as inadequate.

Path of least resistance my friend, path if least resistance.


what was the company? - companies like this should be called out


I wouldn't do that to them. They have a right to interview how they want. I just wasn't good enough. They were looking for someone who could think on their feet under pressure in the moment and I'm not that guy.

I need a quiet place to sit and think something through and plan it out. It is why I did well on the test portion but not on site surrounded by interrogators. In those kind of situations I kind of feel like I'm the in the movie Swordfish where they're like, "Hack that server you have sixty seconds! (gun to head)" The difference is, I would have been dead.


> I need a quiet place to sit and think something through and plan it out

That’s the only way hard, unique problems are solved. If it can be done quickly, it’s routine.


I've read a million "hiring is broken" articles about software companies, so I asked my sister (lawyer) yesterday how the legal industry does hiring. She told me that even at the most prestigious and exclusive legal firms in the nation, the interview success rate is ~50%.

That seemed staggeringly high, considering that Google's is less than 10%. So I asked her how these legal firms managed to pull off such a high interview success rate. Apparently, they only ever invite someone to interview, if they are already pretty sure they want to hire that person. And how does that work? They make no attempt whatsoever to judge your competency on the basis of interview performance. Rather, you are judged almost entirely by your resume - the "brand name" of the law school you attended, your GPA, and the "brand name" of the law firms you've previously worked at. If your school or previous law firms aren't prestigious enough, you won't even be invited to an interview.

In fact, not only is the above a convention, it's often a firm policy. My sister once got a job offer, through very fortunate circumstances, at an elite law firm. But their HR department blocked her hire, literally because she did not attend a top-15 law school.

Ironically enough, I've never heard anyone complain about legal hiring being broken. Perhaps that's precisely because legal firms don't even give most people a shot - they are filtered out entirely at the resume stage. I imagine people get far more agitated when they are rejected after an interview, as opposed to being ignored entirely from the outset.

I'm personally glad to work in an industry where even the most exclusive companies are willing to give everyone a shot at the interview, regardless of which school they went to. Is hiring broken in tech? Sure. But it's completely dysfunctional elsewhere.


Malcom Gladwell addresses this strange credentialism in the legal industry in a recent podcast. In his reckoning, entry into top law schools is determined almost entirely on LSAT scores, and the LSAT favors people who can process questions extremely quickly. But good lawyering is done by deliberative people who often don't perform well on standardized tests. In the podcast, a guest who took a look a legal hiring determined that LSAT or resume from top firms were not good markers of a good lawyer, so yes, legal hiring seems to be very broken. http://revisionisthistory.com/episodes/31-puzzle-rush


For every court room charmer or a loophole engineer a large firm will 100’s of associates digging through documents and filing motions in the background.

In fact if a top tier law firm does their job well they would likely never get to a court room.

The main “need” of large law firms is an army of motion bees and discovery drones.

If anything it shows that large firms have too much of an influence over school admissions rather than that legal hiring is broken.


Came to make this comment. I think all the popular programming hiring processes are flawed but as compared to other professions we are doing great. Most industries aren’t even trying to have any objectivity whatsoever. It’s purely did the interviewer have a nice chat with the interviewee.

My last round of tech interviews I know why I didn’t get offers for most of the ones I didn’t. The BigLaw interviews I went on I have no clue.


>Rather, you are judged almost entirely by your resume - the "brand name" of the law school you attended, your GPA, and the "brand name" of the law firms you've previously worked at. If your school or previous law firms aren't prestigious enough, you won't even be invited to an interview.

Somewhat ironically, I took a brief detour into patent law after my first few years as a SW developer. I had a MSEE plus four years of software experience. I mailed 5 resumes to the biggest law firms in town (Boston). I got five interviews and 2 job offers. Salary was about 5% less than my current salary at the time, but they'd pay for law school and guarantee a job when you finished.

There is an "in" but it's fairly unconventional.


That's awesome! Why didn't you follow through with offers?


That is certainly the case for law, consulting, and finance. And it has been like that for decades.

For the most part, I think it's due to two things:

- Signaling to clients ("We're hiring the best students from the best schools") - The workload that these people are expected to tackle.

If you hire a 3.5 GPA student from good schools, with a impressive resume, there's a good chance that he/she is

- Smart. Not necessarily a genius, but smart enough to tackle most problems they get. Some fields, like consulting, require relatively fast thinking and soaking up new information / knowledge.

- Hard-working / good work ethics. They probably put in a lot of hours during their school years, which also happens to be something you'll meet in those industries

- Structured. People that go to the top schools don't tend to just stumble into them, there's a good chance they've planned and stuck to it.

And if you're a bit cynical, and it could also maybe signal:

- That they're from the "correct" socio-economic class. The majority of HYPS students come from well-off families. When the majority of your clients have similar backgrounds (upper middle-class to upper class), the social interaction can be a bit smoother.

But with that said, these companies have become more open and lenient on these kinds of things. They see that top students from "lesser" ranked schools are just as good as their peers from the Ivies.

Other fields, like tech, is a serious competitor for top talent. 30-40 years ago Ivy league grads flocked to management consulting and investment banking; And they still do, but top tech companies are attracting them too.


Interesting. For some reason rejection always finds its way to me in many aspects of life. When I was looking around for coding bootcamps 6 years ago I got rejected 8/9 times lol. I got into one, and upon finishing that bootcamp I went to get a CS degree. I have a CS degree now and I think I perform quite well, even in my DSA knowledge (I solved about 200 Leetcode questions by now, easy, medium and hard in total). I still find it hard to get even a phone interview at FAANG. My resume just got rejected, or ghosted by the recruiters.


Life is a funnel. Everything is a matter of numbers and setting the odds in your favor.

From the % probability to get into a Uni for a student, to the probability of raising a good series C for a successful CEO. Passing through the probability of finding a good life partner.

Successful people have realized this and either learn to improve their funnel % or they increase their numbers.... the later is the easiest. Just keep applying and by pure statistics, you will land a job you want to.


My wife is a Physician Assistant and her interview process was so strange to me because it wasn't really based on her medical skills, just sorta standard "Why do you want to work here?" type questions.

I would expect they ask her questions about hypothetical patients to see what her thought process is. See what kind of details she notices or discards. Nope, they just trust that your PA school degree and subsequent exam do all of that for you.


Let’s begin with a technical interview problem. Consider the following coding question from LeetCode, an online platform for preparing software development candidates for interviews:

[statement of the Maximum Subarray Problem]

Before going further—and regardless of your coding proficiency—we’d like you to spend a few minutes and take a stab at this question.

From Wikipedia:

The maximum subarray problem was proposed by Ulf Grenander in 1977 as a simplified model for maximum likelihood estimation of patterns in digitized images. ... Grenander derived an algorithm that solves the one-dimensional problem in O(n2) time, improving the brute force running time of O(n3).

Jay Kadane of Carnegie Mellon University soon after designed an O(n)-time algorithm for the one-dimensional problem,[1] which is clearly as fast as possible. The same O(n)-time algorithm was later automatically derived by algebraic manipulation of the brute-force algorithm using the Bird–Meertens formalism.[2]

If you really think anyone -- short of a faculty-level algorithm specialist at places like CMU -- can be reasonably expected to derive an optimal solution to problems like these on the spot (as opposed to the way candidates are actually forced to prove their ability to "solve" them: by binge-cramming on dozens and dozens of problems like these for weeks on end, so that they have at least a 50 percent change of passing your "filter") --

the you're either very naive, or deliberately kidding yourself.


Just as a data point: I read the paper and thought "that sounds like it might be fun, so let's have a go" and wrote down a (correct aside from an off-by-one error) O(n) solution in a couple of minutes. I am not a faculty-level algorithm specialist at CMU. I don't recall seeing a solution to this particular problem before. I am a mathematician working in industry doing kinda-algorithm-y things, though. There are at least two other people working at my (small) employer whom I would expect to be able to find an O(n) solution fairly quickly. (To quantify: >=75% chance that they find one, given 20 minutes to think.)

The fact that the first couple of people to consider the problem didn't find efficient solutions doesn't mean that finding efficient solutions is a super-hard problem. Grenander wasn't really interested in the 1-dimensional problem but in the (I think distinctly harder) 2-dimensional problem, and I don't think he was really an algorithms guy. (That's not a polite way of saying he wasn't very smart; he clearly was, but I don't think finding optimal algorithms for things was what he was most interested in.)

For the avoidance of doubt, I don't think you're likely to get much insight into interview candidates by seeing whether they spot the most efficient solution to a problem like this unaided -- even an extremely strong candidate might just happen not to think of a good approach, especially under stressful interview conditions. (It might still be a useful question if a less adversarial approach is taken -- discuss the problem with the candidate, get a sense of how they think, and nudge them in a helpful direction if they get stuck -- or if the only question is whether the candidate can find and implement any approach, which for this problem I think any reasonably competent software developer should be able to do since you can basically just translate the question into straightforward but inefficient code that does the job.)

I'm not sure whether we actually disagree or not, but I do think you may be overstating the difficulty of this particular problem.


Another data point: but I checked my LeetCode history and I actually solved this problem[1] a year ago. It's flagged as "easy" on LeetCode and I have one submission (which was accepted) but I don't even remember solving it, indicating it was probably routine. The problem also has 4809 "thumbs up" vs 177 "thumbs down" which is a strong indicator that others didn't find the problem too hard either; problems that don't match their stated difficultly get downvoted hard.

[1]: https://leetcode.com/problems/maximum-subarray/


Did you provide the O(n) solution or O(n3) brute force solution? I think that's the important bit.


Nit: The brute-force solution for the one-dimensional case is O(n^2), not O(n^3).


According to the Wikipedia page[1], the brute force solution is O(n^3) for the one-dimensional case. They don't give an algorithm, but the obvious pseudo-code is:

    highest_total = 0
    for all i from 0 to length-1:
        for all j from i+1 to length-1:
            total = 0
            for all k from i to j-1:
               total += data[k]
            highest_total = max(total, highest_total)
    return highest_total
It takes three nested loops, with the third being the sum from i to j. This is obviously a very naive algorithm, but that's why it's called brute force. According to Wikipedia, Grenander apparently improved this to O(n^2), and then Jay Kadane came up with the first O(n) solution. For the 2D case, brute force is actually O(n^6).

[1]: https://en.wikipedia.org/wiki/Maximum_subarray_problem


Huh! That's a bit more brutishly forceful than I was expecting, and I concede the point. It hadn't occurred to me to stick that innermost loop in there rather than keeping a running sum in the second loop.


The brute force solution that seems most obvious to me is to pick a starting index and an ending index out of all possible indexes such that start < end, and calculate the sum of that sub-array (keeping the biggest result).

This is O(N^3) because iterating over index pairs is O(N^2) and doing the sum is O(N).


Brute is choosing every index pair (n^2) and calculating the sun of their subarray (n). With prefix sums you can get to n^2.


O(n). Faster than 75% of accepted solutions. :)


You're right and I stand corrected - it's not that hard of a problem. I found this out when (sometime later) I actually sat down to solve it, without considering any of the hints posted elsewhere in this thread.

At least there seems to be some general agreement (within the thread) that, while not super-hard -- it's still basically a "eureka problem" -- that is, even among what we may consider to be adequately good engineers -- some will get the visual solution more or less right away; but a fair percent (25 or more) won't.

And that's given ideal circumstances -- working alone and in unhurried circumstances. Throw in the (considerable) distraction of having to think aloud in front of other people (who themselves may not exactly be providing the most relaxing vibe, to say the lease), and all the other stress that comes with interviewing -- and I'll bet that 25 percent failure rate rises quite considerably, in turn.

And in many cases -- if you fail just one of these "eureka" problems -- and maybe fail to provide the expected canned response to a "behavioral" question or two -- than that's pretty much all it takes. To be considered, you know, "not a fit".

As to why I jumped the gun -- fatigue, probably, from being fed a few too many "cute" problems like these.


Maximum subarray is a typical problem solved by a dynamic programming algorithm.


It's possible to use dynamic programming but it's such a simple example you don't really have to. If you're familiar with dynamic programming at all, you should be able to get it - it would be pretty reasonable to assign this as a introductory homework program for the dynamic programming section of an algorithms class.


Presumably asking questions like these would be fine if the expectation to solve wasn't there, and instead their performance was evaluated based on how their reasoning/approach changes with hints and discussion with the interviewer. But instead gotta be able to solve at least 1 question and make good progress on a follow up to be considered for an offer from a FAANG company.

Now if you'll excuse me I need to grind out some dynamic programming problems.


> to be considered for an offer from a FAANG company.

I don't disagree with the main point, but FAANG companies' interview questions are available all over the net. In many cases (most?) they'll literally tell you what they are ahead of time, so it's a lot more of a filter for grit than a filter for computer science aptitude.

Eg: I know for a while Google was pretty keen on asking about A* algorithms. A friend who worked there mentioned that to me. Not having a CS degree myself, my first reaction was that was a very "either you know it or you don't...maybe you can figure it out, but that's not gonna be fun" kind of situation.

At some point i saw the material Google gives out. A* was literally listed there as something that they were likely to ask.

Now, it does mean preparing for a very specific interview, which not everyone (or even most people) would be willing to do. And today I don't think Google has the reputation to pull that stunt off for much longer. But a couple of years ago, if you really wanted that free cafeteria? Its a small price to pay.


When I last interviewed with Google (which was about 8 years ago, I think), they explicitly told me not to post my questions to the internet, and if I recall correctly, had me sign an NDA about the questions because they want to reuse them. I don't know if that has changed in the intervening years.


My info is also pretty out of date, but for a long time at least they would give a PDF/flier thingy with a "how to prepare for your interview" that had all that stuff listed, and it went in a lot of details.


They'll generally give a list of topics but not specific questions. For example facebook may put an emphasis on graph and tree data structures and search algorithms


100% agree. It's just an "are you willing to put in the work?" filter.


This is one of the problems with sites like HackerRank that lots of companies seem to be moving to for testing applicants. I know almost all of us hate whiteboard problems, but I would definitely prefer the opportunity to talk through my thought process on a problem rather than having X number of minutes to get my code to pass a unit test or I fail the interview.


> gotta be able to solve at least 1 question and make good progress on a follow up to be considered for an offer from a FAANG company

It's a little harder than that. That would be for the screening interview. But on-site, you'll get several algorithm interviews (I had 3 in two such companies, plus 2 system designs). The recruiter told me that you could fail one of the interviews, but you have to nail the four others.

Even if you are well-prepared, I find it quite hard to have consistant results on these algorithmic questions, especially considering the stress of the situation and the fatigue of going through several interviews in a raw. Practicing leetcode problems for months is fun, up to a point (especially if you already have a job).

That being said, I like that the rules are clearly stated and everyone is given a chance. They don't discriminate as much on your background/educations as some other companies.


Presumably asking questions like these would be fine if the expectation to solve wasn't there

What I would usually do with a programming question is ask a number of my coworkers to solve it and use that to evaluate what an "average good performance" looked like. So if most of your coworkers can solve a problem in 10 minutes, it's reasonable to expect that from someone you're interviewing.


Another good one is the "does linked list have loop" question. If you don't know the answer, you have to figure it out from inspiration. Took over a decade for the first guy to do it.


The second pointer going twice the speed? I don't know the story, but I know the solution, because I've seen it.

Similarly for many other tricks.

I have never used it in real-life development, though.


> I know the solution, because I've seen it.

> I have never used it in real-life development, though.

I'd wager both of these are true for the majority of technical interview problems, and I think that's exactly the point.



In real life development, if you do have a circular linked list unintentionally, what can you do other than terminate the program?


but that one should be, in fact, well known. i've been out of school forever but surely it has to be taught now?

so, this question isn't testing if you can find a loop, it's testing whether you have enough experience to have heard of it. which is a fine enough thing to test for.

i understand your point, that questions are often designed poorly, but your example isn't necessarily a good one.


If it's about experience, why not ask whether the person has an opinion on XYZ framework or other thing that you actually use?


If you really think anyone -- short of a faculty-level algorithm specialist at places like CMU -- can be reasonably expected to derive an optimal solution to problems like these on the spot

Eh, you really don't need to be a "faculty-level algorithm specialist" to solve this problem. I wouldn't even really call it dynamic programming.

Just make one pass to calculate the sum of the first n numbers for each n. Call that array prefixSum. Then you make a second pass calculating the lowest prefixSum[i] for i <= n. Call that smallestPrefixSum. The maximum subarray sum is then defined by the largest prefixSum[i] - smallestPrefixSum[i], and you can get the subarray itself with a bit more tracking.

I don't know if it's a great interview question but I think most of the engineers I have hired (at Google or Facebook) would be able to solve this problem on the spot, given 15-20 minutes.


Many great engineers get pretty stuck when I ask this question; they try to do dynamic programming and unless they get lucky they get a little lost.

If I ask them to draw a picture, they get your solution pretty much immediately.

So I put this problem in the “gotcha” drawer, because it basically depends on having a eureka moment to get the easy solution.

Still fun to pull it out, but more as extra credit than as a useful interview question.


The approach you just described is textbook dynamic programming.


Well, kind of. I would call it dynamic programming if you thought of the algorithm as calling some function many times in an inefficient version, and then caching that result to make it efficient. That is probably how the textbook would describe it, too. I don't think you need to understand dynamic programming to get this, is all.


I was a TA in a few undergraduate algorithms classes in at UIUC. This level of problems can show up in the exams. Although I hold UIUC students in high regard, certainly we don't expect undergrads to be "faculty-level algorithm specialist."

The discovery of many things is done by people with a genius-level intellect. Like calculus, probability, etc. but I can certainly ask mechanical engineers calculus problems, or data scientist probability problems.

It is certainly difficult for someone who never seen anything related to it. But for people who had the background, it is not unreasonable. I think this kind of problem is biased toward people who

1. had a good (theoretical) CS education, or 2. solved lots of leetcode problems so they can just do "pattern matching".


I used to work with a guy who tech-screened applicants by demanding that they come up with the binary-search algorithm: “given a sorted list of numbers, find the fastest way to locate an element in the array”. Of course, if you had any university-level exposure to CS, you would have already seen the solution - I sort of suspected this was his tricky way to filter out non-CS graduates.


I wouldn't characterize it that way, I don't have a CS degree and could solve this trivially.

I think the question first asks the interviewee to have cracked an algorithms textbook or be clever enough to come up with the method on the spot.

Second, it asks if you can explain the concept to another engineer. I've met engineers in their 40s who can implement something like depth first search but cannot explain it. That's an immediate red flag to me that, at the very least, the person I'm talking to is not able to meet the responsibilities of a senior engineer.


Divide and conquer? I don't have a cs degree, but this was thought in highschool in Romania. If you went to the right kind of high school.

Reading the other comments I'm not sure d and c is the answer. Might be terminology, but I would split the array in two at the middle, see if the value I'm om is the one I'm searching for. If not, recursively do the same thing on the left or right side of the array.


I... have a hard time imagining what coding job wouldn’t want candidates to know how to find a log N solution to a search problem.

I guess this is the old “there are two clusters of tech jobs” problems, where I can barely fathom the techniques of the other cluster.


That was his position - I just recall that all of the CS grads got it, and none of the self-taught/bootcamp types did, though.


What are you getting at? That this is a trick or bad question?

This is on the order of fizzbuzz +1 level maybe. It's elementary stuff.

Or was he looking for best-case optimization or something more than just binary search.


It seemed like a bit much to me at the time. It's not something that I've ever had occasion to actually use (I don't search sorted lists much...). I wondered if I would have been able to come up with it if I hadn't already seen it in data structures class years ago - I mean, of course I figured out the "algorithm" when I was a little kid playing "guess the number", but I'll never know if I would have come up with it in that context if I hadn't already seen it. The consensus here seems to be that it's a reasonable question, though - but I do remember that the only people who ever got it were people with CS degrees.


binary search is very widely misimplemented,

- https://en.m.wikipedia.org/wiki/Binary_search_algorithm#Impl...

> “When Jon Bentley assigned binary search as a problem in a course for professional programmers, he found that ninety percent failed to provide a correct solution after several hours of working on it, mainly because the incorrect implementations failed to run or returned a wrong answer in rare edge cases. A study published in 1988 shows that accurate code for it is only found in five out of twenty textbooks. Furthermore, Bentley's own implementation of binary search, published in his 1986 book Programming Pearls, contained an overflow error that remained undetected for over twenty years. The Java programming language library implementation of binary search had the same overflow bug for more than nine years.”


The bug only manifests if the range you're searching is within MAX_INT/2 (or whatever numeric datatype you're using). I'm not sure I understand the point you're trying to make.


I didn't understand what you were talking about offhand and thought range might be the value of the stored/searched data, not a pointer arithmetic issue.

When the array/list consumes a memory footprint larger than ptrdiff_t it was possible that the specific implementations might fail. It is crucial to remember that the difference between memory address is signed and that the size of objects (even if bare machine integers of some size) in the set might be displayed as a number smaller than one of the powers of two many recall.

On a 32 bit machine this wouldn't be approx 2 billion but rather often 500M 32 bit words or 250M-ish 'double' precision numbers. Let alone if the search is over more complex structures representing objects. For a smaller 16-bit embedded system I could even more readily see this occurring.


You make a good point. I was actually speaking about the general case, where you're simply pulling the bounds of x_min and x_max closer until f(x) reaches a target value or the bounds converge to the same value. f could be an array and x could be an index, but it doesn't have to be. The bug still exists in this general case. All you need is a numerical datatype that can overflow, and most of them can.


It seems you’re deliberately not trying to understand.


I assure you I'm being sincere.


Yet you focus only on one aspect of the linked discussion on the high rate of misimplementations, an aspect that represents the least relevant part, and then act as if this invalidates the point?

That’s not sincere, it’s disingenuous.


I didn't say it invalidates the point, because I honestly don't know what your point was to begin with. Which is why I asked the question originally. I'm still no closer to knowing, and it seems like you're not interested in elaborating. Suit yourself.


This is an extremely disingenuous reply as well. You started off your first reply by saying “the bug only manifests ...” already pre-supposing that the scope of my original comment was restricted to that one thing, and tacitly ignoring all the other aspects of the link.

The (obvious) point is that binary search is widely misimplemented even by professionals writing textbooks (and this had little to do with the specific Java bug responsible for that one example), and this is all stated directly in the link you didn’t read.

It’s comically ill-suited for time based tech screens as even experts teaming with editors often still get it wrong.


I think this is overstating things. Because of the way bleeding edge research gradually trickles down to being generic undergrad content, things like this that would've been the domain of algorithms researchers in the 80s are now tractable for smart undergrads who are into competitive programming.


Now tractable for smart undergrads who are into competitive programming.

Even if we leave aside the question of to what extent facility at competitive programming contests actually correlates with success in real engineering environments (my own sense is: yes it can help; but at the end of the day, just not all that much) --

if that's a skill you consider to be important, then for gosh sakes, put it in your job ads. Something like "We typically hire CS olympiads, and folks who have at one point or another have been fascinated by competitive programming contests. If this doesn't describe you, then this probably isn't the right company for you."


This also happens in math and physics. One of my homework assignments was solving the quantum harmonic oscillator via path integral formalism. Something that took Feynman a modest amount of time.


I've looked at your test results and Im sorry to say you did not pass the test. You need to work on your algorithms. Can we keep your CV? /automatically generated message


I was absolutely rekt by this exact question several years back for a Microsoft internship interview. I had just finished my first CS class where I learned binary search, heaps, hash tables, but unfortunately not cumulative sums.


I don't think this problem is THAT difficult -- I did manage to solve this on my own after a semester of algorithms class and a bit of practice from DP problems. The intuition is that at each index you're either continuing a previous subarray or starting a new one, depending on which one results in a larger sum. It's pretty standard DP stuff, and I'm sure there's many undergrads out there who can bang it out in an interview. Though I personally did it in the comfort of my home and probably wouldn't have come up with it in an interview.


> If you really think anyone (..) can be reasonably expected to derive an optimal solution to problems like these...

I can see an usefulness to questions like these. Maybe you are precisely not looking for reasonable but for exceptional people. Or maybe you want to see how the candidate behaves in front of a difficult and concrete problem, even if you do not expect them to solve it.


Even if you do not expect them to solve it.

The unstated implication in most cases is that you damn sure are supposed to solve it - or get "flushed".

As to "seeing how the candidate behaves in front of a difficult and concrete problem" - I'm sure this is what a lot people who ask questions like these think they're achieving by asking them. But again, you have to ask yourself if that's what the questions actually do permit you to assess.

My sense is that it's not - and that questions of this sort are mostly, well - cheap gimmicks, basically.


I don't buy that at all.

Think about the potential hidden states (already knows the answer vs blank) vs the evidence you could get from the person answering right or wrong. What should your prior be? Surely that there's a very large chance this person is not a genius. Now how much is that going to move, given that by far most people are not geniuses?

To put it another way, what would you do to impress someone following your reasoning? I would pretend like I didn't know it, and then act out the miraculous direct line to the answer.

As for looking at how people behave in front of a hard problem, what on earth do you know about that? Do you have evidence connecting people's behaviour to subsequent on-the-job performance, both for people you hired and those you didn't?


Every time this comes up on HN we see why the problem is so hard to solve:

- Nobody likes whiteboarding

- Take-home assignments are unpaid work, and candidates who are raising children don't have time to do homework after they get home from work

- Pair programming during interviews makes people uncomfortable because of the pace or because it's not how they are used to working

- People who currently have good jobs are unwilling to consider contract-to-hire or "tryout" periods

- Credentials, including graduate degrees, are no guarantee that someone is a good engineer

The current interviewing situation in the industry sucks but all of the alternatives are worse in important ways.


Nobody likes whiteboarding

Honestly, I really like whiteboarding. I liked doing programming contests too, which are like whiteboarding except harder and you spend more time at them. There are times when I have gotten together with other like-minded software engineers and given each other whiteboard programming problems for fun. (Also to test whether problems are good interview problems.)

A lot of people like whiteboarding problems and like interviewing with whiteboarding problems. Those are usually also the people who pass whiteboarding interviews. Just because there are a lot of complaints about them, don't assume that represents everyone.


I like whiteboarding too. It's stupid to expect people to write syntactically correct code on a whiteboard, but totally reasonably to use it to discuss a problem. I mean, that's why we have whiteboards in our offices in the first place, right?


People who participated in ACM competitions is my (now no longer secret) secret weapon when forced to filter thousands of resumes.

It’s probably the most strongly correlated with liking and being able to do the job signal I’ve ever seen.


Discussions about this in HN in 2015 [0].

[0] -- https://news.ycombinator.com/item?id=9324209


Would you say the same about Google CodeJam? Some people didn’t have the chance to go to college...


Probably not, no.

First, you’re not going to get your resume in front of me without a college degree, CS degree or equivalent experience is a bar that recruiters apply well before I’m involved.

But as far as I can tell, Google CodeJam is an individual sport (I may be mistaken about that, but Google’s page won’t load in my browser, so I could only read the Wikipedia page about it).

The key thing about the ACM contest is it requires BOTH effective cooperation with a teammate AND the desire to solve programming puzzles.

Now, just to be clear, I’ve fired people who passed this bar; being a smart puzzle solver who’s social enough to collaborate is a great start, but it turns out lots of people just aren’t interested in shipping software. I still think ACM team participation is a strong signal, it just doesn’t cover the fact that being an adult means 90% of every job is boring, and not everyone is ready to do the boring stuff when they’re fresh out of college.


That’s interesting info, thanks.


Candidates should just be given a horrible, undocumented, broken piece of legacy code and asked to fix it. Select the person who comes up with the quickest solution. That's who you want on your team when you find out there's a production issue at 4:30pm on a Friday afternoon.


I would love this kind of interview. This basically describes my job.


I'm OK with whiteboarding. I don't object to take-home assignments in principal, but I do object to them in practice -- they take up way too much time, and then part of the time you get ghosted after submitting them.

I think the right answer here, to the extent that there is a right answer, is to give applicants a choice.


It’s pretty hard to have a reliable interview process if you don’t ask all of the candidates to do the same thing. Comparing how a candidate performed compared to other candidates on the same set of tasks is an important part of the evaluation.

Consistent processes are also important for avoiding bias. For example, take-home projects are more likely to make sense for young candidates who aren’t raising families and have free time after work. If you have most of your young candidates doing take-home projects and the older candidates doing whiteboarding, you will end up evaluating candidates differently based on age.


Candidates have different strengths and weaknesses. Sure, I'll ask the base questions but in terms of assessing their coding ability I'll go with whatever they feel the most comfortable with.

If they have github, I'll ask them to walk me through a few files, asking their reasons for doing X, why not Y - what does this do?

If they prefer take-home, I'll give them something to create/improve.

Want to do something now? knock yourself out - with or without me watching.

I don't need to sort the candidate into an ordered list, just filter out the "over confident".

The questions I want answering is: Can they actually code? Does their skill match their experience? Is their skill level similar to the codebase?


The only time I've ever told a recruiter off was when I was asked to "spend about a half an hour to write a solution for [problem]" for Microsoft and it turned out to take about that long for me to set Visual Studio up on my laptop at home, and then an equal amount of time to figure out how to navigate the project files, etc. etc. and I could see that the interviewer A) had not given this any thought and B) had no idea how long this would actually take for someone who doesn't develop software at home.


> for someone who doesn't develop software at home.

Are you saying in general - or just for Windows-based software (since you mentioned needing to set up Visual Studio)?

The latter I can understand; but the former makes me want to ask, "Who applies for an SWE position who doesn't write code at home?"

I've been an SWE professionally since 1991 when I was 18; I got my first computer in 1984, and have been "coding at home" ever since. I'm not saying "to be an SWE you need a similar experience" (I know that's untrue) - I'm just relating that I've been coding for a long time, and "at home" is very much a part of it.

Then again, I've heard of people who absolutely hated coding, but were extremely good at it (and I assume made good money doing it), but when they went home, they didn't even want to think about such a thing. Maybe you are similar in that regard?

I guess I am just curious and a bit fascinated by your comment...


I'm someone who does it for 8-10 hours a day at their day job. My fiance works in a retail store. She doesn't come home and immediately start doing retail sales out of her house. Another friend is a teacher and she doesn't run a school out of her house.

Professional baseball players rest after games. They don't finish up and then immediately start practicing again. And soldiers and police get down-time.

Just because I'm doing something I enjoy and that I want to do, doesn't mean I should do it all of my waking hours. I'm not doing this to code, I'm doing this because my employer is paying me to build cool shit and I like doing that. I don't lift weights 24/7, I don't run 24/7, I don't hike 24/7, and I don't program 24/7.

Frankly your attitude is one of the reasons why we don't have any diversity in this profession at most self-described tech companies, and it also underlies a lot of the seeming ageism today. All of these self-described non-conformists expect everyone in the profession to conform to their attitude and it's sickening.


I wonder how many surgeons do operations at home.


That was assuming you even had a Windows laptop to set VS on. I know a lot of people have to say no these days since they just have a MBP running OS X.


> I know a lot of people have to say no these days since they just have a MBP running OS X.

That's where the person who knows how to set up a VirtualBox VM running Windows and VS would have a large advantage; when they brought in the result, showing their MBP running VS in a virtualized manner, and explained what they had to do - that's a bit more of an impression than someone who says "they can't do it because MBP".


You can actually run Windows just fine on a mac using bootcamp. The big problem is just getting a legit Windows license, and then the hurdle is just a few hundred bucks (or whatever a non-OEM non-upgrade license costs these days).

Also, I'm nowhere near ops jobs, so I don't think those people interviewing me would care much about those kind of logistics (anyways, they wouldn't want to know the details). It wouldn't score any "points" beyond just getting the task done at all.


If we could just accept that not all companies should cater to everyone, and each can pick their methods that work for them (and if you don't like it as an applicant, go elsewhere), things would be a bit simpler.

When Im looking for a job, I make it pretty clear what Im ok and not ok with, which will dictate which companies Ill interview at or not. If we were in a dotcom crash it would be a different story, but right now its definitely something people can do.


Why do you think that the paid take-home task which is related to the job (i.e. not leetcode riddle) is worse compared to what you've listed?


Even small-mid size companies can see thousands of applicants for a single position. You cannot pay every one of them at market rates for even a day of work without an unlimited recruiting budget.


I wouldn't offer a take-home task to anyone who wasn't already on my short-list. When I recruited interns at job fairs there were plenty that were just passing resumes out to whomever would take them.


>When I recruited interns at job fairs there were plenty that were just passing resumes out to whomever would take them.

Isn't that the point of a resume? What am I missing?


And how do you come up with this short list? That's the point of the exercise. The order is usually:

Resume review -> take home exercise -> phone interview -> onsite interview -> offer.


How significant is that take home? I immediately reject such requests of unpaid work if it takes more than 10-15 minutes.

If in your case, you demand allocating more time for that step, consider adding additional filter (requiring 10-15 mins) after the resume review. And then redirect [part of] resources (money) from the onsite part to pay for that take home task.

Another red flag I see in your process - asking for allocating time before even talking to a human being - that would be another reason for an immediate rejection. Consider moving your phone part before the take home task.


Every company that has given me a take home exercise gave me a phone screen first. I don't think your order is at all typical.

When there is something before the phone interview, it is a coding assessment; these are generally different from a take home assignment in that they are generally timed and automatically scored, e.g. you hit start and have two hours and then a computer scores you. With take home exercises, I've always had engineers at the company read my code and discuss it with me.


But if they are not solving riddles, those candidates could do (good or bad) _actual work_ for you. Why not reward them the same way?


The code you write for these take-home tests will be evaluated and thrown away. It isn't actually making its way into a product or feature the company releases.


Or you hope it is being thrown away and not put into production...


I'm sure it's being done in some cases (but then any shady thing you can think of is being done by at least one company out there). But it is definitely very far from the norm.


I've never heard of a paid take-home interview task. Has anyone here actually done one?


I've done one with Figma. It was one of the most enjoyable interviews I've had.


I have to say that from all of those, the least annoying has been the pair programming.

But to be fair the problems were not too hard, the interview was set-up properly (problem files on place and a good code editor at hand, no tricks or gotchas)

And the worse of course is having to write fizzbuzz in a whiteboard, I just have to roll my eyes then


The real solution is to allow me create a portfolio of work, which would be a total of about 100 hours and then let me use that _everywhere_. I have easily spent 5k hours getting the degree, the 100 hours over the ears it took to do that isn't a big deal. We could even have some sort of offical stamp that "this guy can code".

Doing 10 hours of work to apply for every random "we make another business PHP/crud website" company is not worth it.

Your company isn't Google, don't interview like it is. I am not going to write custom code for you, but I am willing to flash my credentials.


The best interview experience I had was when I was asked to bring in my laptop with some code. I had a very unfinished side project, so I talked the guy through it, he asked questions then asked me to add a simple feature. It didn't take a huge investment of my time, its code that I am familiar with, so no nerves problems, no clever algorithmic stuff.


> Credentials, including graduate degrees

Some people even suggest that advanced degrees are an anti-indicator of ability:

http://blog.alinelerner.com/how-different-is-a-b-s-in-comput...


They are also indicators of over qualification; e.g. will that PhD from CMU really be that interested in working on your CRUD app, will they find the work fulfilling enough to hang around?

And mostly they aren't wrong.


"- Credentials, including graduate degrees, are no guarantee that someone is a good engineer"

Too true, I've started to recruit non-CS people and teaching them how to code. The state of CS education in the US is insanely inconsistent. But I'm lucky, I have lots of time to train people; most companies can't handle months of startup time.


Want to hire me? I’m a reasonably competent programmer already, pretty good designer. Most recently I wanted to familiarize myself with the basics of C++ so I wrote my own big integer library.


Maybe this is the triplebyte business play, you come up with your own credentialing and companies pay you to access a high-signal talent pool.


> Nobody likes whiteboarding

That's why companies should allow laptops.

> Take-home assignments are unpaid work

True, they could be optional. You may not get the job if you don't do it. Honestly, if you can't spend one or two hours on a take home assignment during a 7 day period, you certainly have different problems than applying at this company.

> Pair programming during interviews makes people uncomfortable

I agree, pair programming during an interview is mostly a no go. Not because of the issues you mentioned but because most interviewers are totally unqualified to do this properly (unfortunately, most interviewers are also unqualified in general to conduct interviews). It takes a lot of skill to conduct pair programming interviews and draw the correct conclusions.

> People who currently have good jobs are unwilling to consider contract-to-hire

In US, there is practically no difference between those three. You can be fired any day anyway. But yes, if you have a secure job that is good, the bar for switching is high, but so what? Why even switch? It's your choice then... Luxury problem!

> Credentials, including graduate degrees, are no guarantee that someone is a good engineer

I would go as far as saying your credentials and degrees are horrendously irrelevant in predicting your skills as an engineer. The only thing you might be able to conclude is that a GPA 4 M.I.T. graduate probably can pick up missing knowledge quickly, as opposed to a no degree dish washer who learned "how to code" in a 6 week bootcamp.

On that note I have experienced first hand, Berkeley and Georgia Tech CS majors, who were absolutely incompetent on the job and just had no idea what the hell they were doing, with little improvement in sight...


> Honestly, if you can't spend one or two hours on a take home assignment during a 7 day period, you certainly have different problems than applying at this company.

That's an extremely privileged thing to say. And what a terrible way to start out your working relationship. The very first thing you ask of me is to do unpaid work in my free time? IF you're willing to do that, how else will abuse me in the future?

Also, why should they spend time on your homework before they know if you're a company they would even want to work for?


I mostly agree, but attending any interview is also doing unpaid work in your free time, and often takes a comparable amount of time to the sort of take-home assignments used for recruiting.

I think the reason why take-home assignments tend to feel more unreasonable is the asymmetry. If I attend an interview, it's costing a pile of my time, but it's also costing a similar pile of time for multiple people at the company where I'm interviewing, which gives me some reason to think that my application's going to be considered seriously and therefore that the effort I'm putting in isn't going to be totally wasted.

Whereas a company can hand out a take-home assignment with no effort at all, so the fact that I've been given one doesn't indicate that the prospective employer sees me as a serious prospect or that there aren't hundreds of other candidates in the same position as me, so it's no guarantee that my chances of getting hired aren't miserably low, so there's more risk that I'm wasting my time.


I think you've hit the nail on the head here. A homework assignment does not indicate seriousness on the part of the company. Great insight!


As someone who uses take-home assignments as part of my hiring process, I disagree that it is no effort at all. We still have to review submissions, get the code running (we usually let the candidate do the problem with the tools of their choice). You won't believe the number of candidates we receive with great looking CVs who struggle with a warm-up coding question like this: https://www.hackerrank.com/challenges/python-quest-1/problem If anything, completing the assignment and at having some working code already gets you above 90% of applicants.


I just can't understand this mentality. You are the one who wants the job, doing the bare minimum of effort to prove that you can perform the job is too much? Why should they review your code before they know if you're someone they'd want to work with? It's part of the mating dance, and it goes both ways. Presumably you would have read up on the company or spoken to people in the industry? Unless you have some other way of proving your ability (Github projects, Kaggle, research) don't expect a job to just land in your lap.


The start of your working relationship is really important. I'll get interview offers all the time and if the compensation is off by more than 3% I just tell them no, due to compensation. Usually I get a contact back asking what I was looking for and I just tell them that I am not in the market to be making my compensation an issue each time I want a raise. They had an idea what they wanted to pay and I am not who they are looking for.


It's not perfect, but personally far preferable to having to perform with a gun to the head in an interview. Which has nothing in common with how software is written in the real world.


Would you feel better for it if you were paid $100 to do the assignment? That might be way less than you normally make, but it's something.


One of the sibling comments said it well. It's not the money, it's the fact that giving me take home work shows a lack of seriousness on the part of the company.

Although perhaps an escrow system would work. The company pays me a large sum (say $10,000), which I then pay back if they call me in for an interview. That way I know they are serious, and it actually forces them to consider the cost to themselves.


I might. Or I could do it at my normal short-term contracting rate and bill you the hours.


You are already wasting more time on doing the interviews. Why a 3 hour home assignment is any different?


One of the sibling comments said it well. It's not the money, it's the fact that giving me take home work shows a lack of seriousness on the part of the company because my time investment is much greater than theirs.


> credentials and degrees are horrendously irrelevant in predicting your skills as an engineer

I'd suggest that an MSEE or MSCS degree from a good school tends to be pretty good training for working in the industry. The projects you complete are usually challenging, relevant, and intentionally educational.

For example, an MSEE might learn how design analog amplifiers and filters, program a DSP, lay out VLSI circuits for an ASIC, implement a RISC CPU in verilog, implement an internet router on an FPGA, and implement Wi-Fi on a software radio. I'd be happy to hire (or work with) someone who can do all that!


Yeah except that for 99.9999% of software engineering jobs, that knowledge is irrelevant. Also, to be a good engineer, you need to have MUCH more than just some math and raw computer science knowledge. I would go as far as saying that all scientific tasks are mostly carried out by research scientists these days anyway. The skills you need at companies like Google or Amazon, as a regular engineer, have VERY little to do with what you learned at University, which is why we hire even PhDs as junior engineers, and they usually are. They know a lot of stuff that doesn't matter (like how to color a graph), sure, but they also don't know a lot of stuff that matters (how to build production quality software, without shooting yourself into the foot at every turn).


I really wish university CS programs would have a course on how to use source control (probably Git), and CI (probably Jenkins).

I'm sure some programs teach this stuff already. But I've hired people with graduate degrees in CS from well-known schools who didn't even use source control for their group projects in grad school -- they just emailed the source files to each other.


What a strange and puzzling response!

0. You seem to have misunderstood my electrical engineering example.

1. Why would an MSEE not qualify you to be hired as a junior electrical engineer?

2. Why would a PhD in the appropriate area not qualify you to be hired as a junior research scientist?


>> People who currently have good jobs are unwilling to consider contract-to-hire

> In US, there is practically no difference between those three. You can be fired any day anyway. But yes, if you have a secure job that is good, the bar for switching is high, but so what? Why even switch? It's your choice then... Luxury problem!

It seemed weird to me that we are one of the only industries (well I guess engineering in general) who gets a contract that is contingent on each day until it is completed. At any given point you could be let go and yet if I contract someone to work on my home to legal work you setup a contract that states you owe them the money unless you are willing to go to court to contest their work.

When I last did a contract-to-hire it was basically "you can be let go for any reason, from slow output to your boss having a headache." Unless you get a sweet deal its difficult to pull a job with a set start / end time with guaranteed payout regardless of employment. I busted my hump at that last job so instead of doing my 6 months for the hire option they offered me the job before then 2nd month was over.


Not only that, but the GP misses the point that, while yes I can work for myself and do contract work, I then also have to find health insurance, pay taxes monthly, do a bunch of extra accounting that does nothing to move my business forward and is boring, etc. That's fine if you get more benefit that the resource sink of doing those things, but for most people that's only additional stress and no additional value. So saying they're equivalent is patently absurd.


Yeah, maybe degree isnt a great indicator of a programmer's skill, what about their past experience and projects? I think that at would at least make someone more confident in their abilities.


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

Search: