21 minute read

Man controlling a robot
Photo by Dima Solomin on Unsplash

Sharing some good news! 🥳

Hello everyone 👋,

As I start to write this long post, its been more than a month that I took up my new job at Meta London as a Software Engineer.

This was a really big career move for me and my family and something I always aspired to and working at that level of scale felt as the right step up for us.

Motivation for this post

After updating my profile in LinkedIn and other social media, some people and engineers that I knew reached out to congratulate and also asked for advice on how can they prepare better for similar roles at BigTech and other high growth companies

This post is my humble attempt to share more about this process from my own experience in the hopes that it would be valuable for the community

️⚠️ Disclaimer: Opinions in this post are purely my own based on my personal experience and not in any way representative of my employer. Please take these with a grain of salt.

While preparing for these interviews, I read through many excellent posts on applying and preparing for Software engineering interviews at Big Tech companies and this post’s title is inspired from these, Having finally got “that” job, this post is my way of paying the advice forward.

I would highly recommend reading these excellent posts when you have time:

A word of gratitude 🙏🏼

Before I begin, I would really like to express gratitude 🙌 towards all the people who helped me in this long journey

  • Especially my wife who was extremely patient as I spend long hours morning/night for months preparing
  • Couple of friends without whose support this would really not have have been possible.
  • All the innumerable mentors, creators who actively shared there knowledge and experience via blogs, YouTube videos about this process which benefitted me immensely (I will list many of these resources in this post)

The right mindset going into the process

As you start to read this post,

  • You might be having multiple thoughts about the company, the interview process and whether you can even succeed through it all?
  • You might be thinking, there are thousands of applicants for any particular position, Do I even stand a chance?

Let me tell you my friend, I experienced most of these thoughts first hand and shared these doubts and while some of these thoughts were positively motivating, others not so much.

And before your mind spirals any further, let me stop you right there and offer you a simple piece of advice.

Slow down, Breathe. 🧘🏼☺️!️ Take your time and don’t give up! You got this!

Its not a zero sum game

These interview loops are certainly not a piece of cake 🍰 and arguably quite hard, Its very easy to go down a rabbit hole and let this be the only thing that consumes everything in your life. But please don’t.

At the end of the day, while a job at one of these companies is really coveted and offers really nice perks/salary and learning opportunities, it is a job and might not be the right fit for you and should definitely not take priority over your or your loved ones physical and mental wellbeing.

A note about failure 🙅‍♂️

Its also really easy to take interview rejections really hard and have demotivating thoughts that you are not good enough, and I’ve also been a subject to some of these rejections as I interviewed at other companies,

Just realize this happens to the best of us, sometimes you might be under prepared, or might be having an off day or unfortunately just get stuck and I think its only human for this to happen.

You must fail fast and fail better!

An interview however stressful is sort of like a hard mirror to look at and serves as a reminder of at what point of your preparation journey, you are at and any failures does not mean you are not qualified but simply not as prepared.

I’ve learned that the correct mindset to approaching these interviews is to have the below frame of mind.

  • You are going to speak with some really cool and intelligent people from world class companies
  • You have a chance to figure out and collaborate on a few interesting and challenging problems and take your best stab at it for 45-60 mins
  • No matter the outcome, you’ll walk away with knowledge about your own prep levels, any gaps you need to fill, work on and get better at
  • Get a chance to ask questions, and learn more about the company culture and work

I first heard about this from Gergely Orosz a.k.a The pragmatic engineer in his YouTube Video Confessions from a Big Tech Hiring Manager: Tips for Software Engineering Interviews and I must say I completely agree that this is the helpful mindset people should approach these interviews with.

The Interview process overview

If you are still reading after that word of advice, You certainly want to give this a shot 💪, So without further adieu, Let me get right to the point 👇

Meta (previously known as facebook) as of 2021 has the below interview loop for Software Engineers position.

Please Note: 📝 There are different roles within the company, such as Product/Production engineer, Quality specialist, QA Engineering lead/Engineering Manager, Android/iOS/Backend/AI/ML engineers and so on, please check with your recruiter as some of these rounds could have different scope and objectives and they are in the best position to confirm.

The below largely holds true for Software Engineering Interviews

  • 1 Initial Recruiter screening
  • 1 Screening Coding interview

Followed by a full onsite interview loop having total of 4 interviews of 45 mins duration each.

  • 2 Coding interviews
  • 1 System design interview
  • 1 Behavioral interview

Please read below sections for resources as well as tips on how to prepare for each of these

Step 1: Writing an effective resume ✍🏻

The first step to any interview journey is to write a good resume that helps in making your case in front of the recruiter and hiring manager.

In most cases people will skim read your resume first so spending time and making your resume concise and the best reflection of your skills is very important.

Luckily there are many amazing resources out their with sage 📿 advice on how to write effective resume.

