During my employment at Amazon, Facebook contacted me for interviewing for a software engineering position in London. Many months later I received an offer. In this blog post, I share my interviewing experience and give tips for the preparation for the software engineering interview.
Structure of the interviews
Facebook follows a rather standard interviewing process. After a touch base with multiple recruiters, I managed to schedule a technical phone screen. Many may not be aware that they can try scheduling the phone screen outside working hours: Facebook has software engineers in various time zones and can help with avoiding taking unnecessary vacation (ask the recruiter to be sure).
After scheduling the first interview, I received an email with a long list of preparation materials.
The preparation materials included:
- A coaching video from the author of Cracking the Code Interview.
- A link to a live-streamed coaching session and a link to Jackson Gabbard’s Youtube channel.
- A list of fundamental algorithms and data structures, which is basically the one in Cracking the Code Interview with the noteworthy addition of bloom filters (which are not asked often in interviews, in my humble opinion).
- A link to the Facebook career blog with preparation tips.
- Some generic behavioral tips such as “know your resume” and “ask questions at the end of interviews”.
To sum up, this is the old adage of knowing your algorithms and data structures. That said, the question at this stage was relatively easy, not involving any fancy impossible algorithm.
After the phone screen, I was invited onsite. Since I already lived in London this involved just taking the Tube (London’s subway) to their office. There were 4 onsite interviews:
- The first was mostly behavioral with some coding at the end. I was being interviewed by an engineering manager.
- The second interview was about algorithms and data structures.
- The third interview was also about algorithms and data structures.
- The fourth interview was about system design.
The first interview was atypical as I wasn’t expecting to code after talking about my past experience for about 30 minutes. I found the problem slightly easier compared to the other interviews but I also had less time. The second and third interviews were very similar, your typical algorithms and data structures interviews. Solve one or two questions in 45 minutes. The last interview was system design.
Preparation resources
I already wrote extensively about interviews in the past, so this section will contain mostly high-level suggestions and pointers. Let me know in the comments if you would like more specific advice. I’m thinking that topics such as “What to do when you’re stuck” or “How to break down dynamic programming” would be useful for many but I’m mostly driven by comments when picking the next topics (also outside the interviews realm).
- A good starting point is Tech Interview Pro by ex-Google, ex-Facebook Senior Staff Software Engineer Patrick Shyu (the Tech Lead). Use this links to get 40% off and support the blog. And for more popular coding interview problems, check out CoderPro. Use this link to get 20% off.
- If you prefer a book, I recommend Elements of Programming Interviews, which is basically a deeper version of Cracking the Code Interview, available for multiple programming languages.
- Read my personal experiences about Google, Amazon, Toptal, Booking.com, and Zalando.
- Some basic salary negotiation strategies are in the Booking.com post.
No offer or offer?
Right after finishing, I had the impression the interviews went well. In two interviews I found the most optimized solution without help. The third algorithmic interview was less smooth but, after two unoptimized solutions, I managed to find the best complexity with only a small hint. Lastly, the system I designed was solid: I didn’t come up with revolutionary ideas but I scoped the problem down and derived a simple architecture while considering tradeoffs on the way. So I was a bit surprised when I got the call from the recruiter.
After some chatting, he told me my feedback had been approved but the headcount was just closed, so no offer right now. He also added to keep in touch because the situation could change in 3 months if they get more headcount. In this case, I wouldn’t need to interview again.
At the beginning, I thought it was just a lame excuse to soften the rejection: it felt very odd that Facebook contacted me for a position they didn’t even have. I thought that maybe it was about the third problem and I should have solved it faster after all.
As it turns out, I was wrong: the offer came 6 months later, without re-interviewing. It took two entire quarters to obtain new headcount but they sent me a nice hoodie and a handwritten letter to make it up to me. I appreciated the gesture but I declined the offer. By now I had a new satisfying job in another country and didn’t want to change.