I'm a ex-Google SWE that's coached 300 through the FAANG interview process. AMA
My name's Darek Johnson and I run a company that's helped mentor over 300 to get FAANG-level SWE jobs for no upfront payment. I also used to work at Google.
Thought I'd reach out and answer any questions you have about software engineering in general, preparing for software engineering interviews, how to get a big-tech job, working at Google, or anything else interesting.
If you're interested you can check out my program - https://www.coachable.dev/
-------------------------------------------------------
FAQ: Since this has been asked frequently in the past. There is no age, location, or CS background restriction for Coachable. We're fully remote and all ages/backgrounds are welcome and encouraged.
29 comments
[ 2.9 ms ] story [ 72.6 ms ] threadTo give my best shot at this, I think I read that the behavioral interview at most big-tech companies had a pass rate of 90%+. This has given me the impression that if there aren't any blatant red flags (explicitly disrespectful, lied on resume, etc) then the majority of the decision will be placed on Leetcode performance. Most companies have an interview slot dedicated to behavioral questions, however Amazon has every interviewer do 10 minutes of behavioral questions which increases the chance of one of them finding something they don't like (with 4 more chances)
That being said, I would say that there is a component of soft-skills in Leetcode performance. This is less about "tell me when you were a leader" but more on a communications side of things. It's important as engineers to be able to effectively communicate ideas. This means that even if you can code the craziest Leetcode hard problems, if you can't convince the interviewer it works or they don't understand the solution, they would view that as a negative signal in a Leetcode interview. If I had to put a percentage on it, I would say 20% of the interview would be on how you communicate it. However learning the algorithms and problem solving is the majority of the challenge.
One caveat, I'm giving this opinion on the SDE1/SDE2 level. I imagine it's different for more senior and manager roles.
Most final round interviews would have 4 rounds with 3 technical and 1 behavioral. The behavioral seems very similar in that you would discuss past experience and how you handled challenging situations, etc etc.
The technical rounds are where I noticed some divergence. In the US, I think there is a stronger focus on doing Leetcode and doing the LC problems quickly (FB asks 2 medium level questions in their interviews).
However for the EU interviews, I've noticed that typically 1-2 of the interviews will be more practical based with debugging, code review, design classes rather than just straight Leetcode. In a 5 round interview you may expect 1 less LC question and 1 more "general coding" for lack of a better term. It almost feels like the EU companies were interviewing like slightly smaller tech companies do in the states and have a slight preference toward practical coding skills.
That being said, there are still 2-3 LC-style interviews so it's a lot of overlap nonetheless.
What would you advise for someone like me who would want to make the jump in future?
First off, you definitely can make the jump to FAANG. You've gone through a PhD in applied ML. That's really challenging and at least in my opinion much challenging and impressive than getting an entry-level FAANG SWE job. Even if you don't know the core CS topics now, I doubt it will be that hard for you to pick them up. It will take some time to ramp up on them, but not too long.
To give more reference, if you were to go into FAANG with a PhD you would usually start as an SDE2 and earn 300k+ per year as a starting all-in compensation.
If you want to make a go into a FAANG SWE role, then here's what I'd recommend. My guess is the whole process would take ~300 hours so maybe 2-3 months if you do it 40 hours per week or ~5 months at 20 hours per week.
1. Learn to code in Python. You probably know a coding language (if not Python) by doing ML. Otherwise there are tons of free resources to get up to speed on Python (https://introcs.cs.princeton.edu/python/home/ is an example)
2. Data Structures / Algorithms. With your math background this should come quickly. You'll need to learn the bread-butter algorithms, the ones covered in every undergrad course on DS/A. Again there are tons of free resources online. Here's MIT's open source one (https://ocw.mit.edu/courses/6-006-introduction-to-algorithms...)
3. Practicing Interview Problems. Complete all the problems on here - https://neetcode.io/. If you don't understand a problem, study the solutions and google around until you do.
4. Mock Interviews. If you have friends in FAANG ask them to do a few mocks for you - this is what I did. Alternatively you can use pramp.com and interviewing.io to schedule some mocks. If none of these work, can DM me on hackernews and I can try and help set something up.
5. Recruiting / Getting Interviews. I've made several posts on reddit about this (https://www.reddit.com/user/coachdarek) but with a PhD all you need to do is ping 25 recruiters on LinkedIn per day saying you're interested in SWE roles. You'll get at least a few interviews lined up with 2 weeks. PhDs are hot commodities by big-tech. 6. Interview. This is the easy part, once you've got the interview skills and interviews setup, you just show up and do them. Make sure to have at least 6 interviews scheduled because there's a lot of variance in each interview.
If you have more questions, happy to answer and follow ups.
EDITED: To make the bullets on separate lines.
The resume funnels on websites of most large companies go straight to /dev/null. (University recruitment is another story; those usually get put toward the top of hiring managers' piles.)
The best option is to directly interface with recruiters. Recruiting is a numbers game at the end of the day. There are pseudo-infinite recruiters and a few applications for each company.
The main barrier would be the work sponsorship. If you've coding background it's likely that it'll be easier to get interviews than you think.
What is your current recruiting process like now? How are you applying to jobs and reaching out to recruiters?
I've talked a bit about this in other posts (https://www.reddit.com/r/IAmA/comments/vfzejn/comment/icysbk...)
FAANG companies don't really have another better alternative to Leetcode interviews so that's what they go with.
So yes, most FAANG are married to leetcode interviews especially for SDE1/SDE2 roles.
1. Get the Interview 2. Pass the Interview
My opinion is getting the interview takes ~10% of the time and passing the interview is ~90% of the work. With this in mind, I'll
Passing the Interview.
To make life easier, you should use Python for coding interviews. It's a high-level programming language, meaning that the code looks more like English that others like C/Java. When you start Leetcoding, focus on doing the problems in Python.
For most FAANG internship interviews, you'll be asked Leetcode-style quesitons. This means to prepare for the interview you should spend most of your time solving problems on Leetcode and then once you've completed ~150 medium level problems (https://neetcode.io/ is a good place to start) then you should try and find ways to do mock interview. You can DM me when you get that point if you need help setting up mocks.
Before diving into LC, I would recommend studying the equivalent of a data structures / algorithms course. If you've already taken one, then I recommend reviewing all the concepts before diving into Leetcode.
When doing Leetcode, make sure to really understand each problem before moving onto the next one. It's ok to look at solutiosn or hints the first 1-2 times you solve a problem, but you should really digest what the key ideas are so you can solve a new problem that uses the same technique/
Getting The Interview.
If you've done any programming projects for your university coursework or on your own, make sure they are advertised on your GitHub and link them in your resume. Either way put them as "Open Source Programming" on your resume and list as many bullets and keywords as possible (e.g. Python, Machine Learning, AWS, GitHub, Testing, etc...). You might think it's cringe to add all the keywords, but recruiters scan resumes like a computer, looking for keywords. University internship recruiters will think this is really good, even though they don't know what you're doing. Put the same projects as experience on your LinkedIn as Open Source.
Once these are ready, directly reach out to 25 university recruiters at the companies you're looking to work at every day. Ask them to set up a phone call for you to learn about open role. Once you get on the phone learn about the company and ask how you can get started with the process. Even if only 1% respond, that means you'll get a phone call every 4 days. Keep doing this over 1 month and you'll get several interviews.
Answering your Questions
what should I focus on? Personal projects on my resume? Open source personal projects on my Github? You should take any projects you've already done for school or personally and put them on GitHub. Make it look professional with README and everything, but then focus on Leetcoding. Contributions to big and established OSS projects? This is nice but not needed. If so, should I dive deeply into a single project, or would smaller contributions to a few projects be more advantageous? Are there any specific projects / subject areas that I should focus on? What about commercial work experience (or the lack thereof)? It's not needed for FAANG internship interviews. How does all that compare to actual leetcode knowledge / algorithmic problem-solving skills? You just need to know Leetcode. Start by reviewing DS/A and then Leetcode until you've done 150 mediums. Any great resources for acquiring those? Leetcode.com, Neetcode.io, https://ocw.mit.edu/courses/6-006-introduction-to-algorithms..., https://coachable.dev are all great places to start :)
Also, what is the best way to get accepted for FAANG interview for someone with no work experience? Submit resume directly to company website? Connect with FAANG recruiters on LinkedIn and direct message them? Maybe try to get some experience in other tech company before applying to FAANG to maximize chances?
Submit resume directly to company website? > I would say never do this unless a recruiter said to do this after you set up a phone call AND they told you'd they set up an interview. Online applications are basically black holes so don't apply. Often times if you get filtered out automatically here, you can't apply again even through a recruiter directly.
Also, what is the best way to get accepted for FAANG interview for someone with no work experience? Connect with FAANG recruiters on LinkedIn and direct message them? > You'll want to add some experience to your resume. As a college student you don't need much. If you have any programming projects from coursework, you can put them on your GitHub (clean up the READMEs to make it look professional) and then put on your resume as "Open Source Programming". When you put "Coursework" recruiters don't take it seriously, so make sure it doesn't have "school project" written anywhere on it. They will never actually read the code so spend a good amount of time cleaning up the readme. Then update LinkedIn profiles to show the same thing. Once you've done this, then directly reach out to 25 recruiters per day. Recruiting is a numbers game so just keep reaching out. Even a 1% success rate means you get a phone call with recruiter every 4 days.
Maybe try to get some experience in other tech company before applying to FAANG to maximize chances? > If your goal is to go straight to FAANG, I think it makes sense to just start going for FAANG internships as a junior.
One thing that was not discussed here is actually preparing for the interview. Once you get the interview, you need to actually be able to pass. I'd say 90% of the time spent should be on grinding LC and studying technical concepts and only 10% recruiting after you're able to solve interview questions reliable (150 LC-mediums completed).
Maybe you can clarify my situation a bit with your experience. I've passed the Google interviews according to my recruiter, and have been waiting for a team matching interview for about 2 months now. Even though I passed, I have a feeling I didn't do particularly strongly in the interviews, since I made some mistakes, needed a few crucial hints and didn't have time for a second question in one interview. Also my CV is likely not as strong as many other applicants, since I didn't graduate from a top tier university.
My theory is that my file is going around from a hiring manager to another, and since the economy seems to be tightening, probably they have less openings than a few months ago. So they've become more picky about who to interview from the pool of possible candidates.
I've been pinging my recruiter regularly, and they keep telling me all is fine and they'll let me know when they have news. It's been rather frustrating to wait without knowing what's the process like and what to expect. I've read about people waiting for a team match for months, but also I know from following appropriate forums that someone was hired in this location on a much more hurried schedule.
So I guess I'd like to hear your thoughts about what happens after you pass the interviews and how likely it is that a "mediocre" hire goes through the interviews, but raises no interest of hiring managers.
Did your recruiters say that you had passed the hiring committee? If so, then your interview feedback is probably very strong. Even with the hints, Google decided you met the bar. I can't comment on what actually happened in the interview, but I suspect the delay on the team matching is not because of your interview performance.
Unfortunately all I can say now is that it takes time waiting. I was pretty picky with location so I had to wait longer. If you're concerned about the job market or looking to get a job soon then you can express to your recruiter you're open to more locations and also remote options (this would help if you originally said I need to be in X city).
Another thing you can do is look on LinkedIn for Google engineering managers that explicitly say they are hiring. You can reach out to them directly, inform them of your level and that you made it through hiring committee and ask if they'd like to connect. The recruiters don't know ALL of the managers hiring so this can help expedite the process.
I don't know if I've passed the HC, so I'm assuming no. My only feedback is that I did "great" in the interviews and I've moved on to the team matching phase.
I'm actually very picky about my location due to personal reasons, but it's good to know that will likely make the process longer.
Thanks for the tip of contacting the engineering managers directly. I might just do that when the frustration grows too large (even though I don't know if I've passed the HC).
For borderline candidates what they do is wait until a hiring manager is interested in your profile before moving to HC. They do this because if a hiring manager already wants you on their team, then your chance of passing HC increases.
In any case I think the plan would be the same to reach out to hiring managers and see who shows interest. I'd also ask any friends you have at Google if there are teams hiring at your level. It will be easier if you're experienced hire (L4 or higher)
1. Unique Paths 2. https://leetcode.com/problems/unique-paths-ii/. This problem can be solved with dynamic programming, graph traversal, and recursion.
2. Max Product of K Integers. Not exactly on Leetcode, but this one I really like. https://leetcode.com/problems/maximum-product-of-three-numbe.... It's essentially finding the maximum product obtained by selecting k numbers from a list of N integers (1 <= k <= N). This problem can be solved with a greedy algorithm, two pointer with sorting, using heap, and dynamic programming.
3. Word Ladder (https://leetcode.com/problems/word-ladder/) I think it would be wrong not to include a string problem. I think there are a lot of different ways to solve this one. You could use a trie or treat the strings as a graph. There are also a lot of optimizations you can make depending on the length of words vs number of words.
Honorable Mention. LRU Cache (https://leetcode.com/problems/lru-cache/). This may be the most common interview question asked at one point. Being able to execute a doubly ended linked list, leverage a dictionary, and implementing them all in a class with object oriented principles.
These don't cover everything, but give pretty good coverage of all the topics.
Hopefully that answers your question!