Below are what I referenced heavily:

In general, writing a good resume is just like any other skill, you start with a good enough version, and then keep on iterating and refining it till it works quite well.

Some Do’s and don’ts of writing an effective resume

I’ve listed some helpful practices and some things to avoid in your resume.

Do’s:

  • Mention technical items that show you are smart and can code and call out the impact you’ve had in previous roles
  • Prefer writing a 1 page resume (If your years of experience (YOE) is under 10 years) and maximum 1.5 - 2 pages for more experienced candidates
  • Please add only the relevant positions that makes you an impressive candidate for the role
  • Write strong bullet points that convey impact for e.g. “Accomplished X by implementing Y which led to Z”, Show what you did, how you did and what were the results
  • For project experience: Please list only the relevant and recent projects (in chronologically reverse order), Your resume does not have to be comprehensive work history but only include bits that are relevant to the position you are applying for
  • For programming languages and software
    • Softwares and Tools: List only that very specific keywords, eliminate others, remember anything you put on your resume is fair game during an interview.
    • Languages: List only the ones which you are comfortable with and not everything

      Tip: 💡 You can add proficiency level around the language: Python (expert), Kotlin (proficient), Java (fluent)

  • 🔺 Remember to tailor your resume to the role you are applying for, i.e. ensure your resume has those aspects highlighted that the given job description focusses on (obviously while being authentic to your experiences and skills).
    • This is quite an underrated activity but doing this could well mean the difference between, a resume reject vs getting that call from the recruiter.

Don’ts: ⛔🤦

  • Don’t include non tech hobbies as they don’t matter much
  • Adding no of years to a programming language is a poor metric, For instance, if you started working with a language 10 years ago but have used it only few times what is the no of years that you can claim?
  • Do not add age, marital status, nationality as this sort of personal information can create a legal liability for US companies
  • Remove lengthy certifications that are not relevant

Step 2: Research and apply 💻

The next phase is to find the positions that you are interested in. With Covid, the tech market become unusually hot and there was no shortage of roles for skilled candidates.

There are multiple job search engines available, the most prominent being LinkedIn. You could setup job alerts 🚨 for the companies, locations and role that meet your profile and then research and start applying to them.

💡 Tip: Get a referral: Once you find the opening you are interested in, Try to see if there is anyone in your network who is already working at the company and try to get a referral or introduction. Getting an employee referral puts your resume at the top of the priority list and has a high chance of being reviewed by the recruiter and the hiring manager. LinkedIn and Twitter are good spaces to build a network that you could leverage these later on if needed.

If you looking for a structured process to research and apply to companies, I found this video by Jeff H Sipe on How to Research a Company for a Job Interview quite helpful, his YouTube channel also has excellent content on the interview process backed by his multiple years of experience working as a recruiter at Google.

🤔 Self Reflection: In my case, I had a close friend and colleague already working at meta and he forwarded my profile to the hiring manager and referred me for the role. Post speaking with the hiring manager, I was very excited by the role, team and the learning opportunity at hand and got the recruiter call shortly after. My own experience validated this idea of putting extra effort in getting a referral as it can give much better results

If you however don’t know anyone at the company or people don’t respond over social networks, 🙁 go ahead and apply anyway. Some companies do screen inbound resumes and I have personally also got few reach outs this way.

Step 3: The recruiter screening 📱

Once the recruiter is interested in your profile, they would probably reach out to schedule a discussion over phone or video conference (VC). These conversations are to better understand your profile and see if you are a fit.

As always being authentic to your experience and skills is important and your honest answers would help the recruiter understand how much prep time you would need for the interview loop.

Meta recruiters are amazing and they give sufficient time for you to prepare well (even up to 6-8 weeks) and share lot of guidance and prep materials and depending on how prepared your are, I would suggest to take that time. ⏲️

Contrary to some other companies, the interview process is fairly open and transparent with very clear expectations laid out. This leaves very little room for ambiguity and thus results in an excellent candidate experience.

💡 Tip: Remember to ask lot of good questions about the role and the interview process and get clarity for your specific role. Its perfectly fine to clarify the scope of the interview rounds and what can you reasonably expect. Also, being kind and gracious throughout the conversation can go a long way since you should realize that the recruiter is really on your side and its in their best interest to ensure you succeed.

Step 4: Coding interview (Screening and Onsite)

Meta has in total 3 rounds of coding interviews. Your recruiter would usually schedule an initial screening interview and depending on how well you do, it would be followed by the full onsite interview loop having 2 more coding interviews and few more

Succeeding in these coding interviews is a challenge for sure, but definitely doable. Its a matter of practicing well, consistently.

These rounds focus on solving 2 algorithmic style problems focussed on data structures and algorithms, problem solving skills and communication and collaboration skills within a span of 40 minutes, leaving 5 mins at the end for questions.

