I will be joining Facebook as an Engineering Manager on the WhatsApp Business team.
The road until this moment has been tough, and I wanted to share my experiences throughout the process. This might help you out if you are thinking about interviewing at any of the FAANG companies.
Of course your mileage may vary, but this is what worked for me.
I had the immense luck of working with some very smart folks during my career. Folks that ended up working in the aforementioned FAANG companies, which are in Linkedin, along with the recruiters from those companies.
I had a few recruiters as 1st level connections which I could now write to. I also had some previous conversations in which I politely declined the opportunity to join. And here comes the first tip:
Always be nice and polite to the recruiters.
You should be nice and polite to everyone as it is basic human decency, but recruiters tend to get a lot of extra crap from engineers. I somehow cultivated these relationships during months or even years, which now allowed me to directly write to them and kick-off the process.
I had a conversation with a Facebook recruiter I had been politely declining for a while, and we always agreed on touching base in a few months. Well, now it was the perfect time to go through the process.
While I was having the preliminary conversations, I was contacted by an Amazon and a Google recruiter (the timing was suspicious, but it was definitely good for me, so 🤷🏻). I told both that I was interested in hearing more, and that I was in a process with Facebook as well. This sped things up quite a while and I was now able to do three loops at pretty much the same time. The second tip is clear:
Run several loops in parallel if possible
The reasons are:
- The preparation is pretty much the same, there is no reason to not explore the market a little bit more for the same cost.
- You can get competing offers, which will be good in the negotiation step.
- You will speed up the process as they all become time sensitive.
- You will get more training in real life interviews.
During the initial conversations, I told the recruiters of each company that I needed time to prepare. My last interview experience was around 2009 so I really needed quite some time, and we agreed on around 8-12 weeks, though I had been preparing while these calls were happening (to get a head start)
I prepared for three things: coding, system design and behavioral interviews. And here comes the third and final tip:
In all three categories, try to practice the real world scenario (somebody interviewing you) as much as possible.
Really, do it. I can't stress this enough.
I have been switching between management and IC roles throughout my career (I recommend this awesome post from Charity Majors) so I have not been away from the code that much. But I needed to practice. A lot.
Really, unless you are into competitive programming or do problems on a regular basis, you need to practice.
The first thing I did was to do the Grokking the Coding Interview course on educative.io. It is pretty amazing as it goes through different types of patterns that will be very helpful when facing the problems, so you don't start trying to solve problems without any kind of base knowledge (I think this can lead to a lot of frustration). This kind of knowledge helps you reason about the problem rather than memorizing the solution.
After that I signed up for leetcode and upgraded to premium, so I could filter by company. I think paying for the premium is worth it as you will be able to see previous questions and assess how far or close to the bar you are at every step of the way. I did around 120 problems from Amazon, Google and Facebook, focusing on easy and medium difficulty ones, and sorting by popularity.
While doing leetcode problems, I also worked on problems from the book Elements of Programming Interviews in Python. While it is an excellent book, the explanations are very formal sometimes. This is not bad by itself, but you might struggle a little bit when getting stuck.
And lastly but not less important, I started to do mock interviews on pramp. This helped me to reduce the anxiety when facing the interview situation: a person will be looking at you while you code on a google doc or something similar. This scenario is vastly different from you trying to solve problems on your own, without explaining your train of thought. I highly recommend doing as many mock interviews as possible.
The recruiters told me that these interviews were very important for the EM role, so I wanted to be ready.
I did another course on educative.io called Grokking the System Design Interview. This is an excellent course that I highly recommend. It covers some theory as well as some practical cases which are very detailed and well reasoned, as well as a guide on how to approach this kind of interview.
I also did some exercises from the Systems Design primer repo, which are also good (though I think the educative course was better).
And finally I read a bunch of papers on how some of the systems that work in these companies work, including BigTable, Azure Storage, Spanner, Haystack, GFS, etc. While some parts of the papers were very hard, I always learned something from the read, so it was absolutely worth it.
I did some mock interviews on pramp, but I don't think they are as effective as the code ones. I asked some friends from other companies to do several mock interviews with me so I could practice the real world scenario.
I have done many many behavioral interviews as an interviewer during my time at Cabify, so I know what the interviewer is expecting from me.
I prepared for them by making a project matrix. For each project I worked on in my 3 previous companies, I wrote down:
- What I enjoyed
- What was my role and what was my direct influence
- What would I do differently
This gave me plenty of samples to work through the interview questions. I think it is quite important to do this exercise beforehand so you can jump into the appropriate samples for each question.
Also, structure your answers using the S.T.A.R. method and be direct and concise. Your communication skills are being evaluated as well, and your interviewer does not want to hear a 45 mins monologue.
I interviewed with Google and Facebook during a 3 days span. I believe this was great, as after the preparation you want to get it done as soon as possible. Also, the outcomes and possible offers will happen at roughly the same time, which is something very good as you might end up with competing offers.
I signed and NDA for both processes so I can not share a lot of specifics, but they were what you might expect: 5-6 interviews in total including coding, system design and people management/project management.
I found both processes equally difficult on average.
Both companies look for technical expertise in their managers, so you need to perform good on the system design and the coding rounds.
Things were pretty good on both loops, though the google coding round was not as good as I would have liked.
Overall, the loop at Facebook was much quicker. Two days after the interviews I got the positive feedback from the recruiter, and I was able to have a chat with who would be my manager to discuss the projects, teams, etc. I got an offer a couple days later.
Google has the Hiring Committee step, which usually takes a while and it is what determines the final outcome: offer, reject, or more interviews. My case was a little bit strange as I did the matching rounds before having the final outcome, but I guess that was because I had the competing offer and they wanted to move as quick as possible. After the matching rounds, my position was given to an internal candidate (I think this is quite normal), but I got an offer anyway. I just needed to wait for an opening to pop up.
I felt super well throughout both processes. Recruiters were very nice, as well as the hiring managers and the interviewers.
Also, both offers were very good.
After much (much much) deliberation I decided to join WhatsApp. The mix between the location, the team and the product feels just right.
I can't wait to get started!