This is my honest attempt at decoding how and what I did during the quarantine. I will not be covering any compensation related info in this post and neither will I be sharing what questions were asked during these interviews (honestly, even if I did share all the questions they will be useless).
My background: I am a software engineer at a fintech firm with great reputation in New York. I have been in this trade for about 5 years now (3 years at New York and 2 in Mumbai). I have a master's degree in CS from a good university in the US.
I will breaking down this post into
A month down the line I also plan to post parts of this as a medium post so you might find this content elsewhere. As of 10/21/2020 I have not posted it anywhere.
Position: SDE2 at Amazon (downgraded to SDE1 during offer)
Location: NYC
Date: August 2020
Recruiter reached out to me on LinkedIn somewhere in January 2019. I was not actively looking for opportunities at the time but the recruiter wanted to stay in touch and we set up catch up calls every quarter or so. It did feel like a pain at the time but I think it paid off. We must've had about 4-5 calls over the year until March 2020. Around the time, we got our stay at home order, all of a sudden, I had plenty of time after my regular work hours. I decided to give Amazon a shot. I told the recruiter I need 3 months to prepare and they happily agreed.
Online Assesement : June 2020
Recruiter sent me an online assesment and I had a week to finish it. It was the first time I had seriously considered a job outside my current employer. The questions were very standard leetcode medium problems. I could solve them well before time.
I had done the assesement on a sunday afternoon and I heard back from the recruiter the next day. They were willing to waive my phone interview and pass me up to the virtual onsite directly. Apparently, they really liked the way I had solved the problems and the fact that I had good comments for all the major sections and the code was refactored.
Random commentary: With enough Leetcode preparation, you do start to identify patterns or atleast your brain will try to fit new problems you see into something you have solved before. Writing good quality code goes a long way, not just in your day to day work, but even in interviews.
I asked for another month to prepare for the onsite.
Virtual Onsite: July 2020
I had 4 scheduled rounds; 3 coding rounds and 1 system design round.
All the coding rounds except 1 were very standard leetcode medium problems. The exception round, also the first round, was a rather odd conversation with one of the engineers. I felt I had completely bombed the interview. I later found out it is a problem that was tagged easy on LC. In retrospective, I feel, my nervousness got the best of me and the interviewer was under-prepared. The interviewer read the question out of a note in their desktop and answers to most of my clarifying questions were the same problem statement. All the other rounds were very standard.
The worst round of all was the system design interview - and in all honesty, I blew this. I was completely under-prepared and came up with the worst solution to a relatively simple system. I was able to talk thru a lot of stuff, but looking back, I could done so much more.
The most unique thing about Amazon interview - the leadership principles. If you are preparing for an Amazon onsite, spend a lot of time internalizing these. Prepare examples for each of the principle. There is a great post on LC detailing all the Amazon leadership principles and how they are to be answered.
I created an excel sheet with all leadership principles and the related "tell me a time when " questions mapped to each of them along with 2 example answers. All of the interviewers spent atleast half the interview time asking these questions.
Random commentary: All the interviews felt very mechanical, interviewers read out a bunch of questions from a note on their screen. I do see the philosophy behind asking these leadership principles, but I feel they are given way too much weight in the interview process.
Link which I used as a basis of all leadership principle: https://leetcode.com/discuss/interview-experience/750054/how-to-ace-amazon-behavioral-interview [Edit: this has been removed due to plagiarization complaint]
Feedback: July 2020
I heard back within a week of the onsite. I honestly was not expecting to hear anything positive. As it turned out, I had messed up the system design interview, but apparently did well for my coding rounds. They downgraded the offer to SDE1. I was super happy with the outcome since it very well exceeded my expectation of a rejection. They told me the offer was valid for 6 months.
This is going to be the shortest experience of it all. I was also contacted by a recruiter in LinkedIn. After I cleared the OA round for Amazon, my confidence had gone slightly up and I scheduled my Apple interview as well.
A round was scheduled with a hiring manager in a week and then another phone interview was scheduled subsequently. The question was not something I had seen ever before and had a lot of design elements to it.
I still have not heard back from them. :grin:
Position: SDE (ML) at Facebook
Location: NYC
Date: August 2020
My dream company. A lot of my peers over the years have jumped ship to Facebook/Instagram and I have always felt how amazing it would be if I got to do it. I was also contacted by a FB recruiter based out of NYC and I scheduled an interview with them immediately after I cleared AMZN OA.
Phone interview
It started with - Hi, my name is ** and here is the problem we will be solving today. FB interviewers do not waste a single second of scheduled interview length with small talk. No talk about how the weather is changing and how bad the pandemic is. They were there for a purpose and small talk wasn't it. They typically ask 2 questions in an interview. Both of the questions were standard questions but required in depth understanding of the fundamentals. I thought I did well, but I heard back from the recruiter in 2 days and I had not cleared the bar and they wanted to a follow up phone screen again. The recruiter repeated what they were expecting to see in a candidate - most optimal code, clean code, with a emphasis on writing out test cases. I had not written a single additional test case for both the problems (lesson learnt).
Follow up phone interview
I had taken the feedback very seriously and made sure I practiced writing out test cases for the problems I solved for the week between my feedback call and the follow up phone screen. It is generally a great idea to come up with a few test cases (both normal and edge) before you write code.
You could do something like
Input | Expected Output
This went well and I heard back from the recruiter the same day, that they were proceeding with the virtual onsite.
I made sure that I asked for a month's prep time again for the facebook interview.
Virtual Onsite : September 2020
5 rounds, 3 rounds of coding excercises, 2 ML design rounds. Personally, by this time, I had solved all of the top Facebook tagged questions on LC. And I also encountered one of them (lucky). The questions were standard algorithm problems that required 1 or more data structures to solve them. No trick questions, just straight forward problems.
Of the 2 ML design rounds, I believe I did well on one of the rounds and not-so-well on the other one. The approach I followed was to touch on all aspects of real day-to-day ML. Speak about data, data privacy, the end product, how are the users going to benefit from the system, what is the baseline, how do we define if the ML system we built is successful, what deos success mean (defining metrics), what modelling choices do we have, can we come with a MVP first and then look at more advanced solutions etc.
I heard back from the recruiter in exactly a week and the feedback was positive and that they would like to extend an offer once they find a open head count in NY (any day now :grin:). They said, if i was open to relocation (which i am not) they can find find something really soon.
The company with whom I had the least expectation. I never expected to get an offer from Google. I have always believed that I am not cut out for it (I still believe it).
Position: SDE at Google
Location: NYC
Date: September 2020
A recruiter had reached out on LinkedIn all the way back in 2019 and I had kept an open line with them thru the year and till may 2020 where i wanted an experience of what a Google interview was like. Around May 2020, I was told they had no open head count and would not be able to proceed with the process. I reached out to them again in July after my FB/Amazon interviews to see if something has changed. And it had, they said, they now had open head counts in NY and would like to proceed. Since I had other onsite interviews already scheduled they skipped my phone screen and pushed me to the virtual onsite directly. (I was in shock).
Virtual Onsite
5 rounds. 4 rounds of problem solving and 1 behavioural.
Again, of all the interviews I have had in my life, I believe this was the one I went most relaxed, mostly because i was so sure of the outcome. There was no chance I was going to make it. Maybe luck is real after all, the calmness really helped me breeze thru round 1 and round 2.
The questions were possibly the hardest I ever solved. It was not really the fact that they were hard and were very vague, it did not fit into any patterns I was used to solving while LCing. I had to basically work with the interviewer breaking the problem into multiple small parts and tackling one part of the problem at a time.
Round 2 interview was my most unique experience. It started off as the most simple problem ever. A for-loop basically gave the most optimal solution. I did this in the first 10 mins and I kept thinking, did I perform so badly that they are giving me such an easy one. The problem then took a really weird turn with an added level of complexity and in the next 40 mins, it turned into an ugly monster. The interview at the end said, this is how software engineers actually work, they don't typically get to solve graph problems every day at work. Requirements change and are often vague and I wanted to see how you function there.
Honestly, this was the most fun (yes, fun!) I had in an interview. Round 3 and 4 got harder and with it my fatigue also grew. Towards the end of round 4, I was super exhausted, but the interviewer was super nice and made sure that I wasn't missing out because of silly bugs (they actually just showed me what the bug was and gave a solution too.).
The thing that stood out for me during the Google interview was that they were genuinely interested in you. It was not at all mechanical (Facebook and Amazon interviews are really mechanical). No amount of blind leetcoding will help with the questions they ask (main keyword: blind). The only interview round I felt slightly mechanical was the last behavioural round, the interviewer kept saying, I know this is a cliche, but I have to get thru all the questions in the note I have here.
A week later, I had positive feedback and I thought that was it, I was going to work for Google. Boy, was i wrong! Then came in HC and then came team matching and then EC approvals and then the offer. Google's interview process was the longest. Actual interviews itself is a relatively short process but everything after that is a drag. I still had an offer within 2-3 weeks of the interview but my recruiter had warned me that it could take upto 9 weeks.
I am still negotiating my comp; but I have decided I will be joining Google.
These are some random thoughts I have
n problems from that topic, internalize it. For instance, I feel at this point, I am really good at identifying problems where we can use binary-search. (One of the best articles on different patterns that can be solved using binary search).Some of the comments were questions about how I prepared. In the interest of being completely transparent, I do not have a winning formula. I tried a bunch of different stuff from randomly solving problems irrespective of the difficult level to focusing on 1 topic at a time. I feel it was the most effective to tackle a topic at once and then go back and solve a bunch of related problems.
Someone pointed out that this could pigeon-hole the way you think, there is some merit to that argument. I think it did not really affect me that way because I often found myself going back to completed problems and solving it using a different technique.
TImeline: I started preparing somewhere around first week of April and i had my first interview with Amazon in June. It was super casual ranging from 1 problem a day (about 4-5 problems a week) to 10 problems a day towards the end of August. (I did not solve 10 new problems every day - often times these problems were repeat of what I had already solved).
I also made sure to do a lot of mock interviews. Almost 1 mock interview every other weekend or so.
Thanks for reading and happy coding!
Edit: 10/30/2020 - link to the binary search template. https://leetcode.com/discuss/general-discussion/786126/python-powerful-ultimate-binary-search-template-solved-many-problems