I've always been fortunate enough to avoid grinding LeetCode, telling myself I don't want to jump through those hoops (rotating a red-black tree on a whiteboard) and that I was happy enough at non-FAANG companies. I know that at almost all of these companies they will ask you LC medium (or even LC hard) questions. However, the death of a close friend has made me reevaluate whether I want to work until 65. Maybe retiring early or at least having the option to not work full time makes sense. I do know that you can still live a good life before you are retired, and I am guilty of "Groundhog Day" living like some of us are.
If you were not hired into FAANG out of college and were rusty on algorithms and data structures, what advice would you like to share on getting hired into FAANG? What did you have to do to prepare successfully for the interviews? How many "practice" interviews did you do? How much time did you spend every week? How did you maintain discipline during the grind Did you have a coach or some coach-type program? What books or courses would you recommend? Thanks for any input. Happy new year!
After grinding for years and finally becoming financially independent, my advice to people considering the same is: don't.
Instead, focus on making small improvements to your daily quality of life. From sleep, to exercise, to diet, to finding a project/team/company that is aligned with your personal enjoyment. Try things out and stick to whatever works for you at the moment.
The reason for this is that becoming financially independent is not going to magically make you a happier person, it just gives you more free time. If you were bitter and joyless from years of keeping your nose to the grindstone, once you retire you will just be a bitter and joyless person with extra free time to simmer in your own misery.
Happiness happens today, not some distant future.
I did what it said and got offers.
- got an applied maths / CS degree in the beginning of 2000s, followed by a non-STEM master's degree and almost 10 years in a non-tech career
- burned out, quit job
- spent about a year working on pet projects and (re-)learning programming, then a couple of years on a startup with co-founders (which didn't gain much traction)
- moved to a different country for a developer job. I didn't want to ask my old connections for recommendations, so I just took an offer from a small company that found me on Monster or something similar
- after a couple of years, things at the company became worse, so I started looking for a new job. By that time, I had a circle of friends in the new country, some of which worked at FAANGs and asked me if I wanted a referral.
- I had remembered most of the theoretical stuff needed for LC interview from my CS course from 15 years ago, so I just needed to refresh it, cover the topics I didn't know and have some practice. That took me about a month or two of weekends, evenings and lunch breaks.
- I was so frustrated with my job that I took leetcoding as a pleasurable distraction - I didn't really need anything to maintain discipline. The country was in lockdown, so I didn't have much else to do anyway.
- the whole process from deciding to change jobs to getting an offer took about 4 months. I interviewed at around 5 companies, got 2 offer (one FAANG and one non-FAANG) and decided to take the FAANG one instead. Not sure if this job is a viable road to FIRE (and not sure if this concept is for me at all) but I like it so far.
Now if it's reversing a binary tree (the famous interview question), if you don't love doing it, you won't love working with big data and complex systems.
As for me, I loved being there working for 1 feature for half year as much as I hated working at small companies where new features had to be implemented every day. I think the latter is just better match for you.
Interviewed at Google in 2015. I basically went through all the exercises in Cracking the Coding Interview, and spent a bunch of time relearning all the stuff in my Algorithms book that never really clicked when I was 20.
I probably spent a month study all told, and I passed the interview to get hired as a Senior SWE. Had some graph questions, and honestly I've had to do a fair amount of graph related stuff at Google, so it's not a bad thing IMO.
There are plenty of opportunities out there, with large corporations, that would allow you to grow as a developer, learning useful production skills as you go.
However, during that time I sold products (and programming services) related to my field (video and image processing). I did my best to help other developers (some who could even be considered competitors). I posted to email lists of users, mostly with knowledge about the field in general and being very careful not to try to push them towards my company’s products because I didn’t want to come off as a shill.
Eventually, I decided that it wasn’t fair to me or my family to keep working so hard for so little return. I started looking for jobs with other companies and by luck there was a position that opened up on a team that was directly related to my skill set. (I had written some plugins for their product, in fact.) I had interacted with a few of their engineers on the various email lists I was on, and had even interacted with their QA once or twice when dealing with some issues with my plugins. I was able to get one of the engineers to pass my resume on to the hiring manager and eventually got the job.
While it’s hard to know for sure what the deciding factors were for them, I believe these things helped:
1. Being knowledgeable in the field 2. Posting helpful content for users and other developers and not worrying about whether I’m helping a competitor or going to make a sale 3. Getting to know an engineer or two on the team
I'm in my late 30s, have a CS degree, started a company that was acquihired, have pretty diverse experience in my career. That, plus a storefront-only consulting site I built to have a 'presence' seemed to get my foot in the door. Once there, the advantage I think I had was 1) not nervous, and 2) able to think about the problems presented, rather than just trying to solve them directly. By that, I mean that I showed the interviewers how I was able to think - and I asked for help / collaboration when I was stuck.
But as a infrastructure, architecture, and security person I've never been asked a single coding question. It's all about the above mentioned topics. The fact I can sling a little code is just a value add.
If you are interviewing with me, you won't be asked about an algorithm; you'll be asked about SAML and the differences between IdP initiated and SP initiated login flows.
So what do you want to do? Make sure you have a few projects and can speak to those experiences.
I want to work for 10 years then go back to my origin country and just live a simpler life.
Prior to this, my programming experience consisted of two terms of Pascal programming pre-University.
After this job, I joined a research company that actually knew something about software, if not money. Here I got most of my relevant experience, and after 5 years decided I should get a new job. I wasn't targeting FAANG, but I did interview at Amazon and Google.
My prep was largely some time on HackerRank and similar sites, probably totaling less than 20 hours. I likely spent more time preparing for Amazon's leadership questions.
I did no practice interviews, but did fail Amazon's on-site (and a few others).
I do, however, do Advent of Code every year. This was probably the single largest aid in getting me past Google interview.
I felt like I was a bit lucky with respect to the interview questions I got, but I think most people who pass feel that way. And anyway, the more you do prepare, the more likely you are to be lucky. ;)
Why? Because resume-building for high-profile employers begins long before graduation. Probably the most important factor: internships. Getting an internship is the highest-probability way of getting an offer bar none. If you don't have 1 or preferably 2 internships under your belt then you've made a mistake.
The second is that passing interview loops is a skill. It's one that can be studied for, learned and practiced. And if you're serious about this then you should do that. Many recommend CLRS [1] as a source for this. Personally, my choice would be Skiena [2]. Go through all the chapters on sorting and searching, lists, trees, graphs and possibly dynamic programming (some employers use this in interviews, some don't). Backtracking is useful but I've never seen it in an interview.
Do the same problems on an actual whiteboard. Don't just think about it. Get comfortable enough with any popular language (eg Javascript, Python, C/C++, Go, Java) such that the syntax and common libraries are second nature.
It's not unsalvageable to do this at the end of college (if that's the case). You just need to commit a few months to it.
Some will ask "why FAANG?" and the answer is obvious: the money can be life-changing but even aside from that it's an opportunity to learn a lot and having that on your resume is amazing social proof that will quickly eclipse the value of going to a top-tier school.
[1]: https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...
I spent about a month covering the book, and then grokking the systems design.
It’s not so much the knowledge as the familiarity with the interview format and expectations (ask clarifying questions, explain your reasoning). The company I ended up joining had an opportunity for a mock phone screen interview, which I took advantage of. It was roughly a LC easy but covered the format and gave me some feedback on how I conducted myself.
Friend with a FAANG started a bootcamp service and I was one of the first students. Algorithms and mock interviews for 6 months before I landed a FAANG role. It was a grind, but worth it in the end.
I don't really like nor understand this Col thing.
Most of what's used to derive such metric is the cost of housing... except when you buy a house you are also building equity in it (and you get the cash value plus capital gain when you sell). It's just disguised compensation.
Not a coder/dev, for what its worth.
I didn't take the job. They did a geographical adjustment to the comp, and it was considerably less than I already made, and about half what levels.fyi had led me to expect.
I practiced for weeks or months and thoroughly immersed myself in it. Different people would likely need to practice less. Practice enough to transform your though process from "I'm nervous" to "I've trained for this." I probably over prepared, but I'm the kind of person who would rather show up too early for an airplane flight than to endure the stress of maybe missing the flight. Also whenever I do a long talk, I spend an embarrassing amount of time preparing for it. But if you take weeks or more to prepare don't beat yourself up about it. And keep in mind that if you don't get the job it's not the end of the world. You can come back and interview again. In short the only way you can fail is to give up.
Another very useful thing to do when preparing is make a list of stories you'd like to be able to tell. Little 1-2 minute stories of different important things that you have done. Rehearse telling those stories. When you look at lists of common behavioral interview questions ("tell me about a time you convinced your team to do something" etc.) think about which stories you would tell to answer such questions. Good stories will have several kinds of questions they can answer; during the interview, look for opportunities to tell some of these stories. This is a trick that a top sales person taught me, and has been very useful to me.
If you're transitioning from one kind of technology to another, and the job you're shooting for requires experience in a field you have no experience in, then do some work to prepare a portfolio you can point to. For example, when I made the transition into an AI job that required demonstrated experience with machine learning, I spent a good amount of time preparing a portfolio of work I could point to.
Many people spend a lot of time talking about how it's useless to jump through these hoops to get a FAANG job, and how broken the process is. Do not distract yourself worrying about this; if you want to land the job you need to go prepare. While needing the actual knowledge is somewhat debatable, it's good to be able to demonstrate that you're the kind of person who can dive in to hard-to-learn things and get the learning done. Because once you get the job, you're going to be diving into hard-to-learn systems that you won't know anything about.
Took about four months of studying ~2 hours daily.
0. Total Compensation (TC)
Compensation data: https://www.levels.fyi/
Get the app Blind and start browsing it daily. People regularly post their offers, and it is the most up to date info on the market. It’s an anonymous forum where your company email is verified. You can DM employees of target companies for referrals or information about roles.
1. Leetcode (LC)
Buy a yearlong Leetcode premium subscription and do all the modules listed here, in no particular order, but skip decision trees and machine learning: https://leetcode.com/explore/learn/
When you are done with that, do all the problems on this list: https://www.teamblind.com/post/New-Year-Gift---Curated-List-...
A lot of these problems are on the modules linked previously, so you will only have 30-40 new problems here
Next, do random problems until you "see through the matrix."
Focus on medium level problems. Try to do something like 35% easy, 50% medium, 15% hard.
If you can't find the optimal solution to a problem, "upsolve" by reading a bit of the solution and trying again. If you still can't get it, copy the code of the solution and study it. Then erase it and try to solve it from memory.
Periodically go back over solved problems and re-solve them while taking notes.
Your goal should be to solve two random LC mediums in ~35 minutes. Consider using Python as your interview language if you are comfortable enough with it. It's faster than Java for writing.
Some places will have you run the code, others it will be a glorified whiteboard, so don't use the run button as a crutch.
Around two weeks before your interview, start doing company tagged problems like: https://leetcode.com/company/doordash/
Start doing this part first and grind it hard. It might take 3 months, it might take a year. It takes as long as it takes until you think you can crush it. I spent around 2 hrs each day in the morning on LC.
2. System Design
If you are being considered for senior level roles, this will be by far the most important part of your interview as far as leveling. If you are shaky, they will downlevel.
Buy DDIA: https://www.amazon.com/Designing-Data-Intensive-Applications...
Read it more than once.
These courses on educative.io are useful: https://www.educative.io/courses/grokking-the-system-design-... https://www.educative.io/courses/grokking-adv-system-design-...
These videos are also really good: https://www.codekarle.com/
Tech talks on Cassandra/Kafka and stuff like that are good.
Videos are the best last minute prep before interviews for design.
3. Companies
Amazon tends to be easier in terms of LC problems but ask more behavioral. Amazon also has a reputation of being stressful and pay is not at the level of Meta/Google, though that might be changing. I would do this interview first since it’s good practice for getting behavioral stories real sharp.
Google is way slower than these other companies, so if you wanna consider them, get the process started as early as you can.
If you are interested in remote, also consider Zoom, Square, Twitter, and Coinbase.
4. Applying
Get referrals wherever you can. Most places will ignore you unless you have them. I applied to probably 25+ companies and got rejects or ignored for all but Uber and AirBnB. Places I had referrals to I scored onsites for 100% of the time, including places that rejected me before a referral.
You can get referrlas off Blind. I didn’t do this, but I guess it happens! You probably also have people somewhere in your network in FANG and top tier companies if you look. If people think you have a chance of passing they’ll be happy to refer. Referral bonuses are several thousand dollars. Ask them for mock interviews as well.
5. Interviewing
The process is recruiter call -> "phone screen" (do an LC problem on Hackerrank while on a zoom call) -> "onsite" which is 5 hours of zoom...usually 2 coding, 1 behavioral (maybe a small coding question as well), 1 design.
Do mock interviews with friends/colleagues for LC problems. I had 3 different people give me a total of 6 mock interviews. You can also pay for this with different companies like interviewing.io or randoms off Blind.
Getting mock interviews for system design is harder, and you might have to pay for it. I did and it was the best money I spent that year.
Also for interviews you can interview over 2-3 days after 3pm PST to avoid taking time off work if you’re not in PST.
Recruiters will let you push back interviews for any reason multiple times, especially if it's for more interview prep, so if you aren't where you want to be before one, it's totally fine to ask for more time.
6. Negotiating
You should try to get all your interviews lined up very close together to get competing offers, especially if you want Google, who tends to lowball candidates that do not have competing offers.
Here's a list of high-growth startups for those looking: https://topstartups.io/