The article could be a_lot_ more concise. Here’s what I got out of it as the takeaway:
> And that helps us understand why Recursive Cactus spends so much time practicing. He’s training himself partially because his current company isn’t developing his skills.
Exactly. Recursive Calculus wants a better job, (a lot) higher pay, a better environment. So he spends time prepping for this.
And companies who can offer all of this, and get a lot of interest already, they are selective, minimising false positives in the hiring process. They expect working code in the coding challenge, a good attitude and some other skills like demonstrating decent systems design. Recursive Calculus also preps so much as his interview process to his current place was different and he _really_ wants to nail these interviews, get a bunch of offers and get into a bidding war before saying bye to his current workplace he’d love to leave for something better.
There wasn’t really any actionable thing in this article that I found, or applicable advice. The end.
The actionable thing is the graph about two thirds of the way down - passthrough rate vs performance.
That's the whole point of the article. Two possible conclusions:
One is that companies are cargo-culting hiring, and have absolutely no idea what they're doing. Clearly whatever the process is supposed to do, it's not hiring the "best people" by any realistic metric.
The other is that the process is working as intended, but the actual goals are not stated. This might be true if the aim is to hiring difficult and stressful for candidates to discourage job hopping. (Other interpretations are also possible. [1])
If a company wants the "best people" it needs to follow up hiring with performance tracking, and identify and reward the people and hiring practices which increase performance. [2]
If companies want hiring to continue as a social/political game which stresses and discourages developers, the system is working for them, and they don't need to change it.
Startups need to decide what kind of company they want to be. [3]
[1] IMO there may be a strong element of corporate narcissism in the process. It's not about hiring good people, it's about allowing the CEO and senior management to feel that their company is better than those other companies which hire these people. In reality "these people" may be a bit more than averagely competent, but with a few standouts most won't be insanely great or A players or 10X or whatever the goal is supposed to be.
[2] Which assumes it's possible to measure performance, which is a whole other issue.
[3] I'd bet almost anything that in reality there's a lot of "Oh, you were working with X at Y? Awesome!" affecting hiring choices in SV.
It seems like a lot of these discussions end up being something along the lines of "the standards are bad because they exclude me, therefore there shouldn't be any standards at all" (just with a lot more words).
>And that helps us understand why Recursive Cactus spends so much time practicing. He’s training himself partially because his current company isn’t developing his skills.
I develop software full time and have some 10 years of experience depending on how you count it, and I'm absolutely terrible at leetcode style problems and find whiteboard questions difficult for non programming reasons.
I know it wasn't the point of the article, but there's a deeper problem here that most FAANG programming questions aren't actually testing work related code skills.
At my company we give two very basic tests, takehome. Both can be completed in 15 minutes if you're rushing. Far more useful of a tool than any of leetcode style questions.
Perhaps there wasn't any actionable advice, but it's a sad indictment of the current state of tech hiring. Based on the article you can assume that Recursive Cactus is already in Big-Tech ("well known tech company") so "(a lot) higher pay" is a moot point and quite frankly it's unlikely that the daily tasks involved in the next job will bear a strong resemblance to the kind of synthetic tasks or problems you are asked about in an interview setting.
The article did raise more questions than answers, but that was by design. A lot of the assumptions that go into most tech interview processes don't withstand scrutiny. Interviewing is a hard problem to solve, but we shouldn't be satisfied with the status quo.
None of my jobs have done much to exercise the skills I’d need to get exactly the same job in every way at a place that does whiteboard quizzes, language trivia questions, and/or leetcode stuff. It’s not even about moving “up”, necessarily.
I had a conversation with a fellow engineer and we pretty much concluded that our current company would not hire us with our current resumes if we had to go through the interviewing process. And we are generally viewed as some of the higher performers. I bet the same is true for a lot of other companies.
I too would most likely not get hired at my current company with the current interviewing process (which I am asked to do technical portions of!). Company growth really changes things.
I suck at writing resumes, to the point that recruiters and even hiring managers at companies that I applied to give me a pity and even talk on how to improve my resume DURING INITIAL PHONE CALL lmao.
I have a similar perspective in that I think most engineers probably could get hired, but there's enough randomness in the interview process that we probably wouldn't. Not just in who gets advanced to the phone screen, but also variability in test performance. Most of the interviews were open-ended and had multiple correct answers - but it still really only answers, "did the candidate think of the right answer in X minutes". One of our questions pretty much explicitly required knowledge of how to implement a rolling hash to pass, and that's not something I knew when I worked at the company.
I'm of the mind that most interview questions can only reliably identify people who are not capable of coding, and roughly gauge the algorithms knowledge. I had floated the idea of making interview experiences that more closely resemble work, like having the candidates make PRs in a mock repository. Better yet we could see not just how they make a PR but also review PRs and make comments. But often the primary concern is logistical. It's easy to train people up on 1-hour problems with a grading rubric, than a longer more open ended interview.
For sure -- I've seen this at multiple companies. I'm not sure what causes this. I suspect there's a certain element of "pulling up the drawbridge" going on here.
This is so silly. Here's teh secret: your programming ability is set genetically by how much Yeti blood you have in your ancestry. Yeti half-breeds recognize each other (often unconsciously) by smell. That's why some people can get programming jobs hella easily while others just can't even after strenuous training. Check your feet. If your second toe isn't longer than your big toe you're screwed. Give it up. You might as well go get an MBA or something.
The section in that article about 'Defining “Intelligence”' is similar to a previous discussion on HN about whether a FAANG interview is just "an IQ test which is disguised as a relevant skills test for legal reasons". [1] This article does a good job of supporting that claim. Theoretically, both IQ tests & FAANG interviews test for whatever "innate intelligence", but in practice, both of them can be gamed by grinding brainteasers & leetcode respectively.
The tech interview process is just so badly messed up. Even if the process were a reasonable proxy for IQ (it's not), or correlated somewhat with use of actual required technical skills (it doesn't), it still almost entirely ignores the EQ (emotional intelligence) and CQ (cultural intelligence) factors which comprise the other 2 legs of the "good hire" stool.
I applied to a new grad production engineering job at Facebook recently.
I probably did about 80 leetcode puzzles, let's just assume that is 1 hour per puzzle. So 80 hours of leetcode puzzles.
In addition, 10 hours were spent reviewing my networking trivia (focused on layer 2/3/4 and HTTP).
The PE recruiter at the company also provided a study guide packet. I elected to sink about 10-20 hours into studying the Linux troubleshooting and finding some common questions off of Glassdoor to understand the type of things they will be asking.
Finally I tried to review some system design stuff (but as a juniour in this industry didn't really know how) Just followed some study guides from the system-design-primer on Github. Probably 5 hours dedicated to this.
Let's just round it to about 100 hours of prep in about a month and a half. While juggling a full time job as a devops engineer.
Afterwards I was rejected :)
Ultimately I wasn't surprised I was rejected. I was under the impression that I needed to pass all 7 of the interviews in order to get an offer (2 phone screens, 5 on site.) I know for sure I failed the system design interview question HARD. Like irredeemably hard. Regardless of my performances in my other interviews, I know I definitely did a good job in my network and OS interviews but it doesn't matter.
I do wish that companies would provide a feedback system. I would love to know where they thought I was weak so that I can improve upon that later. But there is nothing beyond "we decided to pursue other candidates."
Here's the crazy thing, though. It isn't even a question in my mind that I should try again if another FAANG recruiter reaches out to me. I will sink another 200 hours if necessary to pass their interviews because of what it represents to achieve getting hired at such a firm. There's prestige, salary, and quality of life that just can't be matched by any other tech companies.
> There's prestige, salary, and quality of life that just can't be matched by any other tech companies.
Not sure about prestige and quality of life. Salary, yes!. I happily quit my Microsoft for a slightly lower pay and way better quality of life.
Right now AAMFGN are hiring tons of engineers. So their quality really varies and different teams have different bars. You can't say they worked at Google so they must be good. We are humans and we have our biases. Like it or not, hiring is biased (mostly towards white/asian males from prestigious universities). To counteract, there's also diversity hires (with various degrees of definition what it exactly is).
For some people, money is much higher priority, for others it's not. Just be sure what you really want from life. Remember, it's not a race.
>There's prestige, salary, and quality of life that just can't be matched by any other tech companies.
To asses the quality of life you have to take into account : payment, time spent on the job and for the job, the amount of work, the prices in the area you live and work, the stress level, the interactions in the company and probably more.
I've done these calculations and for myself, job hunting for FAANG isn't worth. I would however not refuse to work for FAANG if that would match my personal goals, however working for FAANG would not be a goal in itself.
I like to calculate dollars per hour worked when comparing roles, and I use a fairly generous overtime multiplier (ie, 35 hours a week base, then time and a half for the next 10 hours, then double time the next 15 then you can take your job and shove it)
All too often the big, hard, prestigious companies turn out to pay the same hourly rate as the second-tier places if not slightly less. But the same quality of life at 45 hours a week costs a lot more than at 35 hours a week. So you have to look at the prestige benefits and hope they pay off.
this is fine, so long as you're looking to get hired by a megacorp (fine,faang.) but for most people theres a point of diminishing returns. Do you want to spend six months to a year out of your life drilling for a $10k raise working for a company that works you like a rented mule anyhow, or do you settle with your present quality of life and conclude 70k is enough to do whatever you wanted to reasonably do anyway.
Then theres the variable of google et. al. and their random eleven-round interviews. Are you patient enough to sit through questions like "how many kegs of beer on a schoolbus" and "how to build a datacenter on the moon" from some grinning techbro only to be told youre re-invited to another round of interviews?
Finally, age. You can cram and cram but if youre over 50 your chances of building that moon datacenter are better than getting hired.
I agree with a few things you said but you're also wrong about a few things.
FAANG compensation is much higher than you think. $200k/year (including stock) in the Bay Area for new grads is common. Yes, the prep for these interviews is insane but what has effectively happened (and this is supported by the article) is that companies have offloaded the selection work to the interviewee: they will only be able to pass if they are willing to do the ridiculous prep work. And yes, the interview questions have nothing to do with the job; that's not the point. Sadly, the process is often selecting for intelligent, compliant worker bees and not, what I would prefer, more creatively-inclined people. I agree with you: depending on what team you end up on, you could be asked to clock-in, crank out code, and clock-out without much creativity or input into anything.
BTW, Google doesn't use brain teasers since 15+ years ago. But, there is the occasional interviewer who asks questions about trivia that only they know about. This is supposed to be banned but there's no consequences for interviewers who do this. Hiring committees (who make the decision) usually throw out these questions when they see them in the list of interview feedback that they are using to make a decision.
Re: age. I worked on a team at FAANG that has tried very hard to hire folks with industry experience and we haven't found any resistance from interviewers to that. However, when talking to potential interviewees, we have found that very few are willing to subject themselves to the interviewing process for the reasons that you've outlined above. I don't blame them.
I decided that I wanted a job at Google, so I did the only reasonable and started grinding Leetcodes, probably at the same level as Recursive Cactus. I even took two days a week off for a couple of months to just do leetcodes. ~10 hours every weekend was Leetcodes. I read the whole CLRS (and made sure that I understood 80% at least). I wrote a thesis. I studied maths. I dug deep into databases and distributed systems.
All this at the same time as I was working a full-time job as a softare engineer at a world-famous tech company and as a head of engineering at a startup.
I've been programming my whole life, and I've got a lot of experience with Java, C++ and Ruby, and now 10 years professionally. I've written operating systems, game engines, networking protocols and many products from the ground up. I get great feedback wherever I go and I learn systems very quickly, and I'm soon the "go to"-guy at a new place. I tend to out-experience the "old guys" that everyone look up to.
But Google? I was invited for a video interview. I think I might've miscommunicated my understanding of database transactions (though I got great feedback on my coding tests), but alas, from that point, the recruiter lost any interest they might've had. For some position, I had to ask multiple times to learn that it was internally filled.
> "how many kegs of beer on a schoolbus" and "how to build a datacenter on the moon"
I interviewed at Google and Facebook in 2015 and never got any questions like that. I don't think they've had those type of brainteasers for over a decade.
> Are you patient enough to sit through questions like "how many kegs of beer on a schoolbus" and "how to build a datacenter on the moon" from some grinning techbro only to be told youre re-invited to another round of interviews?
I systematically end all interviews when they've reached this point. As soon as the smart-ass finishes their stupid question I just say "I think we're done here". I can stomach take homes, even whiteboarding, but don't ask me how many tennis balls would fit in the Empire State Building.
I can usually spot the candidates who are leetcode junkies. This is why I direct our interviews to be as pragmatic as possible. Most of our question bank comes from actual code one of our devs had to implement.
I'm fairly confident that if you've studied hard enough to solve these problems easier the studying just paid off by making you a better developer.
I feel like giving people a decent coding project is, at the moment anyway, the best approach. If I'm interviewing someone I really just want to see these things: what their code is like, what their final result looks like (if there's room for creativity -and there should be), how they got there (revision history). And then in the interview portion I just want to get a sense of their personality and their decision making process on the project. It's not perfect but it gives a sense of if they can finish a likely task, and if they would be easy or hard to work with.
Btw, none of that involves puzzles or trying to guess their IQ. If your company is like google in 1998 maybe you care about that, but chances are you need someone to build something relatively straightforward, not invent PageRank. Honestly having a super genius on board might be bad if you're not solving a truly hard problem - they might get bored and check out.
It's a valid complaint that these projects can take time, but job searching is pretty time consuming anyway, and joining the wrong company or hiring the wrong person is way more so.
So I got contacted by Facebook London about 2 weeks ago. The job description sounded quite interesting, but when the recruiter described the interview process and actually sent me a deck with resources for preparation for coding interview he lost me.
The reason is that I am absolutely satisfied with my current job and decided that I don't want to bother at this time with preparation for an interview. Maybe I would pass it without prep, but I would not feel comfortable showing up without putting any time in.
I get a feeling that process as this somehow does not select for top performers that are already working on exciting stuff.
Over the past 27 years, I've worked for 8 different organizations, including two FAANGs, and I've never technically prepared for any interview. This is not some kind of indirect boasting about how smart I am. Far from it. I feel positively dumb compared to my peers.
I rarely fully nail the most difficult algorithmic interviews, and I don't think that's the point. I think I get most of my 'points' by taking a very direct, easy going and open approach to things. The phrases "I don't know" and "I'm not sure" will get practically worn out at the end of my interviews.
I don't think it's what one knows as much as it is about how one approaches and thinks about problems.
Second item: do the interviews anyway, even if you don't necessarily intend on leaving.
I'll tell recruiters that I'm pretty happy where I'm at, and that it would take some kind of enormous comp package to entice me to move. But we'll still do the whole process, and I'll often end up turning down a pretty solid offer.
For many/most companies, turning down an offer 'locks' you out for a year or so; no big deal.
I really enjoy interviewing at the top tier companies, because, in the end, I always learn a great deal.
Like most things, interviewing is something you can get good at with practice. What's nice is that you have the opportunity to get several hours of face to face time with really smart people at no out of pocket cost, except for a day of PTO from your current job if you live local.
>I get a feeling that process as this somehow does not select for top performers that are already working on exciting stuff.
There are senior engineers who essentially work as tech leads making $500K+ at these companies. It's a tradeoff to prepare but if you can essentially double/triple your salary to do comparable work while also getting whatever benefit from brand awareness in your social circles....
All whiteboard problems should be fairly novel and 'not possible to practice' or else you are testing their preparation, not their ability.
(Admittedly, preparation is a measure of something, and 'conquering all algorithms' is a measure of something.)
But neither are the measure you're looking for.
And 'General IQ' is not only it either.
The ability to decipher problems, understand requirements, grasp tradeoffs, translate that into reasonably clean code, keep possibly complex systems in your head, work with others and maintain a positive disposition.
Finally, the elephant in the room is 'perceived confidence'. It took me 30 years at least to be able to understand how well a problem was communicated, and how good the solution actually is.
Someone who is confident, who 'looks the part', who can communicate the issue clearly ... may still have a mediocre problem.
The weird, lacking in self-awareness, a shy-but-blunt nerd who may be totally unsure of themselves, sweaty palms ... may possibly have just as great as a solution.
We are hard-wired to see 'patterns' and our intuition misguides is significantly on this issue.
It's a lot of hard work to try to ignore 'the bad parts' of one's own intuition while keeping the 'good parts'.
One of the solutions to this literally is data. Instead of 'feeling' how they did, a checklist of things might help us structure in our minds how truly well something was accomplished.
And of course, we can't ignore the fact that communicating matters, it just matters differently in different contexts.
The spread is insane. I have interviewed at one FAANG three times within the same year (this one does not have cooldowns). On-site DS&A question difficulty capped at two-sum with no twist for the most recent one (extremely easy if you have seen it before, still doable for most people if they haven't), binary tree LCA (impossible within 30 minutes if you haven't studied binary trees, moderate if you have but have never attempted/seen LCA, easy if you have) for the first one, and a keypad DP problem (hard for anyone who hasn't practiced DP imo) for the middle one.
There are people who are extremely good at DS&A interviews and can reliably pass almost any loop at any FAANG company that sticks to conventions. But I think most people don't fall into that group, and it generally comes down to luck and not getting a single question that stumps you.
My hiring bar (for coding) has gotten easier the more I interview (as the interviewer). I don't ask any kind of super tricky algo questions, because the signal you get from those tends to be closer to "is the candidate familiar with this specific area of algorithms" than anything else. I don't ask any questions that take a really good candidate more than 20-30 minutes to solve, because then I can't scale the question down. You can always scale a question up.
I used to ask questions that were fairly close to what you find on leetcode now, but the signal isn't great anymore. It used to be good at identifying candidates who can quickly figure out the right tools to solve a given problem, but now it ends up identifying candidates who spent a lot of time on leetcode.
Now I mostly ask questions that involve
* transforming some data using a less than stellar API (using a REALLY simple transformation)
* holding a bit of state to accomplish the above transformation
* throwing a few edge case wrenches at the candidate
And the last part is technically baked into the question - a candidate who can fully grok the state could determine all of the edge cases on their own. But even if they don't I'll explain them and see how the candidate handles. 'cus in the real world we have unit tests, and I don't expect TC to really figure out all the edge cases in 30 minutes. A couple of them, sure. And they better be able to handle them once pointed out.
Candidate forgets that a java collection can have null because you can't have a List of primitives? That literally doesn't go into my feedback at all (and depending on how recently I've written java, I might have forgotten myself). Candidate writes a function that doesn't compile because there's no return statement? I'll point it out, maybe make a note, but don't really hold it against them because we write code in IDEs. Candidate spends 10 minutes trying to figure out how to force a single variable to do the job of three different variables, despite increasingly desperate hints to just store more local data? Yea that might go poorly in feedback.
But yes, I expect a candidate to be able to write 10 lines of code to answer a data transformation in 30-45 minutes. And yes, when either they figure out or I point out a couple of edge cases, I expect that 10 lines to not morph into a congealed mass of horror that cause their original solution to break.
I don't get it why people try very hard to get a job at FAANGs. Could it be because they would feel like they would become part of an elite, could it be because that once they have a FAANG company in their resume, they won't have to pass lengthy and stressful interviewing processes anymore and won't have to job hunt.
But there are many other software engineering jobs with at least as interesting problems to solve, at least as good payment, at least as good job security while being less stressful.
For me, hunting specifically a job at FAANG doesn't pay off.
I'd accept any job that meets my criteria of what I have to do, payment and stress level.
I see this said sometimes, and frankly I doubt it. A mediocre performer at Google or Facebook with 3 years of experience is pulling in 250K+. At Amazon and Microsoft, that's a bit lower but still over 200K. And there's upside for a higher performer.
The only places that match that kind of progression are bay area startups/public unicorns and quant finance and hedge funds. And for a competent person, that growth doesn't stop for another few years.
I don't have a study to back it up, just my empirical observations over the past 12 years, but I'm kind of convinced that hiring engineers almost randomly (let's say they can speak clearly and write a fizzbuzz) would have almost the same outcome as designing and implementing these complicated and convoluted hiring processes.
I have yet to work with the mythical "really really bad engineer that completely screw up your project and does it in such a stealthy way that you don't even fire them before it's too late".
I've definitely worked with engineers that are 10x slower or have extremely poor engineering practices: copy-pasting chunks of code, 8+ nested ifs, all code in one giant function, use of global variables throughout, clueless how memory management works/tons of cyclic retains, etc.
I've seen plenty of purported "senior" engineers with 7+ yoe that code worse than new grads.
Now that I'm in FAANG with a high hiring bar, these type of engineers are completely absent. I'm sure that's not a coincidence.
that seems ... impossible. almost every single project I have worked on always ended up not really what we had hoped for.
maybe you've generally worked at larger places and I've generally worked at smaller?
3 reasons I can think of why projects fall short -
hubris: you were never really going to be able to do that in the time and resource limits anyways
bad actor: maybe we should really fire Joey, but hiring is hard, and stuff is kinda getting done..if we can just keep it together another quarter
general structural dysfunction: we have a bad culture. no one can really depend on any one else, and its kind of not clear what we're doing anyways.
(1) is a given, but usually isn't the whole story. (3) almost mandates the appearance of (2). but (2) kind of depends on having at least some kind of twisted competence, otherwise they wouldn't be able to do that much damage. so are you in a (3) dominant situation...or do you live in the place beyond the mists where we get what we need to done and have a great time doing it?
Recently I had two different online testes where a good chunk of the questions were about Javascript generators - a feature that is very hard to see in the wild.
Thankfully I'm already employed, but this was not the case I would lose a good amount of time studying this subject in depth (only to not use it later)
After 9 years at the same company, I left my job at the beginning of January 2020 to dedicate myself to leetcoding and interview practicing in the hope of getting hired at a FAANG, more specifically Google.
I really started dedicating all my time to interviewing January 1st.
It is now March 31st and I am now abandoning the idea of getting hired at a FAANG, or any larger-sized startup and will target early startups with lower entry bar.
Yesterday I had my “virtual on-site” interview with Google and it went poorly.
The 1st interview was behavioral and I think it went fine, but I’m not sure the interviewer was thrilled.
The 2nd interview was horrible. First, the interviewer had a bad internet connection which made it hard to understand her (I asked her to turn off her video to help, which she did), 2nd she jumped immediately to the problem without introducing herself or anything which made it feel like she was in a rush, 3rd she simply started reciting her problem statement, which was hard to make sense of because of her bad internet connection. I asked her if we could write it down in the shared google doc, so she proceeded to copy/paste a blob of text that seemed to be taken from the _middle of a problem statement_. It had no context and no actual instruction like “write a function that will calculate x and y”. My NDA unfortunately prevents me from sharing the actual thing. Because of this, I did not know what I was supposed to do. I asked her multiple times “so, should I write a function to do this and this?” and she kept reciting the ambiguous problem statement over and over in an impatient and dismissive manner. I felt completely out of place. Then when I finally started making a little bit of progress on guessing what she actually wanted me to do, I started hearing background noise of someone chopping vegetables, and moving things around: extremely distracting. I would ask her specific questions and from her lag in answering and her short 2 words answers I just know she wasn’t paying attention. It took all the strength in me to not tell her how disrespectful it felt to be interviewing with someone that clearly did not want to be here and wasn’t paying attention. At the end of the interview I thanked her a lot, smiled big and swallowed my pride.
I left for our 1 hour break and took a walk to reset my emotions and tell myself that the interview could still go well and that I still had my chances.
The 3rd interview went well. The interviewer had a good connection, a good mic, was understandable, introduced himself and even said “before we start, I want to remind you that if one of your interviews went bad, don’t sweat it, it’s all fine. We’re here to have a conversation. I’m not looking for a right or wrong answer, I just want to see your thought process”. It took him literally 2 minutes to set me up for success. He then proceeded to give me a problem statement, with some context around it, and we started proceeding to _have a real conversation_. I wrote code that, according to my interviewer, compiled correctly and was close to the actual code it was based off of. I left this interview feeling good
4th interview went bad. Interviewer was 10 minutes late and had a bad connection, but aside from that introduced himself correctly, gave me a clear problem statement and although did not talked much at all during the interview, he did give me a few hints here and there. The reason I failed is that I couldn’t solve a simple algorithm and started panicking internally. All on me. I left the interview hoping the next one would go better.
5th (and last) interview went meh. It was a system design interview. I was hoping to be having a conversation with the interviewer but he just was speaking much at all.
I hung up and cried a little. It’s really hard emotionally to accept this.
Before my Google interviewed I got rejected by AirBnB, Twitter told me they don’t think a senior role is adequate and will see if they have “mid-level” roles (which is totally fine, but I’m left wondering if that’s not just a way of rejecting my candidacy), and I cancelled Facebook because what Airbnb taught me is that I’m just not ready. That’s not a lot of interviews you’ll tell me, but I spent _months_ preparing.
Because I know my algorithm and problem solving skills are lesser, I spent hours studying on leetcode, reading an operating systems book, reviewed “cracking the coding interview”, reviewed “introduction to algorithms”, re-read some chapters of “TCP/IP illustrated”, spent hours watching system design videos, hours watching algorithm videos. I spent $5000 on an interviewing/algorithm bootcamp.
I know that I am not a bad engineer. I started programming at 10 years old (I’m 33), taught myself VB, C and C++ (though I haven’t coded in these for many years now). Computers have been my life’s passion. I designed my former’s company infrastructure and made it scalable and resilient. I was a major influencer in my team and my coworkers trusted me. I know I’m a good system administrator; I might be less good a developer but I know how to code well; I know how to influence my coworker into following best practices, reading/writing documentation, being security conscious; I stay informed on the latest trends, I try new technologies, learn new languages, not even out of necessity but because that’s what I love.
But none of this seems to be enough.
And maybe it really isn’t for a company like Google. And maybe I wouldn’t be successful at Google if they hired me.
What I know is that these past 3 months have left me with little confidence about my skills and just wondering if I’m cut out for this. I’m trying hard to not feel defeated, but damn, that hiring bar in FAANG interviews can really make you feel like crap.
Actual professional engineers don't have strange, gamified interviews to guess someone's skill level.
Is all of this modelling the problem of the hiring bar or training to beat it really solving the right problem?
Do any of the solutions to this constructed problem actually work reliably or are they just elevator close buttons, frobs that may not really function but provide a sense of control?
The best kind of practice is the kind you get paid for. Freelance work (if your current contract permits it) always has opportunities to stretch your legs. Also, I think most companies would prefer breadth of skills over someone who knows the answer to a gee whiz algorithm. Put a different way, companies prefer someone who is valuable over someone who is "smart".
[+] [-] gregdoesit|6 years ago|reply
> And that helps us understand why Recursive Cactus spends so much time practicing. He’s training himself partially because his current company isn’t developing his skills.
Exactly. Recursive Calculus wants a better job, (a lot) higher pay, a better environment. So he spends time prepping for this.
And companies who can offer all of this, and get a lot of interest already, they are selective, minimising false positives in the hiring process. They expect working code in the coding challenge, a good attitude and some other skills like demonstrating decent systems design. Recursive Calculus also preps so much as his interview process to his current place was different and he _really_ wants to nail these interviews, get a bunch of offers and get into a bidding war before saying bye to his current workplace he’d love to leave for something better.
There wasn’t really any actionable thing in this article that I found, or applicable advice. The end.
[+] [-] TheOtherHobbes|6 years ago|reply
That's the whole point of the article. Two possible conclusions:
One is that companies are cargo-culting hiring, and have absolutely no idea what they're doing. Clearly whatever the process is supposed to do, it's not hiring the "best people" by any realistic metric.
The other is that the process is working as intended, but the actual goals are not stated. This might be true if the aim is to hiring difficult and stressful for candidates to discourage job hopping. (Other interpretations are also possible. [1])
If a company wants the "best people" it needs to follow up hiring with performance tracking, and identify and reward the people and hiring practices which increase performance. [2]
If companies want hiring to continue as a social/political game which stresses and discourages developers, the system is working for them, and they don't need to change it.
Startups need to decide what kind of company they want to be. [3]
[1] IMO there may be a strong element of corporate narcissism in the process. It's not about hiring good people, it's about allowing the CEO and senior management to feel that their company is better than those other companies which hire these people. In reality "these people" may be a bit more than averagely competent, but with a few standouts most won't be insanely great or A players or 10X or whatever the goal is supposed to be.
[2] Which assumes it's possible to measure performance, which is a whole other issue.
[3] I'd bet almost anything that in reality there's a lot of "Oh, you were working with X at Y? Awesome!" affecting hiring choices in SV.
[+] [-] commandlinefan|6 years ago|reply
[+] [-] twomoretime|6 years ago|reply
I develop software full time and have some 10 years of experience depending on how you count it, and I'm absolutely terrible at leetcode style problems and find whiteboard questions difficult for non programming reasons.
I know it wasn't the point of the article, but there's a deeper problem here that most FAANG programming questions aren't actually testing work related code skills.
At my company we give two very basic tests, takehome. Both can be completed in 15 minutes if you're rushing. Far more useful of a tool than any of leetcode style questions.
[+] [-] lapnitnelav|6 years ago|reply
[+] [-] pc86|6 years ago|reply
This could honestly be a single-line summary for every blog post I've read on interviewing.io.
[+] [-] stuxnet79|6 years ago|reply
The article did raise more questions than answers, but that was by design. A lot of the assumptions that go into most tech interview processes don't withstand scrutiny. Interviewing is a hard problem to solve, but we shouldn't be satisfied with the status quo.
[+] [-] karatestomp|6 years ago|reply
[+] [-] Ididntdothis|6 years ago|reply
[+] [-] efficax|6 years ago|reply
[+] [-] christiansakai|6 years ago|reply
[+] [-] manfredo|6 years ago|reply
I'm of the mind that most interview questions can only reliably identify people who are not capable of coding, and roughly gauge the algorithms knowledge. I had floated the idea of making interview experiences that more closely resemble work, like having the candidates make PRs in a mock repository. Better yet we could see not just how they make a PR but also review PRs and make comments. But often the primary concern is logistical. It's easy to train people up on 1-hour problems with a grading rubric, than a longer more open ended interview.
[+] [-] davedx|6 years ago|reply
[+] [-] carapace|6 years ago|reply
[+] [-] agitator|6 years ago|reply
[+] [-] juped|6 years ago|reply
[+] [-] sxp|6 years ago|reply
[1] https://news.ycombinator.com/item?id=22705057
[+] [-] chrisweekly|6 years ago|reply
[+] [-] afpx|6 years ago|reply
[1]: And, tons of professional work experience
[+] [-] thaniri|6 years ago|reply
I probably did about 80 leetcode puzzles, let's just assume that is 1 hour per puzzle. So 80 hours of leetcode puzzles.
In addition, 10 hours were spent reviewing my networking trivia (focused on layer 2/3/4 and HTTP).
The PE recruiter at the company also provided a study guide packet. I elected to sink about 10-20 hours into studying the Linux troubleshooting and finding some common questions off of Glassdoor to understand the type of things they will be asking.
Finally I tried to review some system design stuff (but as a juniour in this industry didn't really know how) Just followed some study guides from the system-design-primer on Github. Probably 5 hours dedicated to this.
Let's just round it to about 100 hours of prep in about a month and a half. While juggling a full time job as a devops engineer.
Afterwards I was rejected :)
Ultimately I wasn't surprised I was rejected. I was under the impression that I needed to pass all 7 of the interviews in order to get an offer (2 phone screens, 5 on site.) I know for sure I failed the system design interview question HARD. Like irredeemably hard. Regardless of my performances in my other interviews, I know I definitely did a good job in my network and OS interviews but it doesn't matter.
I do wish that companies would provide a feedback system. I would love to know where they thought I was weak so that I can improve upon that later. But there is nothing beyond "we decided to pursue other candidates."
Here's the crazy thing, though. It isn't even a question in my mind that I should try again if another FAANG recruiter reaches out to me. I will sink another 200 hours if necessary to pass their interviews because of what it represents to achieve getting hired at such a firm. There's prestige, salary, and quality of life that just can't be matched by any other tech companies.
[+] [-] nojvek|6 years ago|reply
Not sure about prestige and quality of life. Salary, yes!. I happily quit my Microsoft for a slightly lower pay and way better quality of life.
Right now AAMFGN are hiring tons of engineers. So their quality really varies and different teams have different bars. You can't say they worked at Google so they must be good. We are humans and we have our biases. Like it or not, hiring is biased (mostly towards white/asian males from prestigious universities). To counteract, there's also diversity hires (with various degrees of definition what it exactly is).
For some people, money is much higher priority, for others it's not. Just be sure what you really want from life. Remember, it's not a race.
[+] [-] DeathArrow|6 years ago|reply
To asses the quality of life you have to take into account : payment, time spent on the job and for the job, the amount of work, the prices in the area you live and work, the stress level, the interactions in the company and probably more.
I've done these calculations and for myself, job hunting for FAANG isn't worth. I would however not refuse to work for FAANG if that would match my personal goals, however working for FAANG would not be a goal in itself.
[+] [-] Psychlist|6 years ago|reply
I like to calculate dollars per hour worked when comparing roles, and I use a fairly generous overtime multiplier (ie, 35 hours a week base, then time and a half for the next 10 hours, then double time the next 15 then you can take your job and shove it)
All too often the big, hard, prestigious companies turn out to pay the same hourly rate as the second-tier places if not slightly less. But the same quality of life at 45 hours a week costs a lot more than at 35 hours a week. So you have to look at the prestige benefits and hope they pay off.
[+] [-] nimbius|6 years ago|reply
Then theres the variable of google et. al. and their random eleven-round interviews. Are you patient enough to sit through questions like "how many kegs of beer on a schoolbus" and "how to build a datacenter on the moon" from some grinning techbro only to be told youre re-invited to another round of interviews?
Finally, age. You can cram and cram but if youre over 50 your chances of building that moon datacenter are better than getting hired.
[+] [-] jasondclinton|6 years ago|reply
FAANG compensation is much higher than you think. $200k/year (including stock) in the Bay Area for new grads is common. Yes, the prep for these interviews is insane but what has effectively happened (and this is supported by the article) is that companies have offloaded the selection work to the interviewee: they will only be able to pass if they are willing to do the ridiculous prep work. And yes, the interview questions have nothing to do with the job; that's not the point. Sadly, the process is often selecting for intelligent, compliant worker bees and not, what I would prefer, more creatively-inclined people. I agree with you: depending on what team you end up on, you could be asked to clock-in, crank out code, and clock-out without much creativity or input into anything.
BTW, Google doesn't use brain teasers since 15+ years ago. But, there is the occasional interviewer who asks questions about trivia that only they know about. This is supposed to be banned but there's no consequences for interviewers who do this. Hiring committees (who make the decision) usually throw out these questions when they see them in the list of interview feedback that they are using to make a decision.
Re: age. I worked on a team at FAANG that has tried very hard to hire folks with industry experience and we haven't found any resistance from interviewers to that. However, when talking to potential interviewees, we have found that very few are willing to subject themselves to the interviewing process for the reasons that you've outlined above. I don't blame them.
[+] [-] throwaway49494|6 years ago|reply
All this at the same time as I was working a full-time job as a softare engineer at a world-famous tech company and as a head of engineering at a startup. I've been programming my whole life, and I've got a lot of experience with Java, C++ and Ruby, and now 10 years professionally. I've written operating systems, game engines, networking protocols and many products from the ground up. I get great feedback wherever I go and I learn systems very quickly, and I'm soon the "go to"-guy at a new place. I tend to out-experience the "old guys" that everyone look up to.
But Google? I was invited for a video interview. I think I might've miscommunicated my understanding of database transactions (though I got great feedback on my coding tests), but alas, from that point, the recruiter lost any interest they might've had. For some position, I had to ask multiple times to learn that it was internally filled.
This is a pretty high bar IMO.
[+] [-] kevinventullo|6 years ago|reply
I interviewed at Google and Facebook in 2015 and never got any questions like that. I don't think they've had those type of brainteasers for over a decade.
[+] [-] dudul|6 years ago|reply
I systematically end all interviews when they've reached this point. As soon as the smart-ass finishes their stupid question I just say "I think we're done here". I can stomach take homes, even whiteboarding, but don't ask me how many tennis balls would fit in the Empire State Building.
[+] [-] ng12|6 years ago|reply
I'm fairly confident that if you've studied hard enough to solve these problems easier the studying just paid off by making you a better developer.
[+] [-] overgard|6 years ago|reply
Btw, none of that involves puzzles or trying to guess their IQ. If your company is like google in 1998 maybe you care about that, but chances are you need someone to build something relatively straightforward, not invent PageRank. Honestly having a super genius on board might be bad if you're not solving a truly hard problem - they might get bored and check out.
It's a valid complaint that these projects can take time, but job searching is pretty time consuming anyway, and joining the wrong company or hiring the wrong person is way more so.
[+] [-] Scea91|6 years ago|reply
The reason is that I am absolutely satisfied with my current job and decided that I don't want to bother at this time with preparation for an interview. Maybe I would pass it without prep, but I would not feel comfortable showing up without putting any time in.
I get a feeling that process as this somehow does not select for top performers that are already working on exciting stuff.
[+] [-] Diederich|6 years ago|reply
I rarely fully nail the most difficult algorithmic interviews, and I don't think that's the point. I think I get most of my 'points' by taking a very direct, easy going and open approach to things. The phrases "I don't know" and "I'm not sure" will get practically worn out at the end of my interviews.
I don't think it's what one knows as much as it is about how one approaches and thinks about problems.
Second item: do the interviews anyway, even if you don't necessarily intend on leaving.
I'll tell recruiters that I'm pretty happy where I'm at, and that it would take some kind of enormous comp package to entice me to move. But we'll still do the whole process, and I'll often end up turning down a pretty solid offer.
For many/most companies, turning down an offer 'locks' you out for a year or so; no big deal.
I really enjoy interviewing at the top tier companies, because, in the end, I always learn a great deal.
Like most things, interviewing is something you can get good at with practice. What's nice is that you have the opportunity to get several hours of face to face time with really smart people at no out of pocket cost, except for a day of PTO from your current job if you live local.
[+] [-] southphillyman|6 years ago|reply
There are senior engineers who essentially work as tech leads making $500K+ at these companies. It's a tradeoff to prepare but if you can essentially double/triple your salary to do comparable work while also getting whatever benefit from brand awareness in your social circles....
[+] [-] wayoutthere|6 years ago|reply
Nope; but it does sound like it selects for people who are obedient and willing to do a whole lot of extra work. Which might be the point?
[+] [-] jariel|6 years ago|reply
All whiteboard problems should be fairly novel and 'not possible to practice' or else you are testing their preparation, not their ability.
(Admittedly, preparation is a measure of something, and 'conquering all algorithms' is a measure of something.)
But neither are the measure you're looking for.
And 'General IQ' is not only it either.
The ability to decipher problems, understand requirements, grasp tradeoffs, translate that into reasonably clean code, keep possibly complex systems in your head, work with others and maintain a positive disposition.
Finally, the elephant in the room is 'perceived confidence'. It took me 30 years at least to be able to understand how well a problem was communicated, and how good the solution actually is.
Someone who is confident, who 'looks the part', who can communicate the issue clearly ... may still have a mediocre problem.
The weird, lacking in self-awareness, a shy-but-blunt nerd who may be totally unsure of themselves, sweaty palms ... may possibly have just as great as a solution.
We are hard-wired to see 'patterns' and our intuition misguides is significantly on this issue.
It's a lot of hard work to try to ignore 'the bad parts' of one's own intuition while keeping the 'good parts'.
One of the solutions to this literally is data. Instead of 'feeling' how they did, a checklist of things might help us structure in our minds how truly well something was accomplished.
And of course, we can't ignore the fact that communicating matters, it just matters differently in different contexts.
[+] [-] xenihn|6 years ago|reply
There are people who are extremely good at DS&A interviews and can reliably pass almost any loop at any FAANG company that sticks to conventions. But I think most people don't fall into that group, and it generally comes down to luck and not getting a single question that stumps you.
[+] [-] whiskyant|6 years ago|reply
[+] [-] dmoy|6 years ago|reply
I used to ask questions that were fairly close to what you find on leetcode now, but the signal isn't great anymore. It used to be good at identifying candidates who can quickly figure out the right tools to solve a given problem, but now it ends up identifying candidates who spent a lot of time on leetcode.
Now I mostly ask questions that involve
* transforming some data using a less than stellar API (using a REALLY simple transformation)
* holding a bit of state to accomplish the above transformation
* throwing a few edge case wrenches at the candidate
And the last part is technically baked into the question - a candidate who can fully grok the state could determine all of the edge cases on their own. But even if they don't I'll explain them and see how the candidate handles. 'cus in the real world we have unit tests, and I don't expect TC to really figure out all the edge cases in 30 minutes. A couple of them, sure. And they better be able to handle them once pointed out.
Candidate forgets that a java collection can have null because you can't have a List of primitives? That literally doesn't go into my feedback at all (and depending on how recently I've written java, I might have forgotten myself). Candidate writes a function that doesn't compile because there's no return statement? I'll point it out, maybe make a note, but don't really hold it against them because we write code in IDEs. Candidate spends 10 minutes trying to figure out how to force a single variable to do the job of three different variables, despite increasingly desperate hints to just store more local data? Yea that might go poorly in feedback.
But yes, I expect a candidate to be able to write 10 lines of code to answer a data transformation in 30-45 minutes. And yes, when either they figure out or I point out a couple of edge cases, I expect that 10 lines to not morph into a congealed mass of horror that cause their original solution to break.
[+] [-] DeathArrow|6 years ago|reply
But there are many other software engineering jobs with at least as interesting problems to solve, at least as good payment, at least as good job security while being less stressful.
For me, hunting specifically a job at FAANG doesn't pay off.
I'd accept any job that meets my criteria of what I have to do, payment and stress level.
[+] [-] joshuamorton|6 years ago|reply
The only places that match that kind of progression are bay area startups/public unicorns and quant finance and hedge funds. And for a competent person, that growth doesn't stop for another few years.
[+] [-] dudul|6 years ago|reply
I have yet to work with the mythical "really really bad engineer that completely screw up your project and does it in such a stealthy way that you don't even fire them before it's too late".
[+] [-] whiskyant|6 years ago|reply
I've seen plenty of purported "senior" engineers with 7+ yoe that code worse than new grads.
Now that I'm in FAANG with a high hiring bar, these type of engineers are completely absent. I'm sure that's not a coincidence.
[+] [-] mooneater|6 years ago|reply
The skill level needed to not screw up large complex problems is exponentially higher than for simple small problems.
Companies and products vastly differ in this regard.
[+] [-] convolvatron|6 years ago|reply
maybe you've generally worked at larger places and I've generally worked at smaller?
3 reasons I can think of why projects fall short -
hubris: you were never really going to be able to do that in the time and resource limits anyways
bad actor: maybe we should really fire Joey, but hiring is hard, and stuff is kinda getting done..if we can just keep it together another quarter
general structural dysfunction: we have a bad culture. no one can really depend on any one else, and its kind of not clear what we're doing anyways.
(1) is a given, but usually isn't the whole story. (3) almost mandates the appearance of (2). but (2) kind of depends on having at least some kind of twisted competence, otherwise they wouldn't be able to do that much damage. so are you in a (3) dominant situation...or do you live in the place beyond the mists where we get what we need to done and have a great time doing it?
[+] [-] deeblering4|6 years ago|reply
Sorry, you lost me immediately. As a married person this is not a realistic typical schedule if you wish to stay married.
[+] [-] frozenlettuce|6 years ago|reply
[+] [-] juped|6 years ago|reply
[+] [-] faanginginthere|6 years ago|reply
I really started dedicating all my time to interviewing January 1st.
It is now March 31st and I am now abandoning the idea of getting hired at a FAANG, or any larger-sized startup and will target early startups with lower entry bar.
Yesterday I had my “virtual on-site” interview with Google and it went poorly.
The 1st interview was behavioral and I think it went fine, but I’m not sure the interviewer was thrilled.
The 2nd interview was horrible. First, the interviewer had a bad internet connection which made it hard to understand her (I asked her to turn off her video to help, which she did), 2nd she jumped immediately to the problem without introducing herself or anything which made it feel like she was in a rush, 3rd she simply started reciting her problem statement, which was hard to make sense of because of her bad internet connection. I asked her if we could write it down in the shared google doc, so she proceeded to copy/paste a blob of text that seemed to be taken from the _middle of a problem statement_. It had no context and no actual instruction like “write a function that will calculate x and y”. My NDA unfortunately prevents me from sharing the actual thing. Because of this, I did not know what I was supposed to do. I asked her multiple times “so, should I write a function to do this and this?” and she kept reciting the ambiguous problem statement over and over in an impatient and dismissive manner. I felt completely out of place. Then when I finally started making a little bit of progress on guessing what she actually wanted me to do, I started hearing background noise of someone chopping vegetables, and moving things around: extremely distracting. I would ask her specific questions and from her lag in answering and her short 2 words answers I just know she wasn’t paying attention. It took all the strength in me to not tell her how disrespectful it felt to be interviewing with someone that clearly did not want to be here and wasn’t paying attention. At the end of the interview I thanked her a lot, smiled big and swallowed my pride.
I left for our 1 hour break and took a walk to reset my emotions and tell myself that the interview could still go well and that I still had my chances.
The 3rd interview went well. The interviewer had a good connection, a good mic, was understandable, introduced himself and even said “before we start, I want to remind you that if one of your interviews went bad, don’t sweat it, it’s all fine. We’re here to have a conversation. I’m not looking for a right or wrong answer, I just want to see your thought process”. It took him literally 2 minutes to set me up for success. He then proceeded to give me a problem statement, with some context around it, and we started proceeding to _have a real conversation_. I wrote code that, according to my interviewer, compiled correctly and was close to the actual code it was based off of. I left this interview feeling good
4th interview went bad. Interviewer was 10 minutes late and had a bad connection, but aside from that introduced himself correctly, gave me a clear problem statement and although did not talked much at all during the interview, he did give me a few hints here and there. The reason I failed is that I couldn’t solve a simple algorithm and started panicking internally. All on me. I left the interview hoping the next one would go better.
5th (and last) interview went meh. It was a system design interview. I was hoping to be having a conversation with the interviewer but he just was speaking much at all.
I hung up and cried a little. It’s really hard emotionally to accept this.
Before my Google interviewed I got rejected by AirBnB, Twitter told me they don’t think a senior role is adequate and will see if they have “mid-level” roles (which is totally fine, but I’m left wondering if that’s not just a way of rejecting my candidacy), and I cancelled Facebook because what Airbnb taught me is that I’m just not ready. That’s not a lot of interviews you’ll tell me, but I spent _months_ preparing.
Because I know my algorithm and problem solving skills are lesser, I spent hours studying on leetcode, reading an operating systems book, reviewed “cracking the coding interview”, reviewed “introduction to algorithms”, re-read some chapters of “TCP/IP illustrated”, spent hours watching system design videos, hours watching algorithm videos. I spent $5000 on an interviewing/algorithm bootcamp.
I know that I am not a bad engineer. I started programming at 10 years old (I’m 33), taught myself VB, C and C++ (though I haven’t coded in these for many years now). Computers have been my life’s passion. I designed my former’s company infrastructure and made it scalable and resilient. I was a major influencer in my team and my coworkers trusted me. I know I’m a good system administrator; I might be less good a developer but I know how to code well; I know how to influence my coworker into following best practices, reading/writing documentation, being security conscious; I stay informed on the latest trends, I try new technologies, learn new languages, not even out of necessity but because that’s what I love.
But none of this seems to be enough.
And maybe it really isn’t for a company like Google. And maybe I wouldn’t be successful at Google if they hired me.
What I know is that these past 3 months have left me with little confidence about my skills and just wondering if I’m cut out for this. I’m trying hard to not feel defeated, but damn, that hiring bar in FAANG interviews can really make you feel like crap.
[+] [-] drewcoo|6 years ago|reply
Is all of this modelling the problem of the hiring bar or training to beat it really solving the right problem? Do any of the solutions to this constructed problem actually work reliably or are they just elevator close buttons, frobs that may not really function but provide a sense of control?
[+] [-] bdcravens|6 years ago|reply