Contrary to some other companies, where there is some time for introductions, your interviewer would very quickly introduce themselves and then jump right into the initial problem. What area or skill the problem would assess is completely up to them and could be on any data structure or algorithm area in the below list

Data structures to know

  • Array
  • Stack
  • Heap
  • Queue
  • Map
  • List
  • Linked list
  • Trees (Binary Tree, Binary Search Tree, Ternary, N-ary)
  • Graphs

Algorithm

  • DFS (Depth first search)
  • BFS (Breadth first search)
  • Recursion
  • Two pointers
  • Sorting
  • Dynamic programming (rare, but sometimes asked)

How to prepare for DS and algorithm questions

People with a computer science engineering background have gone through these Data structures and algorithms at least once in their life, however while working professionally, most people understandably don’t really remember all the details off the top of their head

Depending on the amount of time you have for the interview its best to understand the nuances of these different data structures and algorithms, conceptually and then follow up with consistent practice solving problems

Self reflection: 💡

  • I read through few books and sites first to get that theoretical base around DS and Algo, and read books like Cracking the coding interview by Gayle Laakmann McDowell, Problem Solving with Algorithms and Data Structures using Python By Brad Miller and David Ranum, Luther College and The Interview Cake Course, However if you are short on time, I would suggest spending a lot of time solving problems over at LeetCode
  • I also went through sections on Arrays, Heaps, Binary Search, Linked list, Recursion, Graphs, Binary Trees on Leet code and they are quite relevant to the coding interview questions
  • I mostly focussed on the Top 50 questions asked by Facebook. You can filter questions by difficulty (Easy, Medium, Hard) and I’d recommend focussing a lot initially on easy and medium problems and then ramp up on Hard problems as well since they are also asked during the interviews. (You can sort these questions by frequency to ensure you practice the questions that are asked more frequently)
  • In the end, I solved around 147 problems in total, thus its not required for you to solve 500+ problems to get in but obviously more practice means better chances

There are many more books and resources that you can go through mentioned in this blog by Gergely’s on Preparing for the Systems Design and Coding Interview by Gergely Orosz

There are other sites like HackerRank that is also used by some companies.

Tip: Solve problems of different types 💡 Its important to solve different problem types rather than many problems of the same type since you should optimize for coverage than solid depth in one area over the expense of others.

Additional tips to keep in mind

  • While practicing ensure you practice talking out loud 🗣, this is an important skill to develop since it gives good signals to your interviewer about how good of a collaborator you are and this is a desired skill.
  • Try to time yourself while solving these problems ⏰ and develop enough speed to solve the problems with clean optimal solution within 20 mins. Try to use tools like Coder pad so that you are familiar with editor

    • Don’t worry if you don’t have the speed initially, as you solve more problems you’ll start to recognize patterns and you’ll get faster.

    • The below time format could be used:
      • Clarify the question (1 - 2 mins)
      • Start problem solving, Discuss solutions, ask more clarifying questions (5-7 mins)
        • Cover time and space complexity
      • Go to coding (8 mins)
      • Leave 2 mins for tests
  • Practice daily, think of these problems as workout for your mind to ensure you don’t get rusty. I made a point to solve at least 2 problems daily and this consistency really helped IMHO.
  • Please review already solved problems every week (Very important). since without this you’ll forget soon enough. You can use a spaced repetition tool like Anki to prompt same problems on a periodic basis
  • Practicing these interviews with a buddy is amazing since they can give you actionable feedback for improvements, you could also leverage a community platform like Pramp to do mock interviews and get any feedback for improvement early.
  • Remember you should aim to solve the problem first even if its a naive solution, “Done is better than perfect”. However don’t stop as soon as you have the naive solution in place since you are expected to reach an optimal solution to the problem at hand if possible to get extra points.
    • Come up with edge cases once you write the solution, catch your bugs
  • Ask clarification questions and check your assumptions to ensure you solve the correct problem.
  • Maintain good communication with your interviewer, they can steer you into correct direction in case you go to the wrong direction
  • During the interview, Do not waste time looking up functions on internet, if you are not sure, you can use a placeholder and mostly interviewers are looking at thought process and not exact syntax

Coding interview resources

Blogs:

Practice sites:

Step 5: System design Interview

The system design round is an interview round to assess how well do you understand design and architecture of systems and given a vague problem, can you clarify and design a high level system and then dive deep into few components.

You could be asked to design any system or app, there are some commonly talked about systems like WhatsApp, DropBox/Google Drive, Instagram, Twitter, Type ahead search, Search Engine, Web crawler or it could also be a niche use case (depending on your experience level and role).

Depending on the role you are looking for the scope of this round can change thus clarifying with your recruiter is very important.

For e.g. for a product engineer the focus might be more on how do you design the API and database schema for the backend system whereas for an Backend/Infra engineer the focus could be how well does the candidate consider different systems (Db, cache, load balancing, security) and other concerns

