My Job Search and FAANG Interview Experience
TL;DR — In spring 2021 I did a job search and interviewed with Google, Facebook, and Amazon. I got offers from Facebook and Amazon and was in the team placement stage with Google when I accepted the Amazon offer.
I recently went through the process of searching for a job as a software developer. Having been a professor for 20 years, it had been a while since I last went through a real interview process and that one had been for academic positions. My experience might not be quite normal for a number of reasons, but I think it has some interesting lessons. I want to record aspects of it here for others and so I don’t forget too much.
First, for those who don’t know me, there are some facts about me that are relevant for this. Let’s be honest, a lot of academics can’t code. However, I have done a lot of things that keep my skills up in that regard. I have always focused my teaching on programming intensive courses ranging from introductory programming to upper-division software development courses and everything in between. In addition to teaching data structures and algorithms, I have been the coach for our ACM programming team every year I’ve been at Trinity and I have done things like TopCoder and HackerRank consistently for fun. The result is that while I’m not an elite competitive programmer, I am a fairly good one. I have also included a lot of live coding in my teaching including making videos for a flipped classroom. I’ll come back to why those things are relevant later. The last significant factor that matters here is that I had worked as a contract programmer for 7 of the 8 summers prior to doing this search. This professional work on a variety of products was very beneficial for the behavioral questions.
To help me prepare for my interviews I did the normal practice stuff. I teach Trinity’s course on technical interviewing, so I’ve read “Cracking the Coding Interview” more than once. I also did a larger number of problems on HackerRank and LeetCode than I might do normally. I even paid for LeetCode for a while to get access to the information on which questions are given by which companies. (This was recommended by a contact at Facebook.)
One of the less common things I did as part of my preparation, which I strongly recommend to others, is that I did two practice interviews at interviewing.io. These were very beneficial to me for a variety of reasons. Both wound up being with people who do interviews for Amazon. The first one went really well, even though I didn’t get an optimal solution to the problem during the interview. The main thing I gained from this first interview was that it solidified my understanding of what level of position I should interview for. I’ve been programming for a long time and the titles associated with my contract positions had been things like “Senior Software Engineer” but it was very helpful when my interviewer told me that based on my interview he would have recommended me for a Senior SDE position at Amazon.
This first practice interview also made me realize how much all my “live coding” practice as a teacher could help me in technical interviews. My interviewer was very impressed with my communication abilities. What this really meant was that while I was writing code, I was able to describe why I was writing it, not just what I was writing. That isn’t something most people can do, but I learned that it is really beneficial for technical interviews. For that reason, I strongly recommend that while you are practicing your problem solving on LeetCode or HackerRank you talk to yourself. Get into the habit of talking through your logic as you code because interviewers can’t see inside your head and being able to do this shows really well in interviews.
The last thing I want to note here is to explicitly point out that I didn’t get the optimal solution during the interview. I described a brute-force solution quickly and gave an approximate order for it. Then I worked a bit on how to make a more optimal solution. I never got to one I was happy with so as time was running down I switched to implementing the brute-force solution and debugging it. Yes, I didn’t get an optimal solution and my implementation had bugs. But the interviewer was still really happy because I communicated well, wrote clean code, and demonstrated effective debugging abilities to find and fix those bugs.
The second interview didn’t go nearly as well but it still taught me a lot. I learned that I needed to slow down more and strive not to fall into my normal patterns. In particular, I needed to not go into “teaching mode”. The first interviewer commented on my communication ability and the fact that I could explain things well, in particular some details of the Scala language that he wasn’t familiar with. In the second interview, I took that too far. I rushed into explaining my approach when I needed to spend more time making sure that I really understood the problem.
While being a professor isn’t really great preparation for doing technical interviews, it does create a lot of connections to students who go off into industry and get positions at various companies. Because students generally consider me to be a competent programmer, this allowed me to get referrals at nearly every company that I applied to. One might think that it goes without saying that people should take advantage of referrals, but my recent experience tells me that isn’t always the case. I have talked to a number of recent grads who have been hesitant to utilize referrals for various reasons, most of them related to imposter syndrome. If you are reading this and you aren’t certain about using referrals for any reason, I beg you to reconsider. Referrals benefit you mainly by helping you get past the resume screening stage. The referral does not get you a job. More importantly, referrals can benefit both you and the person making the referral. If you are offered a job and take it, the person who made the referral normally gets some type of “finders fee”. Contact the people you know at a company and ask if they are willing to refer you.
The other significant thing to note about referrals is that if you have one, don’t just apply to a position and ask about a referral after your application is in. For many companies, the application needs to be put in by the referrer. The other option is that you need the referrer’s information on your application, so that has to be lined up in advance. Similarly, if you are working with a recruiting company, don’t apply to the position yourself. That just puts your resume into the normal file and makes it likely that you won’t hear anything back.
When it came time for me to start applying to companies, I focused on two main groups: big companies that use Scala and FAANG companies. One thing I want to make clear is that not everything went perfectly. I still had to deal with rejection. My Disney Streaming application died with my first conversation with the recruiter. I applied for three positions at Twitter and got rejected for one and never heard anything about the other two. I applied for three positions at Waymo and got rejected from all three. I heard nothing at all from Netflix. Microsoft reached out to me, but that didn’t go anywhere either. This is the reality of the job search. Don’t let it get you down. You are only going to take one position in the end. Just make sure that you apply to a lot of positions and accept that most of them won’t go anywhere.
So what happened with the FAANG companies? I had been warned that the process at Google took a long time so I made sure to put in my application there before other FAANG companies. I had a referral from a former student that I was able to use for three positions. I immediately got a rejection for one of them, but after a week or two I heard from a recruiter and she scheduled me for a round of five interviews. The interviews included one system design interview, one behavioral interview, and three technical interviews. I went into all of them a bit nervous but had fun with each of them in the end. The system design interview was definitely my weakest. I thought the behavioral interview was the most unique. Of all my behavioral interviews, it was the most casual and conversational. From my prep, I knew what to expect from a behavioral interview but I was impressed that my Google interviewer never asked any of the typical questions directly. Instead, he managed to direct the conversation in ways that made sure I hit on all the types of things he wanted to hear without explicitly asking.
These interviews went well enough that my application went forward to the Hiring Committee, HC, to look at it. I should note that all of my information about this process came from the recruiter I was in contact with. I really like my Google recruiter, Ashley. She was clearly my advocate and she worked to keep me informed about the process. I should also note that in at least one of the Google interviews the solution that I implemented was brute-force and not optimal. It should be emphasized that this isn’t as bad a thing as many people might think. What really matters is that you communicate your problem-solving to them, not that you find an optimal approach to every problem in the allotted time.
Around this same time, I got a referral for Facebook and within 48-hours one of their recruiters had reached out to me about interviewing for some positions. The process with Facebook started with a single interview that included both technical and behavioral aspects. I believe that this type of “filter” interview is standard. I’m not certain why I didn’t have one with Google. That initial interview went well and Facebook then scheduled a round of five interviews with them.
About that same time, I heard back from Google. The hiring committee had questions about my system design interview and wanted to have me do another one. This made sense to me as I knew that system design was definitely going to be my weakest area. Fortunately, when Facebook scheduled their main interviews, they included information on how to prepare. Google had done the same, but given what I now knew, I paid special attention to the preparation for the system design aspect. The link they provided for that was https://github.com/donnemartin/system-design-primer. I highly recommend it. I read pretty much all of it before my Facebook interviews or the follow-up system design interview with Google. The five interviews with Facebook were similar in many ways to the ones with Google, including the breakdown of how many interviews of different types.
Not long after the Google referral and somewhat before the Facebook one I got a referral to Amazon as well. Three weeks later, when I was in the middle of interviewing with Google and Facebook, I heard from a recruiter from Amazon about a position with Amazon Go. This wound up leading to a screening interview for that position.
One thing that is worth mentioning is that I was completely transparent with all the companies about the fact that I was talking to the others. When I first talked to Ashley at Google she had asked about that and at the time I didn’t have anything else happening, but through the whole process, any time that I moved forward with one company I would let the other companies know. This was done largely with the idea of keeping things synchronized. The recruiters for each company like to know if they need to move quickly because of offers from other companies or anything like that.
The initial interview with Amazon was different from the others that I had done in that I felt their question was far more open-ended. Indeed, it reminded me of aspects of my second interview with interviewing.io. It was still a combination of technical and behavioral, but the technical question was just less constrained and not as straightforward. That interview went well and I moved forward to scheduling the “in-person” interviews.
Before the Amazon interviews were fully scheduled I got an offer from Facebook. I was also told that the Google Hiring Committee had moved my application forward to team placement. I let Amazon know about the Facebook offer and they put my interviews on fast-track.
The Amazon interviews again consisted of five separate interviews, but unlike Google and Facebook, every one of these interviews included a behavioral aspect, even the technical interviews. The technical interview questions also continued to follow the pattern of being more open-ended than what I got from Google or Facebook.
Those interviews went well and Amazon made me an offer that was well above the one from Facebook. I told both Google and Facebook about that offer. Facebook took a little while to counter, during which time I met with some of the heads of the teams for team placement at Google. When Facebook countered, I told both Amazon and Google. Amazon countered that almost immediately and I accepted their offer. It was a bit unfortunate that I couldn’t find out if I would actually be offered a position at Google, but the offers from Facebook and Amazon were simply too good for me to risk losing them by waiting.
So that was my technical interviewing journey in 2021. Here are my key suggestions to anyone else planning on interviewing in tech, especially if you are interested in FAANG companies:
- Practice now. Don’t wait and try to cram it all in. Problem-solving takes time to develop.
- Focus on your communication skills. Talk to yourself while doing your coding practice.
- You don’t have to solve all the problems optimally to do well. A brute force solution where you can determine the order and express that it probably isn’t ideal is still good. Indeed, a non-optimal solution that you communicate and analyze well could be better than an optimal solution that you don’t communicate or analyze well. Remember that they want to understand your problem solving, not just a solution. They know the solution.
- Unless you have a lot of experience with system design, read https://github.com/donnemartin/system-design-primer.
- Utilize your network. Ask people you know if they will refer you. This can help make sure your application isn’t completely lost in the shuffle.
- If you are set on working for Google, don’t even apply to other companies until you have gotten to the interview stage with Google. Their process really does take longer.
- If possible, time things so that if you get multiple offers they will come around the same time. I never asked any company to counter another offer. However, if they have gotten to the point of making you an offer they want you and will likely counter if you get another one. It was not my intention to start a bidding war but I definitely did benefit from having more than one company making me offers at the same time.