My FAANG interview experience: four onsite interviews, (almost) four offers
06 Feb 2022
Introduction #
The last year has been very lucky for me. I finally made my shot at FAANG and the outcomes have been better than I expected. I want this article to serve as motivational yet informative reading. However, it will not be a short reading, so please sit tight somewhere quiet with a cup of tea/coffee and enjoy! I will do my best for this article to be worth your time :)
Background #
My name is Vohid and I am from Uzbekistan. Like you, I am a Software Engineer. Software Engineering has been exciting to me since my first Hello World back in 2014. It all started with me getting lucky and somehow ending up in a group of very passionate and hardworking software engineers: Sherali Obidov (now at Google), Farruh Habibullaev (now at Google), Bahodir Boydedayev (now at Ernst & Young), and Jahongir Rahmonov (now at Anaconda).
We grew tremendously together. We were consuming so much knowledge so fast that my learning curve during those beginner years was the highest in my career. We were so much into it that at some point while learning Java and preparing for Oracle Certified Java Professional certificate, we became human compilers. You could give us a piece of code and we, without actually compiling the code, could tell the result. I cherish those times :)
I did a couple of internships and landed my first job with KeyPlan Solution in 2017 - a company based in Sweden. I worked there till 2020 before deciding to go pure freelance at Toptal talent network. I quit freelance in 2021 and moved to the Netherlands to join Swisscom as a Software Engineer.
Motivation #
14th December 2020 was the day I arrived in the Netherlands and that day evening the Prime Minister of the Netherlands, Mark Rutte, announced one of the strictest quarantine measures we have seen so far. I like to think that he had been waiting for me to arrive so he can shut the borders — thanks, Mark :) The following 4-5 months was no fun for me — completely new people & place, first time away from Uzbekistan for long-term, dutch rain & wind (which is btw considered a form of public transportation :P), the harshest quarantine measures, and zero offline social life. The ping-pong table in my building was now the hottest thing for us all :P.
To cut it short, I had so much free time and was dangerously bored. I saw this as an opportunity and decided to finally take on my long-awaited goal — getting into FAANG.
Stats & results #
Let me first give you an overview of my preparation and the results of that preparation. I will cover them in more detail in the chapters that follow.
Algo/DS problems solved | ~300* |
Algo/DS mock interviews | ~50 |
System Design mock interviews | ~10 |
Behavioral mock interviews | 1 (at least I did one :P) |
*I actually solved more than 700 problems. I solved 300 problems as part of my FAANG preparation.
Company | Referral | Result |
---|---|---|
Uber, Netherlands | yes | Offer |
Amazon, Netherlands | yes | Offer |
Google, Germany | yes | Offer |
Facebook, UK | yes | Positive feedback from onsite interviews with a request for a follow-up system design interview. Process terminated by me |
Spotify, Sweden | yes | Process not initiated by company |
Databricks, Netherlands | yes | Process not initiated by company |
Preparation materials #
Algo/DS:
- Coding interview university: a study plan GitHub repo maintained by John Washam (Also check Uzbek version that I contributed to)
- Leetcode premium: gives access to interesting locked problems and listing by companies
- Cracking the coding interview by Gayle Laakmann McDowell
- Mock interviews in Telegram FAANG community: useful for consistent daily mocks with strong peers
- Pramp mock interviews
System design:
- System design primer: a study plan Github repo
- Papers on the design of popular distributed solutions like BigTable, Spanner, Google File System, Chubby, MapReduce
- Grokking the System Design Interview: a course by Educative.io
- System design mock interviews from the same community
Behavioral:
- STAR method: very important for behavioral interviews of any kind
- Grokking the Behavioral Interview: a course by Educative.io
- List of frequently asked behavioral questions from Tilek Mamutov
Preparation timeline #
I would like to divide my preparation timeline into two parts: passive and active. During the passive preparation, I mainly worked on my base knowledge whereas during the active preparation I was more into the interviewing itself.
Passive preparation
During the passive preparation, I worked on the following:
- Algo/DS: refreshed my existing know-how of basic algorithms and data structures and dived deep into advanced topics (mainly from coding-interview-university repo)
- System design: learned the basics of building distributed/scalable systems such as load balancers, caching, CAP theorem, OSI model and much more amazing stuff (mainly from system-design-primer repo)
- Papers on popular distributed solutions like BigTable, Spanner, Google File System, Chubby, MapReduce (from google research site). I tried to understand as much as possible even though they were quite over my head
- Coding contests: occasionally participated in contests from Leetcode and Google
It is important to form a solid foundation on the above topics before moving to the active preparation. For me, it took 4-5 months to feel confident. For you, it may take less or more time based on your current knowledge and commitment.
Active preparation
During the active preparation, I did the following things as consistently as possible:
- Daily Leetcode problem solving: 2-3 problems per day and more on weekends
- Algo mock interviews: 2-3 interviews per week
- System design mock interviews: 1 interview per week
- Behavioral interview prep: 2 weeks before my first onsite (my bad, don’t be me)
- Resume building: 3-4 drafts (polish, polish, and polish) & feedback from 2-3 different people
- Physical activity: ran 1-2 times a week & biking at least once a week
- Leetcode contests: once a month (I was finally able to solve all 4 problems in 1.5 hours! Yay!)
Here, it is very important to bring your problem-solving pace up to a solid speed and maintain your coding shape by solving problems every day and doing mocks regularly. For me, it took about two months before I wrote the following to Sherali Obidov:
For you, it may take less or more time based on your previous problem-solving experience and your commitment to the process.
Interview process #
Finally, it was time to face the inevitable — the REAL interviews. Sounds scary, right? Be scared no more! Have you done your homework, you are good to go :) From there onward, if something goes wrong there is absolutely nothing you can do to fix it. If your interviewer did not sleep well the night before, or your internet connection decides to go diggish-diggish on you, or you happen to go in the wrong direction with the problem, there is absolutely nothing you can do to turn the situation around. Life happens. This idea personally helped me to cope with the stress the interviews put on you.
Mindset is important as well. And the right mindset is to have fun during the interviews. Or at least try to have fun — yes, I understand that stress and anxiety never completely go away.
I don’t want to go into details regarding the interview process as this information is widely available and can be summed up in this flow:
-> apply online or via referral
-> recruiter call
-> online assessment and/or phone screen
-> onsite interviews (4-5 back-to-back interviews)
-> final feedback
Instead, what I want to go a bit in detail is each company I had onsite interviews with and their distinguishing traits so you know what to pay more attention to and customize your preparation accordingly.
Uber, Netherlands, Frontend Software Engineer
The company considers the behavioral interviews as a vital part of candidate assessment and the interviewers will dig deep into your mindset, work ethics, and past experiences where you demonstrated a certain behavior. As a candidate for a frontend position, I was not asked a single Algo/DS question — only day-to-day work-related tasks. It could be different for other positions, so do your research. For system design, again I was given a task in the front-end scope. I believe the interviews at Uber closely reflect the position being applied.
Amazon, Netherlands, Software Engineer
Every interview I had with Amazon had a behavioral component which took half of the time. I had 5 interviews in total, which means 2.5 hours of behavioral questions. Take Amazon very seriously when it says it believes in its Leadership Principles and do your preparation. Algo/DS problems are medium-to-hard in Leetcode measures.
Google, Germany, Software Engineer
For mid-level positions, Google puts a big importance on Algo/DS while they want to see how much you can be stretched in system design. For senior positions, the company expects you to ace the Algo/DS problems with ease and do well in system design interviews. Algo/DS problems are medium-to-hard in Leetcode measures. As they like to stretch you to your limit, expect follow-up questions in Algo/DS interviews.
Facebook, UK, Software Engineer
For me, Facebook seemed to put equal importance on every component. In place of system design, I had a product design interview which is a bit different where you don’t focus much on designing for scale. It might have been because I was interviewed for a position in the product area. So do your research as usual.
What (I think) helped me #
There are certain things that I think helped me directly or indirectly and I would like to mention them as tips. I hope they will benefit you too in your journey:
Plan it well in writing
It is very important to plan everything well and plan it in writing. Especially if you are applying to multiple companies at the same time, things get out of hand very quickly. Use your calendar to plan your calls, interviews, mock interviews, and anything you think will take your full attention. You will be frequently asked by your recruiter for time availability to schedule calls/interviews and if you have all things in your calendar it is visually clear when you are available, thus easy to provide time slots.
Use your Operating System’s note app profusely to plan your work. I personally love checklists: a checklist for my questions to the recruiter, a checklist for materials I must go through before my onsite, a checklist for documents I need to send to my recruiter. I even have a checklist for this article :)
Physical activity
From time to time, let your body muscles take over your brain muscles. Do some physical activity regularly. Personally, I ran 1-2 times a week and did some biking once a week. It makes a big difference in your overall mood and your progress. Are you struggling with a problem? Take a walk, it helps 9 out of 10 times. However, don’t overdo it. Remember you are preparing for interviews, not for the Ironman Triathlon. The majority of your energy should still go to your preparation.
Mock interviews
I did a lot of mock interviews and so should you! Do mock interviews until an hour of interview no longer puts much mental and emotional pressure on you. Until it kinda becomes a routine thing. However, it does not mean you should do a crazy amount of them (50 is probably a crazy amount, I agree). Just enough to feel comfortable. Then, focus on something else. Also, do mocks on all types of interviews, not just Algo/DS but also System Design, Behavioral, Front-End System Design, OOP Design, etc.
Do your homework
Always do your homework before interviews, mock interviews, recruiter calls, team-matching calls, etc. Don’t start with them from zero, get to know about them beforehand and make a good impression.
For interviews, find out the names of your interviewers, write down their names on paper and try to pronounce them (I would even google name pronunciations), check their LinkedIn profiles (sending connection requests is not necessary), try to understand their role in the company. And always prepare your questions for them.
For mock interviews, check their LinkedIn profile (sending connection requests is a good thing), check their technical background, prepare a problem and a backup problem in case they recently tackled it, try to understand their level so you are not asking DP problems from a beginner.
For recruiter calls, prepare your questions and concerns, of course check their LinkedIn profile, and prepare a list of open positions you think you would be fit for. Find out their timezone so you are not wishing them a good evening in the morning.
For team-matching calls, it is even more important that you do your homework and that you do it well. For team-matching, it is mostly about your motivation to join their team and nothing demonstrates motivation better than well-done research on the team. So, get yourself familiar with the products they are working on, find out about the people in the call, find out their role in the team, and prepare a lot of good questions. Don’t hesitate to bring up the things from your portfolio if you previously worked on a project similar to theirs.
Never lie
Never tell a made-up story for behavioral/situational questions. They will know. If it is your first behavioral interview, it is the hundredth for them. If you don’t have or can’t recall a good story for their question. Say so. They will ask some other question or phrase it differently so you can remember a suitable story. They are searching for signals, not whether you can answer a specific question. Avoid hypothetical answers, they are just not reliable enough for them. After all, there is a difference between what people think they should do and what actually they do.
My takeaway from interviews #
My only takeaway from this whole experience is that I suck at system design and have a ton to learn. The interviews showed me how shallow my knowledge is with regard to designing scalable systems. It is good because now I know my weakness :)
Wrapping it up #
Ladies and gentlemen, it is with great pleasure to inform you that I have recently started my journey at Google and am excited about what is to come :)
I want to thank my referrers for finding me worthy of a referral. I want to thank my recruiters for guiding me through the process smoothly. I want to thank my interviewers for finding me worthy of positive feedback. I want to thank my family for their irreplaceable support. I want to thank my roommate for his unlimited time for my rants. Last but not least, I want to thank me. I want to thank me for believing in me. I want to thank me for doing all this hard work. I want to thank me for having no days off. I want to thank me for never quitting. I want to thank me for being me all the time. Vohid, you are one bad***!