General timeline for this round:

  • 5 mins for clarifying questions
  • 10 - 12 mins to go broad and make a high level design
  • 10 mins to go deep into 2-3 components and elaborate on the design
  • Wrap up

Expectations from candidate 👩🏻‍💻

Below are the general expectations from this round. A good performance in this round gives a good signal towards the target level and competency of the candidate.

  • You are expected to design and build a distributed system from scratch
  • How well do you gather requirements and explore the problem first
  • How well do you do quantitative analysis, work out the scale, size of data that you will be working with
  • Do you consider tradeoffs for the design choices
  • How well do you deep dive into components and details
  • How do you reason how the data is stored, secured and structured
  • Can you drive the conversation and don’t need too much prompting

There are some excellent resources for preparing for system design and I’d recommend any of these

System design round tips

  • While the interviewer can reply to your clarifying questions, You need to lead the discussion
    • What does this leading the discussion mean? Think of your interviewer as a junior engineer who you are giving an overview of the system
  • Keep track of topics you want to cover so that you don’t forget them and manage your time well. Don’t go too deep in one area and lose points due to missing out discussion on other areas. You can ask your interviewers which area they are more interested in exploring
  • Consider how will you store data, how would you design the database schema, how do you scale the backend, Think about tradeoffs between memory, consistency vs availability

Resources for system design

I referred to lots of videos on multiple you tube channels and then practiced designing the systems from scratch. Also tried some mock interviews with friends. The feedback from these rounds was very helpful in me understanding gaps

Below are some good resources:

YouTube:

Blogs and Github repo:

Books:

Behavioral Interview

Behavioral round tests a candidate to see if you would be a fit for the role at the company. This is a non coding/design round wherein the interviewer is more interested in how you work with the teams (drive consensus, handle conflicts), are you a good communicator and collaborator, also can you verbalize your impact to the teams and products you have worked upon.

This interview gives a lot of signals on your leadership skills, seniority and taste of whether you would fit in.

How to prepare for behavioral interviews

  • You should revisit 🤔 your work history and make note of the projects you worked on where you had good impact and prepare data points that you can further speak to
  • You can follow the STAR format (STAR = Situation, Task, Actions, Result)

Behavioral interview tips

  • Talk about projects you are most proud off and be ready to talk about them in detail while being authentic, remember your interviewers are seasoned professionals and they usually cross question you in case something does not add up. Please don’t lie or over glorify your contributions. In this case, Honestly is definitely the correct policy
  • Also reflect on which project that did not go well and how did you fail and what were your learnings.
  • Anything in your CV is fair game, talk about what You have done, specific
  • Make sure you lead and drive the conversation and give your answer with enough detail and with data.
  • Focus on what YOU did and your specific contributions to the success of a project, instead of saying WE
  • Convey key points about you responsibilities, projects that you lead, initiatives that you took

Expectations from candidate

While interviewing, the interviewers want to see how well do you exhibit behaviors that are valuable to the team and inline with company values

Meta has below 5 company values:

  • Move fast
  • Be bold
  • Be open
  • Build social value
  • Focus on Impact

Your interviewers are interested in finding out below aspects and your stories should ideally tie towards these behaviors

  • Can you work in unstructured environment (VUCA)
  • Do you exhibit a Growth mindset towards learning and working?
  • Do you have empathy towards other people on your team?
  • How good are your communication skills and how do you speak about colleagues?
  • Do you have the ability to resolve disagreements?
  • How well do you use data to solve problems?
  • Do you exhibit perseverance and how well do you deliver results?
  • Are you a self starter and motivated to make an impact?

Bonus: Questions to ask your interviewers

At the end of any interview round, You usually get 5 minutes to ask interview questions from your interviewers.

Remember the company is investing a lot of precious company to interview you, so make sure you ask lots of good questions and understand the company, its people, culture. These questions should answer what matters most to you and what care about.

Do not waste this time asking questions to which you can easy find answers on google like company perks, technology stacks or how well did you do on the interview. 😉, You’ll get to know that sooner or later anyway.

Tip: Research about the company and the role before interviewing so you can come up with valuable questions

If you want a sample list of questions to ask, I found below excellent video by Jeff H Sipe, feel free to take example list and modify as per your unique role and situation

Conclusion

Phew, ☺️ That was indeed a long post, Hopefully this post and tips helps you in your interview journey.

In case you are looking for an opportunity at Meta, Feel free to check out Meta Careers and If you’ll like me to introduce your profile, please follow Meta referral request process to provide me all the details to write a good introduction/referral, I’ll probably batch resumes and submit them when I can.

All the best! 👍

As always, Do share this with your friends or colleagues and if you have thoughts or feedback, I’d be more than happy to chat over at twitter or comments. Until next time. Happy Testing and coding.

Comments