How to pass the interview for software engineering roles in Big Tech
lambrospetrou.com
lambrospetrou.com
What I'd like to know and see written down is how you truly prepare for system design when you DON'T HAVE or CAN'T GET experience with large scale systems at your DAYJOB. The chasm here is that when competition is other 20 engineers who just memorize things, even if their actual relevant skills are objectively worse than yours in practice, you'll never, ever get the job. It's a very tough game and I admit there is real skill in knowing how to game the system :) it is what it is.
PS: I know exceptions are everywhere but I'm sure that the quality of the ones who get in vs rejected will be basically the same. It's just a process optimized to minimize false positives, so, only the median will get in, really good ones will be rejected and only maybe a very small fraction of the ones who make it through will be "The real deal".
Read architecture books and learn system design from existing success stories and read through their thought process.
Contribute to a large system open source.
There isn't really anything you can otherwise do.
Try to make large systems on your own projects.
I describe all the resources I read outside my day job's material. There are a lot of useful engineering blogs you can use, and with 1-2 books you can go very very far in learning the principles.
Once you have the theory, then you just need to practice on brainstorming designs for any kind of app you want. Then, you can verify that with the real implementation, you can pretty much find information about any big-scale famous system online. Or you can do mock interviews with others, but I am not a fan of these personally.
In my experience, reading, and then trying to come up with designs on your own for well-known products will make you ace these interviews after a few months.
Also, during the interview there is no nearly enough time to verify that you have done in the past all the things you will mention. So, if you understand what you are saying, and your design makes sense, you will pass the interview, even if you haven't practiced these things in your day job.
The nitty gritty of implementing a distributed system is orders of magnitude harder than the high level view of a sys design interview.
What it means is you can just prep for system design like algo. The expectations are not that high. Learn the patterns and common technologies and how they are applied. It almost always comes down to databases and message queues, and the different versions of those. DDIA is the reference book for these interviews.
All the Big Tech companies I know regularly hire interns and new grads.
This has not been my experience. I think the quality of the average engineer I've worked with at FAANG has been higher than elsewhere. For all it's problems, the system seems to at least kind of work.
I do think though that if you are OK being a manager for at least a year, it's a very viable path!
In companies that have the first level of management at the same seniority level as the Senior Engineer, it's very doable.
Its a different "culture fit" metric than IC. I prefer IC, I've just also done what you're suggesting.
I've ran companies before too, been technical founder a couple times, have done plenty of side projects with remote agencies as well, which turned into companies. I've been "lead" in IC, or been promoted to Engineering Manager. When I'm on the job market and trying engineer manager, I've had comprehensive answers for everything, people don't see me as the manager. I've tried a more social approach as well and a variety of iterations. Nope. They don't see me.
Can you elaborate on what you mean by this? Do they focus more on your IC experience and reject with the excuse that you don't have a lot of years being a people manager? Or did you mean something else?
I have a lot of experience people managing though in successful projects and teams! I guess I never found the Cracking the Engineering Manager Interview book
This keeps coming up, and I can only assume the author has not interviewed many candidates.
I've interviewed hundreds of candidates. I've lost count of how many tenured engineers I've interviewed who could not write basic code or explain basic programming concepts. Things that a practicing programmer would encounter every week.
A hiring manager naive enough to waive coding tests will almost certainly hire a low performer who will hold back their team.
>I can only assume the author has not interviewed many candidates.
I did more than 100 interviews so far.
>I've lost count of how many tenured engineers I've interviewed who could not write basic code or explain basic programming concepts. Things that a practicing programmer would encounter every week.
Where did I say that I agree with this statement. This is what other engineers claim, and as you pointed out being said many times.
I am totally against this claim as well. I do think that those tenured engineers should be interviewed for basic coding skills too. Just last month I had a staff+ engineer not being able to write a DFS...
That part in the article is ironic, hence why I said that I didn't want to make it a discussion about the fact that we have these coding interviews, and to "Get over it!" :)
MCAT filters the med school application pool down from 80k to 23k. LSAT filters from 120k down to 40k. Without them, there would be millions of applicants every year.
How long can we keep relying on high school level tests that prefilter into computer majors for college. We need a post college test.
And yeah, most of what software engineers do is very standard, and at least conceptually traces back to ideas pioneered in the 1970s.
At the same time, this type of thinking is what results in engineers wasting time and money re-inventing the wheel, on things that usually have no business value. Just look at how much time and money was wasted at Uber reinventing simple technology solutions.
> MCAT filters the med school application pool down from 80k to 23k. LSAT filters from 120k down to 40k. Without them, there would be millions of applicants every year.
How could one reliably estimate the number of people deterred from pursuing medical or law school due to the respective standardized tests?
There are 5 million college students per year, a lot more of them would take a shot at law school and med school, if it wasn’t for MCAT and LSAT.
I doubt that there is any reliable estimate of how many people would apply for med school or law school BUT FOR their having to take a standardized test.
In every company I have been, this has been proposed in some form, and the argument is always that the current coding questions approach is a reliable way to filter out a lot of the unwanted candidates, at the cost of also rejecting some very capable engineers. It's an accepted trade-off.
Moral: 1) don’t expect only questions relevant to the position.
2) practice communicating with people that have very thick Indian or Chinese accents. It will also help in general day to day life
Absolutely :) I have that item explicitly in my article, since it happened to me as well being on both sides of the interview process.
It's very unfortunate when communication is problematic accent-wise. And it makes judging difficult as well since you are not focusing on the technical merits alone anymore.
>1) don’t expect only questions relevant to the position.
For this, you might have been unlucky with an inexperienced interviewer...
A lot of interviewers grill you on stuff that they know a lot about, because how do you interview somebody on stuff you don't know anything about? So, what winds up happening is that you have to keep interviewing until you wind up with a set of interviewers that has a lot of knowledge overlap with yours.
But, at least, you have standardised pools of coding questions, standardised pools of system design questions, and a standardised feedback form.
The interviewer varies a lot though... And makes all the difference when you have an inexperienced one, or someone that doesn't care.
I believe this is likely the main point being made about luck - be unlucky enough to hit up an inexperienced interviewer and all the time spent preparing as in the linked OP is up in smoke.
Not sure if it counts as an average tech company, but in terms of non-FAANG I think startups and smaller companies can end up relying less on luck. There is more time and motivation to truly flesh out candidates, maybe giving non-interview coding tasks and such to balance out interviews. At a FAANG if there was an issue because of an inexperienced interviewer, again you need luck for a recruiter or committee to attempt a save among all the other applicants.
I hope many folks find it useful, and helps them in their next interviews, whenever that is.
I did a brain dump of how I prepare, and what I do as an interviewee, and also as an interviewer in such companies.
Please let me know if you like something specifically, or have any feedback in general.
Enjoy
2. memorize the top ten system design questions for the company you are interviewing at
^thats it, do anything else and you are wasting your time
I do admire folks that can memorize more than a few tens of problems though. It's a skill on its own!
If you don't bang out the right answers to those off the top of your head, all the programming interviews are going to be painful.
These are a given. You should know these.
When I said I cannot memorize solutions, I refer to memorizing solutions to specific Leetcode problems. Doing that for 1-2 problems per main area is doable, but anything more than that is quite hard.
The employers need metrics, fairly standard ones, to filter out unqualified employees and these sorts of simple algorithms and data structures are the least bad ones.
Where I complain is when the interviewer explains "to solve this problem, you need to think of them as virtual ants that can pass through each other" (yes this was actually what my interviewer said for https://leetcode.com/problems/last-moment-before-all-ants-fa...).
I'm guessing some do, the kinds of employers who attract a lot of applicants who misrepresent their education and experience.
I have never been asked to write code in a job interview. I guess I've been fortunate to find employers who look at my resume and talk to me as a person not a metric.