This guide is intended for people pursuing software engineering careers in high-end tech companies. I will be discussing my encounters with these companies in a number of verticals: Resumes, Preparations and Interviews. I'll try to make this post as beneficial as possible and not yet another "binge on problems" advice. Feel free to ask/message me about anything. Whether it is a feedback, question or if you feel something is missing or wrong: https://curiouscat.me/essamhassan
Many people believe that passing the interview is the hardest part. But if you looked into the numbers, passing the screening phase is much more problematic as many factors contribute to your odds that are irrelevant to your experience and technical expertise. i.e referrals, resume format, average level of other candidate at the time of screening, hiring season, etc.
In this section I like to divide these companies into two categories, even though there will still be variance between companies in the same category. The first category is companies hiring for specific roles in specific teams. They look for highly specialised people. In my case, this was with Cloudflare. One of my favourite interview processes. The Title was Distributed Systems Engineer - Data Pipelines Infrastructure. The process was all specific around this title and the team I'll be potentially joining. More to that in the next section.
How to pass their screening? Customise your resume to show off your most relevant experiences to what they need. In my case, they wanted someone with Kafka and Elasticsearch knowledge and I happened to work and interacted with both on a relatively advanced level @Instabug so I mentioned it in my resume. Add the most relevant experiences but also remember not to exaggerate or 'oversell' yourself because you'll be expected to meet the resume expectations in the interviews.
The second category is for companies that hire pre-allocation. This means you get hired then find a team to get matched with. This is usually the case with Facebook, Google, Amazon and Bloomberg. In Google and Amazon, you get matched after passing all the interviews. With Facebook and Bloomberg they even go further and make the matching after your orientation/training.
How to pass their screening? In this category, hiring is usually focused on high level technical skills. They are looking for someone who 1- had past technical impact on his team, 2- demonstrates problem solving skills on abstract levels. Because most of the time, they don't know where you'll end up working and they want you to have skills that are as generic as possible. Mentioning that you are a Laravel expert won't be really attractive. On the other hand, mentioning that you wrote multiple services with multiple languages will definitely help. This shows you are language agnostic and that you, to a certain degree, have good design skills. Also these companies rely heavily on referrals. Try to get a referral from your network and don't be shy to reach out to older colleagues or 2nd degree friends. If they think you are good it's in their benefit to refer you as they get referral bonus for every passing candidate they refer.
The same categories that reflect on resumes do reflect on your preparation afterward. When a Google recruiter think that your resume looks good and demonstrate good generic problem solving and design skills, your interviews performance should reflect those skills. So for these companies ( Amazon, Bloomberg, Google, Facebook ) I'd recommend working on those two aspects.
1- Generic problem solving skills
You are expected to be able to tackle medium-hard programming problems very fast in your preferred language. and to make sure your solution is correct by testing it. Usually you are put into this test multiple times with multiple conditions. i.e IDE, Phone, Chromebook, Whiteboard. My recommendations are
- Practice on tackling the problems you are not familiar with not just memorising solutions and pattern matching. In my Google interview which was my last, I solved problems from all the popular books and was done with leetcode and yet all the problems were new to me. So I wouldn't advice memorising problems. You should be able to tackle problems you've not seen before.
- Learn your language very well. Some interviewers might tolerate lack of language knowledge but you can't bet your luck on that.
- Book recommendations: Cracking the Coding interview of course is one of the good books to prepare from but the problems in there are relatively easier than Google and Facebook level, make sure you don't limit yourself to that difficulty. Also don't miss out on the soft skill advices mentioned on how to tackle interviews situations. Elements of programming interviews is also a very nice book with richer technical content but it's only focus on technical questions.
- In these books you'll find them mentioning baseline skills that every candidate should be familiar with. Be really comfortable implementing and using all of these data structures and algorithms. Many problems are usually a twist on a well known algorithm or data structure and usually interviewers expect you not to struggle implementing the basic idea.
2- Design skills
These skills are usually tested by two types of questions. Either you'll be asked to design a separate system with certain requirement. You should expect follow up questions changing the requirements and should design the system to be flexible on changing requirements. The other type of questions comes in the format of a follow up question for a problem solving question. Expect questions like "How to scale that solution if we have 1000x input" or "How to shard this". You should be familiar with concepts like sharding, load balancing, inverse indices, replication, etc. If you have industry experience with large scale systems you should not find an issue with their questions but if you are not, your best bet is reading Grokking the system design interview and other design books to understand distributed systems basics.
3- Role specific skills
For companies hiring for role specific skills, in My case this happened with Cloudflare (Data Pipelines Infra) and HelloFresh (Golang). Your preparation should be derived from 1- Job description 2- Recruiter Call. As as many questions about the role requirement and what they do. In my case, Cloudflare was looking for someone with advanced Unix experience, deep Kafka understanding, Elasticsearch internals. These are the information I asked about in the recruiter call. You should always ask about what they do and what problems they have. This will reflect on what they are looking in an Engineer. In Cloudflare I asked about "How they use Elasticsearch" and it turned out they don't. They wanted someone familiar with the internals of elasticsearch as they have similar infrastructure.
I interviewed with Amazon twice. In the first time I passed the phone interview and then they delayed the process due to headcount. So I had to do the process again and did another phone interview and 5 rounds of onsite interviews. Both phone interviews and 4 out of 5 of the onsite interviews were the same format. The interviewer starts by giving you a vague problem for you to solve and then 20 mins behavioural interview focused on Amazon leadership principles https://www.amazon.jobs/en/principles
There was one interview that was slightly different. It was focused on Object Oriented Design ( Not distributed systems ) and the requirements got incrementally tougher as we went through the design. It's good to start with a design that you can extend later and make room for flexibility in your designs.
How to prepare? Problem solving, Amazon leadership principles, Object Oriented Design.
What they focus on? leadership skills, ability to communicate solutions clearly
Bloomberg had one of the longest interviews I've ever had. All technical interviews followed the same format. 1-2 problem solving questions. Except my first interviewer asked a little bit about my background but I felt it was a warm up question not really contributing to the process. If you find the problem too easy, finish your solution quickly because there will probably be another one.
How to prepare? Problem solving
What they focus on? -
Cloudflare interviews were my favourite. The first round was a Hacker Rank screening task followed by a screening phone call. The screening phone call was an interesting conversation about scalability and "all role related". It was a mix between introducing me to the role and figuring out if I can have a good conversation about their infrastructure. The engineer proposed an infrastructure problem that they had and asked me if I have any ideas how this problem can be solved. It was not a question-answer format but rather a water cooler conversation to get a sense of how deep I can go in details about certain topics. The second set of interviews were proposing problems of high scale nature. I can't disclose the question but they were very different from all the other companies. It combined problem solving with extreme code optimisation. I was allowed to google things and read documentations.
How to prepare? Read the role description carefully, Know what skills they expect and get as much information as possible in the first call. Refresh your memory about the basics of every skill mentioned and make sure you have good command of the language you choose.
What they focus on? High volume network/data, scalability and distributed systems
I had the regular Google process that is well known on the internet with slightly different experience. It started with a recruiter screening call which was 'not an interview' but I ended up being asked technical questions about red black trees and golang internals. Then had a phone interview with one moderate problem. After a week I went through a loop of interviews with problems varying in difficulty. Some of the interviews included follow up systems questions in the format of "How to scale this" and "How to shard that". Google Interview questions were relatively harder than the rest of the interviews.
How to prepare? Expect not known questions. All my questions were new and I've never seen before which was surprising given that I solved a relatively big number of problems. Don't rely on memorising solutions or even pattern matching. Make sure you practise solving new problems. Also questions had twists in the description so pay attention to the description and ask clarifying questions about anything you think is unclear.
What they focus on? The main focus in the interviews was problem solving with interest in scale and low level knowledge.
My facebook process was cut short because of headcount issues I had to pause the process. The interviews were similar to Google process without the first screening call. The problems were clearer and a little bit more familiar. I believe they look for the same type of Engineers as Google and preparing for these interviews should be the same.
If there’s one advice I could give to people, it would be to take action. I think that this is what separates those who get the offers they really want and those who don’t. Taking the steps and actually preparing and applying to the companies they want to get in. Many people think it’s impossible for them, or that they are not good enough, but this is not true. If you work hard, prepare, apply, and repeat, you are eventually going to get the offers you dream of. - Mahmoud Shokry
I do believe that most of the readers who think they are not good enough for these companies are just overwhelmed with the stigmas caused by media and engineers benefiting from the exclusivity. Take action and know that hard work pays off.