Hiring Is Broken: What Do Developers Say About Technical Interviews?
researchgate.net
researchgate.net
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.
We're all still human; expect failure to happen. See what happens next.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
And I said earlier I maintain that my method of interviewing will actually reduce those costs.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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?
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.
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?
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.
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.
How is it that, simultaneously, firing is hard and job security sucks?
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.
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.
This sounds like a contradiction to me. How are you defining "unqualified" and "bad" here?
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.
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.
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.
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.
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.
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.
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?
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?
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.
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.
Nobody is talking about fizzbuzz. We are all talking about take home assignments that take hours, generally 5-10 hours and sometimes more.
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.
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?
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.
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.
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.
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.
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".
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.
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.
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.
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?
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.
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.
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"
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.
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.
"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."
"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?
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.
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.
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.
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.
Though I guess these days I guess 'software development' means downloading Javascript crap from github and copy-pasting CSS.
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.
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.
That’s the only way hard, unique problems are solved. If it can be done quickly, it’s routine.
>I got nervous and passed the question
I didn't know that was allowed. Has that worked for people in the past?
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.
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.
- 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.
https://www.level12.io/careers/full-stack-web-app-developer-...
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.
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.
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.
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.
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.
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.
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.
Sounds like there are better places to work.
I hope you landed in a good place.
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?
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.
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.
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.
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.
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.
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.
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.
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.
[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.
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.
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.
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?
Now if you'll excuse me I need to grind out some dynamic programming problems.
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.
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.
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.
Similarly for many other tricks.
I have never used it in real-life development, though.
> 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.
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.
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."
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.
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).This is O(N^3) because iterating over index pairs is O(N^2) and doing the sum is O(N).
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.
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.
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.
- 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.”
That’s not sincere, it’s disingenuous.
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.
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.
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 guess this is the old “there are two clusters of tech jobs” problems, where I can barely fathom the techniques of the other cluster.
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.
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.
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".
- 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.
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.
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.
I think the right answer here, to the extent that there is a right answer, is to give applicants a choice.
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.
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?
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".
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.
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...
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.
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...
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 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.
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'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!
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.
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?
> 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.
Resume review -> take home exercise -> phone interview -> onsite interview -> offer.
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.
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.
Isn't that the point of a resume? What am I missing?
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
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.
It’s probably the most strongly correlated with liking and being able to do the job signal I’ve ever seen.
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.
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...
And mostly they aren't wrong.
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.
I don't think I can get hired without a referral - haven't managed to land a cold interview once so far. So at least, there's no evidence of it.
Interviews are a performance act, they are the packaging that you throw away after buying a product for the cover.
The interview "suit" I wear is actually one of someone who's calm and smiling - instead of stimming with my hair and dead-pan with a smirk (if I was a woman, I'd have resting b-tch face).
I feel for this guy, because I figure out how to wear that suit, but I still need to thumb the scales to get hired, because the mask I'm wearing is effort & it does show to the perceptive HR person (& it doesn't matter what you are faking - if you're faking it, it counts against you).
However, here's where everything is unfair in this world.
I have a pretty decent job because I ran into the right people at the right conference back in 2004, where someone noticed that I might be able to do hard things with minimal effort (and fail at easy things, simultaneously).
There must be thousands of people in my state who never got that "come to Yahoo, have a coffee" invitation & get plugged into a network of people who have kept me gainfully employed for more than a decade.
I definitely had fewer challenges there because I wasn't an outright minority in the industry - I didn't have anything to prove beyond the performance.
I was there talking about my FOSS work, that probably helped.
toolz asked me if the "Portable .NET" platform was portable enough to run on some new hardware & gcc patches he had got before the conference (not insane, but cross-compile & port the project from a Zaurus/iPAC to run on a PicoPeta Simputer).
Anyway, it must've looked more impressive than 2 days of work, because when toolz died, someone else remembered that incident[1].
(as a side note, I had already interviewed at IBM, Oracle Platforms team and several other places with no luck at that point ... so I had already spent 4 months prepping & interviewing in 2004.)
And after the conference, I met Swaroop [2] & Philip, who were at Yahoo then.
[1] - https://news.ycombinator.com/item?id=5812177 [2] - https://python.swaroopch.com/
Why anyone puts a high degree of credence into these tests and whether someone can solve one in a high-pressure interview is beyond me.
Give them a take-home assignment where they can develop something similar to what they would be at the company, and decide if they wrote efficient, elegant code that's easy to follow.
Also, if you're self-taught and applying to a team of CS majors, may the force be with you. No one's more insecure than a CS major interviewing a guy who might have more development experience than he does.
We don't have that in our industry. I interviewed countless "senior engineers" with degrees from well regarded universities who couldn't write a simple loop. Therefore I must now conclude that a degree from that university means nothing.
There are some folks like Tripplebyte who are trying to solve this by pre-qualifying candidates, but I don't think the problem will really be solved until we form a software engineering licensing board. Take a test once, and then take a refresher course every couple of years to maintain your license.
I think this is fundamental to the discussion. Are we really sure they couldn't write a simple loop, or were there other factors that prevented them from doing so? For comparison with your other analogy, keep in mind that even surgeons who have amputated the wrong limb are defended by their colleagues, saying “Well, it should have been amputated anyway.” (https://www.nytimes.com/1995/09/17/us/doctor-who-cut-off-wro...)
I understand that you specifically might not have used that as your only filter, but a lot of people do – and I think a more holistic approach that takes into account education, training so far, and overall experience with tech. Certifications might be one part of this too.
I mean I suppose the stress under pressure could have made them forget the loop syntax in their favorite language, but that is unlikely. I literally asked them to implement FizzBuzz in their favorite language during a phone screen where they even had internet access to look up syntax. But since I was interviewing them for an SRE job, coding under pressure is actually part of the job anyway.
Regardless, I'd expect someone who claims to have 3+ years of Python experience to be able to write a python loop.
Pretty much every candidate has "failed" the test. More than half have something incorrect or not quite matching the instructions. But we have hired some of those people and they are great programmers.
It actually does give a surprising insight into the developer's style. It's not pleasant to see all of their code stuffed into main(). It's not pleasant to see every single line of code commented. But it is refreshing to see Enumerable.Range(1, 100) instead of C style for loop.
However I don't think I could do this at all over the phone.
I'd also, for a throw away like this, knowing it's a throw away stuff everything in to main / global and use that c-style loop BECAUSE it's portable to literally every language.
If you're looking for a FizzBuzz class/object/module specify that. If you've got a specific language with nice features ask for that, BUT don't demerit an individual too much for not knowing the day to day features of the coding environment in your company when they've not been part of it for months.
what's the difference? I believe that getting hired by a company is the easiest thing you will have to do for that company. I believe that if you can't perform a basic task at interview time, you should not be working there.
Either because you can't perform.
Or
The mood is not right for you. If this is the case, why would you want to work there anyway?
I see so many people that thing getting hired is the end goal. Mate, you still have to work for them. Those people that can bullshit their way through a job, have no issues getting hired to begin with.
That doesn't describe any of the five job offers I've taken since college. Well, maybe the case where I was rehired.
A "senior software engineer" at a cardboard box factory might not be the same role as one with the same name at an aerospace firm doing government contracts.
I guess the advantage is once you pass you don't need to re-certify. Which also seems incorrect.
Funny when you think of how many blog posts, flame wars, SO questions exist on the internet just to debate what is indeed a unit test, and what is an integration test :)
Who would have the legitimacy to design such an exam?
If it's like civil engineering, it would be the regulatory body that determines the approved technologies and design formulas for your field. The exam would be based on those standards. I'm not sure most governments would even approve public key cryptography.
Better watch what you ask for. ;-)
It's risky. Licensure often becomes a wage-protection cartel, and if so, does little to guarantee the quality of licensees.
Another problem is that there are many levels of skill demanded by the industry, though maybe you can have a bevy of licenses that qualify a person for various roles.
That's my principle issue with the OP: they don't attempt to control for the possibility that people who hate technical interviews are most likely the people who didn't get the job they wanted.
If you're working at company X and think, "I hate this shitty IT job, I'm smart enough to get a real developer position" and interview at company Y and learn that, no, you aren't, that's a hard pill to swallow.
Yes, we all ought to find our zen and accept that no one has all the talent they wish they had. But people are human, so we're liable to blame the messenger, which is the technical interview.
It’s a hard pill to swallow because you don’t get feedback from rejections. It doesn’t matter what stage of the interview process you reached, companies very very very rarely give feedback when asked. Because of this, those people never get to hear why they aren’t good enough. Instead, it’s all left up to their imagination which creates the scenario you describe.
>Therefore I must now conclude that a degree from that university means nothing.
Degrees always mean nothing but the educations might still be useful, depending on what the individual took advantage of.
For the first job as a licensed physician.
After the internship period, it's generally one or two in-person interviews (possibly more if you're joining a private practice), followed by a period of weeks to months where they check on your licensure and credentials.
Seems like baloney
Even to be brought on as a "Doc in a box" type of situation, you're still looking at a minimum of 90 days.
Folks want to "move fast and break things," and "hire fast, fire faster," but those two are not conducive for doctors.
Imagine the resources needed to maintain tests that should work for low-level embedded developers, data engineers, video game coders, smart contract programmers, AI implementors, etc..? Yes, there are fundamentals and Computer Science, but most of us agree that you can have the greatest craftspeople perform poorly there.
Though, I guess the certifications from private companies like Microsoft in Cisco actually work as some kind of license
Have you seen some of the study guides / roadmaps people make for FAANG interviews? I've seen people claim they've coded hackerrank / leetcode / CTCI questions for multiple hours a day, for months.
EDIT: Also, at least with the Hackerrank for hours a day, it's not for any specific company. Getting good at these problems is useful for getting a job at virtually any big company. Contrast this to the take-home project, where (in order to make sure you don't just copypaste someone else's from the internet), they make these things kind of specific, making the transferability to other things substantially less likely.
Once you get very good at leetcode-style questions, just apply anywhere and get an onsite with a one-hour interactive technical screen, that will also tell you about the sort of people and culture that employer has.
Conversely, homework assignments can easily take 5-10 hours. There's a lot of desperate unemployed people out there taking 10+ hours for these tasks, and setting the bar really high. A busy professional can be hard pressed to invest 5 hours they can ill-afford coding this task after a full day at work, then get rejected because some unemployed applicants dedicated 20+ hours for the same task.
There are also services that solve these tasks for you, so now you - a busy professional - are competing against hordes of people who do these tasks all day every day for a living.
So you hard-scramble 4-5 hours to finish a take home assignment to apply to just one place (!), and then you send it in and get a meaningless rejection note. Sometimes you don't get anything at all.
These are some of the reasons I'm never completing a homework assignment again.
What also frustrates me the most is when they say "use whatever language you want", I use Scheme or Haskell, and I get feedback to make it more "modular" by making it more object-oriented. The reviewers of the take-home assignment will be too afraid to admit that they don't understand Haskell, too afraid to admit that they made a mistake making the language a wildcard, and automatically assume that it's less scalable because it's not Java.
Not a great income at a place where a half decent 1br can easily cost you over $40k/yr.
Definitely became about a million times easier to live when I left academia and started making six figures.
Either way, let's get real for a second: a software engineer is a highly trained professional working in an high-demand field.
There's no reason for them to be earning $120k/yr, which is a pretty low salary in a very high CoL area like NYC.
I mean, not really? I just hopped onto the A train straight down to NYU; it took me like 40 minutes door to door, and being on the train allowed me to read, so it's much better than driving.
I make substantially more than that now, but have moved to Brooklyn since then; door to door it takes me about 50 minutes, but I wouldn't classify that as "a nightmare".
> a software engineer is a highly trained professional working in an high-demand field.
At the time I was a college dropout whose only professional experience was in startups, 4/5 of which had gone bankrupt, though the university actually paid their actually-qualified people pretty poorly. My coworker had a masters degree in data-science, and was only making $75,000/year.
Depends on your perspective, I suppose. Personally, spending 2 hours every day in commute is definitely not how I want to spend my life. A major reason I would move to a city like NYC is to eliminate such a long commute.
Last few times I took the train to Brooklyn, the train was always delayed by several minutes. Sometimes 15+ minutes. Trains were packed, especially during rush hour, and there was nowhere to sit. Occasionally they'd just stop place for technical reasons for as much as 10-20 minutes. Definitely not a smooth or pleasant experience.
Regarding compensation: $120k is becoming entry-level compensation in the Bay right now.
I have no desire to live north of 59th st, but lets be real here.
Anyway, NYC software engineers do not need to compromise on their living situation. Google alone has bought two billion dollar blocks of Manhattan pays just as much as in the bay area.
Here's an ad from someone looking to hire a programmer in Nassau county:
VOIP company looking for a technician to assist with programming back end systems. Should be knowledgeable with various database programs and voice services and applications.
Primary experience: Windows Environment - IIS / ASP.Net, VB.Net, MS-SQL, XML, Json. Primary helpful: PHP, MySQL
Secondary helpful: Google SDK, ffmpeg / sox, SIP Voip , basic CentOS / Debian navigation
Job Type: Full-time
Salary: $35,000.00 to $45,000.00 /year
I guess that will be the next trend in hiring propaganda: selling us on that sweet homeless life.
Here's the list of skills wanted from another NYC junior programmer want ad that says $35-40K/yr:
Programming Skills Desired:
Transact SQL
Database Design & Theory
HTML
XML
CSS
JavaScript
VB Script
Auto Hot Key (AHK)
PHP
C#
All of these (except for AHK which I've never heard of) look trivial, but I'd expect the interview would be impossible, because the interviewer is going to be primed to expect people with no skills and therefore assume the worst of anyone who doesn't have 110% current experience in each.
VB Script and PHP and T-SQL and C# along with the rest?
I'd expect a college student not to be actively taught any of these (T-SQL maybe if they took a database class), and they're not exactly the new hotness for languages to learn.
I'm saying this as a dev that works for a company that uses a Microsoft stack right now too (I almost never see anyone talk about C# on this site or in the Who's Hiring threads.).
This seems like a laundry list of that employer's specific tech stack hoping they can get some sucker that has their exact stack because they happened to experiment with all of those languages in their free time, which is unlikely. Anyone who does have this stack can probably get a much better salary almost anywhere else.
It does say "desired" at least, and not "required", so they might not expect applicants to match this completely, but I bet some of the interviewers haven't gotten that memo (which seems to be what you're saying in the last paragraph also).
Also you mention you haven't heard of AHK, and it can be pretty useful. It's basically a macro program for doing things in Windows and assigning a hotkey combination to it. I've scripted some things in it before, although I'm not currently using it. It's not that hard to learn, and I can't imagine that any programmer couldn't pick up the basics after a few hours on the job, so I don't know why anyone would include that in a list of technology, thereby adding one extra thing for an applicant to think they need to have experience in to apply and not apply to their company.
Like a lot of ads, they mix ridiculously specific qualifications with ridiculously generic ones.
For example, one important skill is: - "robust practices" such as "loops"!
and another is: - "knowledge of City University of New York Institutional Research Data"
Requirements are "in-depth knowledge in big data, data science, Python programming, object-oriented programming, machine learning, or natural language processing (NLP)."
Responsibilities are: "Lead technical workshops and training sessions in different areas of data science and Python programming
Help clients and students understand the immense career options for Python programmers and data science knowledge
Motivate clients about the career change and career boost that upskilling with Python, data science, and blockchain can provide."
I think it stands to reason that if big data, etc. generally paid much more in the NYC area, nobody would take such a position, so this must be representative of the job market.
These companies get a ton of candidates and tell them all to submit homework assignments that take at least 5 hours (in your case 12).
Reading 12 hours worth of coding work is intense effort even when you know the language well. If you don't, it can take a multiple of that number of hours.
Some programmer got 10-20+ of these completed tasks dumped in their lap.
I can pretty much guarantee they never really took the time to read and review the code with anything close to sufficient care or attention. Doubly so if it's in a language they didn't know very well.
But on the other hand, I think good professional like you, don't need to take 4-5 hours for a take home, since you'll be fine without doing it :)
Thanks, but I'm a programmer, not a magician. A good programmer might work faster, but he's not able to reduce any amount of work to a constant.
A good programmer may accomplish in 4 hours what an average one will accomplish in 7-8, but he will not be able to do it in 1 hour. Also, he will still seem inferior to an average programmer who took 20-25 hours to perfect this project, especially if those take-home tasks are all that other programmer does.
Do you mean you've gotten rejection letters straight after submission? In anything but exceptional cases I thought it was standard practice to always have an interview after the submission and talk about the solution - how you talk at the code, design choices, possible optimizations and issues should weigh heavier than the quality of the submission itself.
So I don't think anyone using services doing it for them has any success with it. And if they do, you may have dodged a bullet.
Yes, that definitely happens. In fact, from what I've seen, it's the norm: companies who give out homework projects only bother spending any time with you if you completed them to their satisfaction.
Otherwise you just get a meaningless auto-generated that they're rejecting you.
> So I don't think anyone using services doing it for them has any success with it.
Why not?
If I'm a mediocre programmer in the US, I can go online and buy a solution with a full, detailed verbal explanation attached. Then I'll take maybe 40 minutes to read through the solution and explanation, and voila, I'm ready for any followup session you may have.
So they'll have you do one before you even come onsite. Then if you pass, they'll run you through the same whiteboard loop we all know and love. Even if your take-home performance was fantastic, they'll still reject you if your onsite performance was anything short of.
In practice, I take jobs that don't require demonstrating anything technical in the interview.
But a take-home test would only add information, not take anything away. So there is no reason in principle someone couldn't use it to hire.
A candidate like that will have 10+ companies trying to recruit them. Out of these, 9 will require 1-2 hours of remote screens at most for an onsite. The 10th will require a 5-10 hour take-home project for the same onsite.
Which one will the strong candidate skip?
There's no contract nor payment for these and I write them from scratch, so it's still my IP.
tl;dr: I feel you completely and will never waste my time like this again.
Come on. It's not completely unheard of to be given confusing or impossible requirements while working for some companies and while in those situations I would probably just communicate back to the Business Analysts what's broken about the ask, you aren't given that opportunity in a take-home with a new company. Presumably a bunch of other people have been given the task and successfully completed it, so I would probably try to power through it.
I'm sorry, but that's an asshole thing to do to someone. In an interview setting it's more okay, because you have a chance to mention it after a few minutes and talk it out and get feedback on it or they can stop you if it's clear you're not pointing that out and you waste a bunch of time, but with a take-home you won't get that quick feedback, even if you send them an email, and can waste hours and hours on that thing.
Interviewers reading this, don't do this, please. It would leave a very bad impression on me and probably a bunch of other people about your company.
...how about we give you a project that more closely reflects problems we solve here day-to-day that you can solve in the comfort of your home on your own hardware in whatever IDE makes you comfortable?
Engineers: That's absurd! I've drawn a line in the sand!
But, software engineering interviews are pretty rough. It is a uniquely miserable experience. Since I'm a temp worker I have a lot of them. They don't get easier.
I don't know of anyone who likes high pressure time crunch interrogations except maybe the ones getting to do the interrogating part.
A take home test isn't so bad. But, ya if you asked me today if I'd be willing to do one like that again I'd say probably not unless I was desperate. The reality is, it is a lot of effort to put in for it to all come crashing down with a rejection anyway. When you're applying at dozens of companies if they're all requiring that level of time and mental commitment from you, you can't swing it really and it's stressful. Interviewing and being under financial pressure at the same time is already a stressful position to be in, let alone being mentally and emotionally flogged for it.
All the jobs I was ever hired onto the hiring manager just had a good gut feeling about me and the tests never mattered. And, they were happy with my work.
The ones that never hire me usually rely on all the employees to vote on you, if even one says no you're out. Or, the ones that are very fixated on your GPA or whether you can invert a binary tree on the whiteboard while they yell at you "Wrong!" along the way.
At one, the resume didn't matter! When through the interviews, got the offer, and then "oh, can you send me your resume, so we have it on file?"
As someone who has been through this early career I agree with the sentiment. But being mid-career it is kind of fun to go through one now, the catch being that you shouldn't give a sh/*t if you get through or not. Think of it more as two-way courting instead of a one-way interview, not all of them pan out.
Something that "reflects problems we solve here day-to-day" is missing one feature: you're not paid for it. I have a pretty good job right now, but it's not like I'd keep doing it if they decided to stop paying me.
I had an interview a few years ago that I thought did something cool: you spent half a day working with people, and they paid you for your time (around $40/hour, if I recall), and made an offer based on how well you worked with people. I ended up not getting the job, but at least I didn't feel used or like I wasted me time in the process.
Me: How about we do something that more closely reflects problems you solve there day-to-day there and during the day? Your interviewer being present throughout means you'll get to see how I work and you'll be able to provide clarifications or answer questions as well. As a convenient side-effect, we'll both know that the exercise is a sufficiently valuable use of everyone's time to give up the equivalent amount of salary over it.
"How about you, a highly trained professional, do 5-10+ hours of unpaid work for us, that will be judged against desperate candidates who invested 25+ hours into them and/or bought a solution online, so you will get nothing for hours of work, except a meaningless rejection notice by some overworked programmer who didn't even read much of your code since he had 50 candidates' solutions dumped on his plate?"
Personally, I've hired many great candidates, and got several great jobs, via whiteboard interviews. It's not perfect but it's far superior to takehomes, which are completely one-sided, very hard to get right (by the recruiting company), and often are boring.
Whiteboard interviews and (even better) pair-programming with an interviewer are reciprocal and allow me as a candidate to learn about the company rather than just do some work for them for free. Often the tasks are more interesting too.
In my opinion, it is the takehome tasks that are "doomed". Their premise is flawed: "we don't want to invest an hour of our engineers' time in talking you worthless candidate, so we'll instead have you spend several hours coding up a task that our engineers will never take the time to check properly, since their time is more valuable."
In my opinion, the future is platforms interviewing.io, where candidates are vetted and top candidates get the minimal investment of an hour of the company's engineer time to pair-program, which is far superior and more reliable way of screening.
How about we also give you this other project?
If it were 5 hours on-site versus 5 hours at home, that would be different than 5 hours on-site plus 10 hours at home.
I think it's weird for people to complain about whiteboards and technical questions, given the implied alternative. There are many other industries if you prefer the traditional hiring model.
That is, if you can get an interview. While you complain about the awkwardness of a whiteboard, people in other industries are quite happy to get a call. And in the interview, they compete in terms of poise, diction, rapport, and other intangibles, without the chance to repair any lack thereof by demonstrating technical competence. And they get 1 hour to make their case, not 3-6 hours.
All of the complaining is tiresome. Some companies have difficult interviews, many do not. Who cares?
Guess the gist is that bottom of the barrel jobs have easier interviews. I could buy that.
That's a solid point. Yeah, engineering interviewing could be better, a lot better, but as we push to improve it, it's really important to keep in mind how privileged we are. I remember having a discussion with one of my friends in a different field who was thrilled to get a recruiter pinging them on Linkedin, for example.
Also, given how chaotic the field is, and how people come from all sides (some with CS degrees, some self taught, some who worked at great tech companies, some who didn't, etc), assuming everyone's a bullshitter is unfortunately kind of expected. We absolutely should treat people with respect and dignity, but that doesn't mean being naive either.
And in other fields getting fired and even demotions are pretty common, while in big tech hubs thats nearly unheard of, except for extreme cases or very very entry level people.
When was the last time you saw a news story about a Ceng / PE getting disbarred? Stories about doctors are much more common.
A lot of people can speak (very deeply) about many topics, but as soon as they're in front of a keyboard it falls apart.
You cant directly compare a professional job to say an skilled worker in a corner store / bodega - we may have similar problems but they express them selves in very different ways.
1) Extremely regulated fields with strict education, training and certification requirements (eg: a physician)
2) Fields where you have to show something. Designers frequently need to have extensive portfolios. Carpenters need both that and real world referrals of happy customers (not just nearly automated HR checks we have in software dev where no one will say anything bad out of fear of getting sued)
3) Trial period followed by sink or swim. Come work for us and if it doesn't work out we'll demote you or fire you. There's a few places like that (I think its Netflix's model?), but generally firing someone has everyone around calling foul.
Thats absolutely my personal preference. The argument against it (very valid), is that if someone with a family relying on their paycheck quits their job to go work at another with that policy, and gets let go after 3 months, they're kind of fucked.
We could have this for our field - and to a certain extent we already do, at least via a github repo. Only problem is, nobody seems to look at them.
People have mentioned that SWEs should have a portfolio - but I've never worked for a company they let me take home code and put it in my portfolio. For web development, I may or may not be able to point to a specific site and show someone "see this here, I developed this part" - and even if I could, how would I prove it? Most of the time, it doesn't matter - as that code/feature/website is likely gone or changed by that time.
So you only have a couple of options to develop a portfolio, and those options only work for some people, not all: Either contribute to an open source project, or work on your own side-projects, putting them all up on github or similar repository you can reference.
But not everyone has the time or inclination to do this.
There are significant pushbacks in some communities that this isn't inclusive, because people can't spend that much time outside of work hours to build one (and as you pointed out, internal code can't really be included).
Graphic designers and stuff are always sketching/drawing stuff on the side for their portfolios though, and that seems pretty expected, so... /shrugs.
Don't forget the interviewer's arbitrary "system" for weeding out applicants that has no basis in research and varies from one hiring manager to the next.
Whiteboards are an unbelievable utopia compared to so many other disciplines. It's an amazing stroke of luck that software developers don't have to do medical-style "residencies". We don't have to rely on letters of recommendation from our professors (hope that professor you slaved away for for six years doesn't have a bad day when he writes your letter!) We don't have to pay thousands of dollars to take excruciating standardized tests to obtain certifications that expire in a decade. We don't have to do unpaid internships, we don't even have to wear business suits to the interview.
Software devs don't realize how many people in the world would kill to have things as good as we have them.
But I'm not sure it's that developers are being given gold and don't recognize it. It's that developers are being given mud and recognize it, while most other people are being given shit instead.
I'd rather be handed a pile of mud than a pile of shit, but it's not hard to feel that there must be some alternative that's better than either.
(Maybe there isn't, though. Matching candidates to jobs is just hard, I think; everyone's incentives are misaligned, performance is difficult to predict, it's amazingly difficult to get past your initial snap judgements or even to realise that you're failing to do so, etc.)
The problem is those things only get you in the door, then it 100% comes down to your whiteboard under-fire skills - which admittedly have gotten worse for me the older I get. Although I know I'm a better programmer now.
As if it's a given the whiteboard process actually provides a useful measure of technical competence.
Technical interviews where you look at some code and review it, or is asked to broadly describe how to design a system etc isn't unreasonable, and as you say it's better than judging only on poise...
Can anyone who has made career changes to or from tech give their experience?
There is an essay about the feminist movement in the 70s (https://www.jofreeman.com/joreen/tyranny.htm). It makes the reasonable point that people are likely to hire/recruit people similar to themselves. The code interviews are expected to remove this, if you stick a bunch of CS people in a room and tell them to make an unbiased interview process; you'll get the hell world we live in today. To get a job on a sales floor, most of it is just impressing the existing gate-keepers.
Coders live in a fantasy world where gate keeping isn't real. Except it isn't possible to remove that from hiring, no one wants to hire someone who doesn't integrate well in their team. So we have this hellworld where people can study for 3 months on leet code and nail the tech interview, they still won't get the job. Even though the "unbias" process says they should.
Some background, about 2 years ago I started teaching myself to program full time. About a year ago, I felt confident that I knew enough to get a job, taught myself all of this leetcode stuff, and started applying.
People told me that if I could crush leetcode, I'd have no problem getting a job. What they didn't say was how impossible it was to get an interview when transitioning fields.
I was also told that people would look at my GitHub code, but considering recruiters spend about 15 seconds on a resume screen, this is more of a meme than reality.
In the last year in Bay Area, I've managed a total of 2 on-sites with well over a hundred applications, all of them quite targeted. Maybe 8 companies total have engaged with me, and I have not missed a single one of these types of questions at any point in the process, yet it hasn't been enough.
It seems that there are so few entry level jobs that that market is extremely saturated. I'm not sure how this industry expects to address it's serious man power shortage if no one wants to hire juniors.
The most likely problem is simply that you are getting questions wrong, but you don't realize it. Companies don't often give candidates whiteboard questions, have the candidates nail those whiteboard questions, and then drop the applicants.
Looking at your profile, you seem well suited to be able to evaluate this, so let me give an example from an interview I just had.
Here's a problem and solution from the last interview I had: https://pastebin.com/LyVYqLv4
Would you mind emailing me whatever resume-ish stuff you have at my hn username at gmail? Maybe I can give more specific help.
`biggestSize = 99999999 #MaxInt` This is returned if the caller passes you 0 for slicesToFind, so you're returning a nonsense value in that case. Either raise an exception (preferred as it catches errors fast) or return None.
`def area(size)` You're using pi r^2, so size is a radius, but it seems you call it with a diameter. This is why choosing distinct names is very important.
`newSize = (originalSize / newSlicesInCake)` Again, using "size" all over the place is confusing. I'd write something like `new_slice_area = (original_cake_area / new_slice_count)`.
As far as 0 input, they actually told me it would always be valid so edge cases were not accounted for.
But, yeah. Casing convention was surprisingly important in one of my interviews. They wanted to know that I was able to adapt to a new language as the job was for a language I didn't have on my resume. It's weird, but I understand where they're coming from. Seeing improper styling in a code review is an immediate red flag and an interview problem is ultimately a code review.
Here's some discussion on it https://leetcode.com/discuss/interview-question/348510/Googl...
Companies are all over the place all the time. And I have seen this from both sides of the isle.
For example, at one company I was at, we said we were hiring for a full stack position, and we had a candidate come in that did well on all the questions, but then afterwords, we decided that we actually wanted a dedicated front end engineer. So no job for them!
It was no fault of the candidate. We just didn't know what we're were doing and screwed up by interviewing someone who was better suited for a different position.
Stuff like this happens all the time. Even if you blow the interview out of the water, there is still only like a 50/50 chance that you'll get the job, due to no fault of your own.
It's tough to get a foot in the door. I managed a transition largely thanks to preferential hiring for veterans, but even there I had a CS degree and some prior tech experience before going into the military.
The other problem is that "junior" really means "fresh out of college." Transitional resumes look weird and they get thrown out in favor of people doing the normal thing.
> I was also told that people would look at my GitHub code
Recruiters, probably not, but if I'm doing an in-person interview with you, I've definitely read your github page.
Tip: I'm looking for a. high quality code, and b. a delivered product.
What's high quality? Find code written by the best people (e.g. your standard library, a major framework) and aim to make your code look that good.
What's a delivered product? It has thorough, well-written documentation, and I can install it with a single command. If you set up a demo on a website, that's obviously better.
Just for some friendly and non-judgemental feedback from a different point of view, to me that sounds like more of your own fear coming out than reality.
Everyone who interviewed you also said the same things out of fear before they were hired, and then they got in and didn't manage to change it. That could mean it's not viewed as a problem from the inside...
Companies are hiring people onto teams, not to hero-solve pure code problems in a vacuum, but to work together with other people. Communication and personality and attitude are all super important, usually more important than technical skill. (That doesn't mean technical skill is unimportant, it means precisely that people skills are more important, for the average programmer candidate.) It's a feature, not a bug, that team consensus is needed. And there's rarely 50/50 chances, using that to speculate wildly on your chances will prove incredibly inaccurate... the most common case behind the scenes is that more or less everyone agrees that either the candidate is right, or that they're not right, or that everyone is meh on the candidate so nobody is pulling for them.
Chances are determined by how many people are applying for the job versus how many jobs are available, with a side of how long the company wants to take to fill those positions. The company has the upper-hand knowledge of what the candidate pool looks like, and they can hire the top 10% of those candidates who apply. As an applicant, you have no idea and no control over that. All you can do is improve yourself, research as much as you can, try many options, and try again when it doesn't work out.
I've interviewed at over 100 places in the bay area. I'd say that from internally and externally, most of the companies here have no idea what they're doing. Most don't use rubrics, most don't have a standardized set of questions that have been heavily reviewed and tested, there is either no training or inadequate training, and most are winging it completely. Many ask whiteboard questions to interview candidates and they never had to do them for the job they got (got in through referral or at a different stage when they weren't doing such questions). Resume, referrals, and charisma will get you into positions very easily in many of these companies even if you're very technically challenged compared to others with less resume+referral+charisma.
Being liked is one of the best ways to get into positions you are terrible at but compensated so well for.
Does it matter if someone who didn’t get asked whiteboard questions is asking you whiteboard questions? That question is implying some vague concern about fairness, and isn’t focused on whether whiteboard questions are a good idea. On the positive side, at least they’re asking coding questions and not hiring 100% based on resume and charisma, which definitely happens in other industries.
Younger programmers especially seem to think more often that highly reliable technical evaluation in interviews is both achievable and desirable above soft skills. In my experience that view may be too narrow.
I’ve interviewed and hired many people over the years for several companies, large and small, and no matter how much advice I offer about what is actually important when interviewing, it seems like candidates rarely listen, and instead complain that “they don’t know what they’re doing”, as if they know better.
I honestly think interviews are legitimately scary, and that fear comes out in various ways with programmers suggesting their ideas for “improvements”, but by and large the system is working, good companies are finding good people. I know there are a lot of interviews that are stupid, and I know there are bad companies out there. The suggestions in the article won’t fix that.
Being liked is a good way to get hired period. Being liked and being good technically is better. Being technical and not likeable is a good way to not get the job. It has very little to do with the occasional cases of incompetent people being hired and paid a lot.
Honestly I would take home assignment over any technical interview. Even if it will cost me 3x time. At least then I will be working in a relaxed state and will do my best, compared to an interview where anything can go wrong.
Homework feels really unnecessary too. If the interviewer would like to see code I have written I have a USB stick full of old university assignments and some public projects on Github.
Fashion house 1: 2 guys sat me down and ask me to answer a question about some node.js code, which took around 25 minutes to get running on my laptop. Once it was they were hoping for progress, when it took me a few minutes to read through several config files ( over a hundred lines each).
After 30 minutes they gave up and asked me what library I should use for a certain task. I said I had built alot of code in that domain didn't recall which library I used for that specific task.
Suddenly I was walked out, but not before one of them took pity and tried to explain to me how, when you make a request you can write code which waits for a response from a server (async programming).
I ofcourse thanked him and left.
This was after I spent 3 years developing a successful networked engine in my spare time ( with a custom 3d engine bolted on it ) which enabled 20 asynchronous connections for a war simulation I built. They both had 30 minutes and hadnt thought of reading my CV or asking me about any of code / experience. Just drank their coffees looked at their mobiles and waited for me to somehow decipher their 10k line codebase. (Management had already OK'ed me but were not around for this part of the interview and blind to what was happening ( or the lack of it.)
To this day I dont think the engineers even looked at my CV. Just thought I was some confused kid who didn't understand how basic network code worked.
Fashion house 2 I also interviewed at their competitor, who had looked at my CV, lead engineer was about to extend an offer, CEO walked in, not knowing who I was, asked a casual question ( culture fit ) type, but I was unable to answer, I had trouble understanding what he was saying. Failed interview, but that is ok atleast I was not as offended this time as there were no quips.
The icing on the cake, was that both companies had a 20+ engineering team, that relied on an app, which just framed a webpage.
And I cant help feeling I know the reason why.
I was only asked how DNS works in the interview and I answered that. I told the recruiter this wasn't mentioned in the job description nor was I asked those questions in the interview, but he didn't have anything to say.
I think the entire dev hiring process is broken. Not because I had a hard time, I think I had a totally normal (and slightly easy, because was okay where I was while looking) time and ended up getting a large raise and ending up somewhere I love...but I've been on the hiring side as well and I think hiring signals are weak and cargo culting is rampant.
It's telling that I can't think of many other fields outside of academia that require so much time interviewing to hire.
https://medium.com/swlh/brief-thoughts-on-getting-hired-as-a...
I did a coding test once that was organised, met the requirements of the test spec, was documented, included tests and in identified and solved an inconsistency in the test spec.
The feedback from the employer "they didn't like your code" - right there is the point at which I realised that coding tests are, without a quantifiable, systematic assessment method, complete garbage.
I just hate the technical beat stick that is the whiteboard test, feels like going up in front of the class in data structures and algorithms classes
1. It hires me
2. It can be used to unhire others thereafter
I have been asked many times how to solve crazy, weird problems in what is the equivalent of a couple of functions.
The first kind of test, which I have not been given, is highly relevant to my daily job.
The second kind of test, which is administered in every single interview, is relevant maybe 1% of the time in my job.
I try to keep this in mind when I am on the hiring side of the table.
The problem I have with them is:
1) Malign intentions: You never know whether they are trying to:
- Purposely waste your time.
- Free consulting. How would this guy do this ?.
- Data compilation. Let's see how a bunch of unemployed developers solve a particular problem.
2) Is too easy to reject a coding assignment based on subjective things since there are so many different ways of doing the same thing.
3) It is easy to cheat. You can easily ask/pay someone to do it for you.
And the core problem is that is too easy to ask for coding assignments. Companies don't loose anything by asking you to spent a week doing the assignment.
If you won't do it there are many others who will.
If I'm not going to do a 6 hour take-home assignment for you, I'm definitely not going to do 300 Leetcodes to "prepare". I've been doing this for 34 years. That's my preparation. Either you want what I've got, or you don't.
The real reason candidates get rejected is simply this: 5 candidates get interviewed and ONLY 1 can get the job. This is simple math. No amount of studying on the part of the candidates, and no amount of interview hiring competence can avoid this outcome: there is only 1 Job. The reason for all this is simple: a vast oversupply of qualified candidates. As more and more engineers get pumped into the market, this problem will only get worse. You can see from the 2019 developer survey, the ratio of 1-5 year devs vs 5-10 years, indicating the number of senior devs is increasing very rapidly.
My take on the comments: - We know whiteboarding and algorithms are bad. - Take home assignment is better, but very few companies do this right. - If doing wrong, the experience will be far worse, make you never want to do it again. - The reason is, A. lack of transparency; B. unbalanced time commitment, candidate vs company
On the other hand, I think we should give more mercy/time to take home assignment. We know it's better, we know it's in the process of improving. If we don't say no to algorithm, it'll just be there forever.
I'm not sure all these code tests are EMOTIONALLY sustainable for a developer.
https://www.amazon.com/dp/B07FJ6N8P1 (the book will be free tomorrow - would love for you to give me some feedback...)
Lighter-weight then this paper - just my experience in using different kinds of tech interviews, and what I found that worked the best for my team and company.
Some key points:
- Interviews should be as close to what the candidate will do in the job - if they'll be writing a lot of code, that's just basic algorithms - on a whiteboard - then whiteboard interviews are perfect. If they will be doing a full project and interact with others as part of that project, then do something more like that (For me, that's a take-home - with an emphasis on the interaction part, and how they go about creating software... not coding). Treat it like a project, not an interview quiz question.
- If doing the takehome, respect peoples time - it needs to enough be close to something they'd do in the job, but something that can be done in a handful of hours (and NEVER treat it like getting free work. I personally would love to be able to do a paid take-home, but haven't had the budget for it) The total expected time of the take-home + onsite should be able what they do for just a full on-site
- Understand that not everyone will have time to do this. Have a backup (my backup is "Project Day", which is on-site, but still about creating software)
- Try to do the same one for all candidates. At my last company, 80+ people ran though the same take-home. The team really started to get a sense of a good result and bad result.. and not JUST on code. What questions did they ask? How did they go about driving the project? What tools did they use?
- I did catch a few people cheating (after 80+, the code was out there, so not hard to cheat). LOOKING at someone else's project for this was ok (if you read the book, you'll see why). Outright copying was not. Part of the process is a friendly code review after the project is done - if the candidate wrote the code, they'll be able to talk to it, and have ideas of how to improve it. If they can't do that and don't see to know the code, they probably didn't write it... which was painfully obvious for those that tried to cheat.
Do what works best for your team and company. This worked best for me; I have yet to see whiteboard interviews be a strong indicator of someone being a great fit for a team, but I was able to build a great, happy, very productive team using this method.
The thing is, I have barely any (read as: no) software engineering knowledge and don't know how to build any sort of programming product.
Review code.
It would be at least a few pages, in the language they would be working in, with a few bugs that you know of in advance. Depending on what the code does and the particular bugs you introduce you can get a pretty good idea of the candidates' comprehension of the things you need. (Bonus points if they find bugs you didn't introduce.)
One problem with this is that both the code itself and the evaluation of the candidates review have to be done by sharp folk who know what they are about. Otherwise GIGO.
"One of my best interview experiences was exactly that. The interviewer handed me a printed out class and said "tell me what this does, any mistakes you see, and any little improvements that you think could be made."
I got the job and later confirmed it was a class that was actually in the software I would be working on, not some toy class he came up with.
He also asked me a handful of technical questions and had me go over some source code I brought in, but that was about it. At one point he even said, "I know enough to know you can do the job, but now I'm curious what you really know." And asked me some no pressure really low level questions. When I said I didn't know the answer to something he'd spend a couple of minutes explaining the concept to me.
I walked out of that interview having learned a few new things about my field. A couple of them have stuck with me over a decade later.
And the guy was a grizzled veteran who was the lead on some massive mainstream video games I pretty much guarantee you've heard of. He used to code them in Assembly, even. He's probably the most knowledgeable programmer I've ever met.
I've never had anyone try going over actual code with me since, in probably a couple dozen interviews, and I don't understand why. It seemed very effective."
You could say, why not giving Sudokus, or chess boards challenges to candidates? It's not totally bad either, it's just further from the context
All this is not incompatible with knowing other engineering fields, networking, security, data structures, code patterns, which are indeed more useful in day-to-day work.
Students are often selected the same way in exams, which won't really matter in their future job/life if you look at their content. But the process matters, school teaches you to learn mostly, like those small logical/algorithmic challenges trains you to think, visualize, reflect on data and more
However, that set of people is outnumbered by the set of people who applied to Google or Facebook and got rejected.
Probably don't want to go through this process again, unless there's some amazingly good opportunities there.
I went to the interview, did a sit-down back-and-forth in-person discussion about my past work and resume; the usual. No whiteboard.
Then I was told I had to do a practical exam; they basically gave me a laptop (MBP with MAMP - this was for a PHP/MySQL position), sat me in a cube with the rest of their development team, and gave me a test to work thru. First half was just question-and-answer (multiple choice and t/f - maybe some written too IIRC). The second was to code up a simple CRUD app using PHP and MySQL.
They said I could use any resource I wanted - google, etc. This was about 3pm, and I had until 5pm (quittin' time) to finish. During this time I was working in the area I would be normally working, among potential future colleagues, with all the office distractions normally found at this place.
Oh - I forgot to mention where: Fender, in their marketing department.
So - randomly - people would start to play amplified bass guitars, or a drum solo out of nowhere. At one point, someone rang a cowbell and stuck a triangle. Fortunately, there wasn't any artists being introduced, but that was a possibility too. Various people on the team came up and introduced themselves. Distraction galore!
But that was how it was going to be - so that's how they tested you.
5pm rolled around, and they came by asked how I was doing - I let them know things were coming along well, but that if I had another 15 minutes I could get things more solid. They said, sure - take your time, we sometimes stay late - no problem. So I finished, and gave it back to them.
Went into a separate f2f with the director of the department and some of the team, chatting about my experience and such. The SWE supervisor and lead SWE came over, shut the door - and basically made me an offer right there.
I worked there for a couple of years before they did a downsizing and I had to "move on". But during that time, I found that this kind of test was actually very, very difficult for more than a few people. Some didn't even do anything - they just sat there. One guy sat for a few minutes, then got up and left, never to be seen again. Some would complete the first half of the practical, but completely blank on the second half. All of this, despite having a completely set up system in front of them, plus ability to reference the entire internet. If they didn't know PHP or MySQL, it wasn't for a lack of resources that they couldn't or didn't write anything...
Then again - I've heard of people failing to write fizzbuzz, so...
But overall - that was one of the top interviews I've ever had for an SWE position. I guess it was partly the practical testing, but also putting you "on the floor" to see how you'd fair in that environment (and yes, the whole instrument playing thing was a daily thing). I guess some people couldn't handle it. Others might've just not wanted to do the practicals feeling it was beneath them or something? And still others might have actually just "frozen up" for one reason or another - or really couldn't do what they claimed.
For me, it was one of the easiest and relaxing interviews I had ever done, and I would do again - and would love to give a similar interview to someone, if I were in that position.
1. A phone conversation with a manager to see if we were on the same page.
2. A one-hour on-site coding test, writing a fairly simple class using very strict TDD (i think we did this in the evening, after my day at my previous job had finished).
3. A whole day on site, spending each half of the day pairing with someone on something. In the morning we wrote a little demo app for using Redis on Cloud Foundry (in Ruby, which i didn't know!), and in the afternoon it was some made-up webapp (using Spring, which i also didn't know). Both things either were or were very like real development (on the Spring thing, we spent half an hour setting up the environment, fifteen minutes coding, then two hours debugging and reading Spring docs to find out why it wasn't working, so exactly like real Spring development).
The first two stages were pretty undemanding, which was good for me. The final stage took a lot of time and energy, but i got to spend the whole day with two current employees, both of whom really impressed me (shouts out to Chris B and Nick S), and that was really good for me.
In general, i really like to be given a stringent interview, because it indicates i'll be working with high-calibre people who have passed it. But it does have to be effective in its stringency, not just unpleasant. Amazon Instant Video's hiring process was the latter (and not just because it took a whole day with no break for lunch).
I'd be happy to interview people that way. When you can't talk enough about your project, nor about stuff they've worked on before, you can still engage them in a discussion of a hypothetical but real-world problem (not CS101 problem sets), and go from there.
If you know your own technical stuff, IME, it's pretty easy to tell from talking with someone that they can fizzbuzz, without a hazing gauntlet of whiteboard exercises that give little sense of anything (other than that the company thinks hazing experienced people is a good idea, and that the person will submit to hazing).
For those that complain about them, are you really as good as you say you are?
I support coding challenges, as long as they're reasonable and won't take too long to complete. If you'd spend an hour doing an interview, wouldn't it be reasonable to spend the same amount of time on a coding challenge? The best ones are done during the interview. No more time wasted.
That first question in the paper is an indicator that I literally don't want to work there. Their culture is probably toxic, full of bro coders and likely infested with poor time management and politics. That's my rule of thumb and I'm sharp and harsh since I've seen enough to make this assertion and won't even negotiate on it.
The reason they showed me a puzzle is they want interviewing cheap. But I'm not cheap. And I'll see right through it and just see a messy company. No thanks. I have too much experience with messy companies and can spot them from a single question. I'd rather work with professionals with real problems and no time for nonsense.
Google etc can't hire someone like me because I interpret stupid puzzles as an indicator of poor work environment. I don't write this out of some sense of superiority: I'm just tired of the correlation between puzzles and environments that are just plain bad. The mentality of people who like pointless puzzles is not one I'd like to work with. The irony of my job being based around production issues that involve uncertainty and require novel solutions is not lost. I work with smart people. Do people on the outside really think we would play with wooden or toy puzzles because we"re "technical?" None of us do.
I get my contracts through referrals so interviews are mostly now just "hey are you available in a months time and can you also do X" followed by "do you have a github for this kind of work?" Then a quick 15-30 minute interview with no idiot puzzles. Mostly to expand on experience to explore some portfolio piece. Big corporations can't do this kind of interview. Their hiring is broken. That is why they have thousands of candidates and still shout about talent shortages. I've been interviewed a few times and I usually get to a point where I say "sorry but I'm not happy with the environment you are presenting" then I politely cancel. I can't be alone in this experience. I'm a blip in their radar that rapidly fades away. They probably see me as poor fit. Good.
Lower your tolerance. Raise your expectations and actually judge them back. They are presenting their corporation in the best light possible. So using puzzles is their best light. Ouch.
Any code or project example that an interviewer presents to you are demonstrations of how their best practice development process works. Best or worse or an examination or discussion of why not either way. Evaluate them. If its "from scratch" then they simply do not use libraries and suffer from "not invented here". If its not commented, they hate maintaining code and they want you to fix their mess. Is the time limit too short by your experience? Then they expect miracles and likely won't pay for it either. What about a 8 hour home project as part of the pre-interview that you could probably sell? They expect free labor and no compensation for it.
These are assumptions but when firmly applied your opinion will be suitably sharp enough that puzzles no longer seem so reasonable. Judge the interviewer on what they present. That code will be production ready or they will ask why it isn't. Each question is an example of how they specify real problems. Judge them on their method. Is there enough information? Why not? How is that acceptable?
The interview process is two way. Anyone who says otherwise is someone you want to avoid. They are likely toxic. Don't work with or for anyone who thinks interviews are one way. If the process is not win-win then avoid because other nasty surprises are hiding in your near future. My personal experience shows genuine horrors await if you stay.
Why is that particular technical question so bad? Because it shows the answer will not be production ready and the culture around it accepts that. The design specification is indicative of bad design. They even showed the shape of their preferred answer.
Consider the implications: what was missing from the question? Why would I care about what was missing? What is the maximum run of numbers it can search? A million numbers? How often does this code run? Is it part of an interactive flow? I hope the user has coffee and a lot of patience. When does it time out? No answer in the design. It never does because it is not specified. The interviewer likely won't even answer that question. No context and you now seen as incompetent for asking. Instead you can ramp up the assumptions: So the entire system hangs as it searches. You could also say that the company is likely bad at operations and they don't specify their problems clearly or thoroughly enough. They have multiple mysteries in their systems they just can't solve. Systems fail for no reason and asking why is "being difficult". What a painful place to work. No thanks.
I can make these assumptions because the question they showed me is seen by me through the lens of a production example. An example of a problem I'd likely see if I accept their contract. This is an inter-view. Two views. I expect them to show me a serious example of how they would frame a problem and how they would specify the preferred shape of a solution. They didn't show me a toy problem because they wouldn't want a toy solution. That would be disrespectful: so what was presented is a serious question to be solved. It is to act as a demonstration of what I would be presented with and then they want to see how I'd meet and solve it. Now look at the question again. Its so simple. Just answer it. Ignore everything. It will be fine. Now clean up our codebase. Have fun with all those puzzles. We need it fixed in 30 minutes, all 200000 lines.
Oh well. Back to work. I've got money to make and this system is 1.5ms too slow, and that is costing the business 100k per month in lost opportunity. How would I solve this? Perhaps a bubblesort algorithm I saw in an interview question awhile ago might help? Thats fast and best practice isnt it? Perhaps I could write it from scratch... on a whiteboard. With only 5 minutes. Sounds great doesn't it? Should a company bet their livelihood on that kind of decision making?
Interview carefully. You could end up working with these people.
Alcatel tried to kick me out with security. I went out on one door, entered another in next 2 minutes. I argued with them, I voiced that I will keep doing this until I get a tech guy to interview me. When head of HR came eventually and told me police is on the way I said "so until they arrive can I get that tech guy to do the interview? Because I will pass it in 15 minutes, that's how awesome I am". That line made him reconsider me and guess what, I was hired. My point is if you know you can do the job just push it, regardless of obstacles.
Siemens punished me for this type of behavior by interviewing me for 8 straight hours. No bathroom breaks, no eating or drinking this time, just interview with one manager after another, all with hiring power. First of them was actually the head of the entire HW department and he made sure I understood what is going to happen. Later on I found out who he was, and on hierarchical ladder hes was the boss of the boss of the boss of my boss (team leader -> immobilizer division -> BCM group -> HW department). After 6 hours came a group leader (BCM - https://en.wikipedia.org/wiki/Body_control_module) that was actually in need for guys in one of his teams and I finally got to coding part and at the end of those 8 hours I got a contract to sign and to start next Monday (this was happening on Friday). Their punish made sure that I was actually that good as I was bragging at beginning and that I was willing to do the grinding required for the job. This way I got to work on immobilizer division (this was an embedded SW position). My point is that if you brag, make sure you also can do it, as harsh as it can be.