A guide for regular people to land a job in the “FAANG”

I know a lot of software developers who deep down in their hearts want to work for the top tech companies, like Google, Facebook, Amazon, Microsoft, Apple, or Netflix. But a lot of them think that this wish is a moonshot and they can never fulfill this dream. They consider themselves to be too normal or regular guys, and the engineers at those top companies are some out of the world geniuses no match for them.

I am aware that not all software engineers want to be a Googler or an Amazonian. Nor do I think that working at Facebook or Microsoft should be the epitome of the career of a developer. I am just stating that there are many software engineers who want to get into those top companies but think that to be impossible for them. This blog post is for these people to share some experience from me and some people I know who got into these companies to explain that the target of yours may not be a moonshot or impossible. And as a regular or normal guy, you may very well crack into your target giant company.

I shall break into the whole process of landing a job in the FAANG (those who do not know yet, the acronym for Facebook, Amazon, Apple, Netflix, and Google) into some chronological phases, and I shall try to provide some tips to prepare yourself in the best possible ways in those phases. I expect this will be helpful for those who are interested.

The target audience of this blog post

As I mentioned before, this blog post is for software engineers who are doubtful about their capability to get a job in the top players in the industry but they would love to get such an opportunity. This post should also help those who are extremely confident about their capabilities to crack into the FAANG but are looking for ways or processes to do so. 

The earlier you are in your career, the more helpful this guide should be for you, and even better if you are still in your student life and have not started your career yet.

Before going into the phases and preparations

There is no doubt that talent is a very useful trait and will give you a great headstart in the process. But do not make the mistake of taking it for granted. Talent does you no good without perseverance and hard work. A lot of talented people achieve nothing in their life because they do not work hard or cannot stay focused on their goals. On the other hand, a lot of averagely talented people have reached the top with hard work and perseverance. In fact, I do not consider talent without hard work as talent at all. 

So spoiler alert: the process I will discuss in this blog post will include hard work. The harder you can work on this and the longer you can stick to the target, the better chance you will have to be successful.

Phases of your preparation

I want to breakdown your preparation to get a job in the top companies into the following phases:

  1. Groundwork
  2. Preparing for the battle
  3. Applying for the jobs
  4. Preparation for the code tests and phone screenings
  5. Preparation for the onsite interview
  6. The onsite interview

I shall describe each of the phases now with their related preparation methods.


The groundwork should start way before you actively apply for the job in your target companies. The longer you can manage your groundwork, the better shape you will have for the process. The target of this phase is to make you a better problem solver. The top companies put significant weight on the candidate’s problem-solving skills for their selection.

And you cannot become a skilled problem solver or a top coder overnight. You need to put hundreds if not thousands of hours into coding and solving problems. If you are still a student or in the very early days of your career and in no hurry, I shall suggest you hone your skill of algorithm and data structure. 

You can open an account on problem-solving websites like, or and start solving problems. You do not need to be at the ACM world finals level, but you should be able to formulate a solution that will solve a problem without any constraint of time or memory, which means if you had unlimited computation time and memory (a brute-force solution) within a few minutes and then work on your solution to optimize it.

You may easily get overwhelmed by the problems in the problem-solving websites and find yourself confused and frustrated. My suggestion is to learn a data structure and algorithm first and then look up problems related to that data structure or algorithm and solve a few problems. This way, you will be able to solve the problems relatively easily and your learning of the DS or algorithm will be much more fruitful.

Another important thing to do in your groundwork phase is to build up your network. If you are not an outgoing person, still search for your peers who are doing good in their area and share knowledge and thoughts with them. Actively reach out to people you may know already working in your target company(ies) and keep at least occasional communication with them. This will be extremely valuable in phase-3.

Special case: I do not have enough time to start coding in the problem-solving websites and commit hundreds of hours for this purpose.

Really? Think again, because this is a very important phase for your preparation. Believe me, it is going to be very difficult for you to crack the interview process in the top companies without your painstaking experience of solving problems, for hundreds of hours cumulatively. 

But maybe you are a developer for some years now and you have to switch your job very soon. If you do not target your dream company now, it may take you another 2-3 years to apply there. If you are in this situation, then I will say that you may skip this phase (but still, try to allocate few months of your time going through this phase if you have no experience of solving problems competitively at all) but this will imply that you will need to work significantly harder in the next phases (especially in phase 2). And start building your network right now.

Preparing for the battle

This phase will start when you are seriously considering applying for your dream company(ies) and will end when you actually apply. This phase should last three months ideally, but you can squeeze it into two months (or less maybe?) with hard work and dedication. 

In this phase, you should prepare yourself with a very clear target in your mind. Make a list of materials you will study and exercise and set clear dates to complete each one of them. Your list can include the following materials:

  • If you have not read the book “Cracking the Coding Interview” by Gayle Laakmann McDowell yet, I shall highly recommend you to read this book. If you have previously read it, I shall insist that you go read this book again now. Study each chapter thoroughly. Try to solve the practice problems. Write down your solutions in a paper (if you cannot manage time to write down the whole thing, write with keywords), and then compare it with the solutions provided in this book. For most problems, this book provides several solutions. You should study all the approaches because it will allow you to think differently and will be helpful to solve new problems you face.
  • If you do not have an account in Leetcode, now is a good time to open an account and start solving “top interview questions”. Leetcode is a good place to practice problems for the interviews and give you a familiar environment for the code tests and phone screenings. Try to solve at least one hard problem, at least three medium problems and as many easy problems possible daily. If you complete the top interview questions, start solving other collections as well. After solving each problem, make sure to read the discussion section to get an idea about other approaches to solve the problem.
  • If you have a few years of experience as a software engineer, you should expect to face some questions about system design. System design questions are difficult to answer if you are not prepared to face this type of question. There are some good resources online to prepare for system design interview questions. One very good example is the “Grokking the System Design Interview” course. I recommend you to go through as many chapters of this course as possible.

Applying for the job

The real deal begins when you apply for the job. 

You may be wondering where to begin. Most of these big tech companies have their career websites where they have opening positions broken down into locations and experience levels. if you browse the website you will be able to find suitable openings for yourself.

You should keep in mind that thousands of people apply for the company you are targeting. A technical recruiter reviews hundreds of resumes per hour. So they basically spend only a few seconds with your resume. Therefore it is extremely important how you are applying for the job. you may consider yourself lucky if you get called for an interview after applying. But you can do a few things to increase your chances of getting called for an interview. I would like to point out two of these things. Number one preparing a good resume and number two getting referred by someone already working in the company.

You can get some useful tips about preparing a great resume for yourself in this link. It is also a good idea to get your resume reviewed by someone experienced with the recruitment process. You can book time with me to review your resume/CV following this link: Get your resume reviewed by Tareq.

The second most important thing is to getting referred. Your chances of getting a call back increase significantly when someone inside the company refers you for a position. Use your network you have built in phase one and request them to refer you for the position of your liking. They can provide you valuable insider information as well which will be significantly useful during the hiring process.

Preparing for the code tests and phone screening

So now you got a call from the recruiter who asks for a suitable time for you to talk. Congratulations you passed the first barrier.

In most cases, the first (virtual) meeting with the recruiter is a very trivial one. He or she may ask a few things to verify the information in your resume and to assess your experience level. If he or she is satisfied you will get a schedule for one or more code tests or phone screenings or both. The schedule will depend on the company you are applying for and the position you are applying for. If you are practicing in Leetcode regularly you will find the code test very similar to your daily activity. You will have one to three coding problems to solve in a given amount of time. In most cases, you will have a chance to do an optional mock test which I shall advise you to take to understand the environment properly.

You can feel the urge to complete the code test as soon as you receive the schedule. Or you may want to do it at the last minute so that you can have enough time to prepare yourself. But importantly, you should choose a time for your code test when you know that you will not be disturbed by any outside event and you can focus completely with a cool head.

The phone screening is a person-to-person interview. Normally it should last about an hour. You will be given one or two problems to solve, have a few questions about your work method, management, or leadership skills and you will have some time to ask one or two questions to the interviewer.

One important thing to keep in mind here is, the interviewer’s main target is to figure out if you’ll be a good match in their team. Demonstrating that you are a good team player and can collaborate with others is important. So being communicative and vocal about your thought process during solving the problems is a good strategy. You must express yourself what you’re thinking while solving the problem. So basically thinking loudly. Be aware of the available time for your solution. To be safe, quickly formulate a brute-force solution and then work on your optimal solution. It will take some pressure off you.

Doing some mock interviews with someone with experience in the recruiting process can help you at this stage. Mock interviews will make you more confident for the actual interview and by doing mock interviews, you will also find out the areas you need to improve and work on. You can book an hour with me for a mock interview following this link: Mock interview with Tareq.

Preparing for the onsite interviews

If you do well in the phone screening interview, you will get a call from your recruiter informing you that they are willing to arrange a trip for you to one of their offices to interview you onsite.

Congratulations! Whatever happens next, this is great progress to have. 

You will definitely not like to lose such an opportunity easily and you will want to be prepared for the onsite interviews as good as possible.

The format of the onsite interview is normally similar to the phone screening interview: 

  • A five minutes introduction.
  • 45 minutes problem solving and behavioral questions (this can include one or two coding problem, a system design problem, few behavioral or leadership questions)
  • 10 minutes for you to ask your questions.

The format can vary based on the company and the position you have applied for. 

In general, there are 4 to 6 interviews starting from the morning and lasts until the afternoon. One of the interviews can be over lunch and this is a relaxing one and not included to judge you. One of the interviews can be significantly more difficult than the rest others and this one is in general known as a bar-raiser. Doing good in the bar raiser can give you a chance to get a much better position and salary if you get an offer.

In general, you will get a few weeks to prepare for your onsite interview. I will suggest the following things for your preparation during this short but very important time:

  • Make a plan for how you are going to spend this time on a daily basis. Schedule your study and exercise and keep track if you are following your schedule successfully or not.
  • Study “Cracking the coding interview” book again in this period.
  • Go through the system design course, study each chapter. Keep a notebook for writing down the key points and the figures and sketches of the system for each design problem. This will be extremely helpful to revise efficiently.
  • Solve a few Leetcode problems every day. Try to solve hard and medium problems mostly. Most importantly, write your codes on the whiteboard. In the onsite interview, you will have to write code on the whiteboard (most likely). It is very difficult to write well-structured code quickly on the whiteboard if you do not have enough practice.
  • Study the “STAR” method for behavioral questions solution. Prepare an Excel sheet with STAR method solutions for as many behavioral questions as you can find or think of. Practice talking about these situations in front of a mirror.
  • Your recruiter is likely to provide you a list of things to study. Do not get overwhelmed if the list seems a lot. Select a few topics from the list, and have some idea about them in your relatively relaxing time.
  • Try to do mock interviews with your friends. Trust me, this will help immensely. As said earlier, you can book an hour to do mock interviews with me here.
  • Try to keep the week before your onsite interview for revising all the things you have studied so far. 

In this revision week, fly through the CTCI book once more, system design problems, and your solved Leetcode problems.

The onsite interview

Normally the company will schedule your flight after discussing with you. If possible, try to arrange a flight in such a way that, you can spend the afternoon before the interview day in the city where the onsite office is situated. Finish all your study before you start your journey from your home country (or city). You can have some printouts or notebooks, like the system design sketches and key-points, the behavioral questions sheet. If you have a long flight, I will suggest you to go through these notes while you wait for your flight, so when you reach the destination city, you can observe the city life there with a relax mind.

The companies we are discussing are most likely to arrange your accommodation is a very good hotel. You should relax in the room, have a calm walk in the city, and relax as much as you can. Have a good diner, ask the hotel reception to arrange a good ride for you to the office the next morning, and have a good night’s sleep. On the day of the interview, wake up early with some time in hand so that you are not hurried to get ready. Have a good breakfast and reach the office on time. 

When it is time for the actual interview, try to be confident. You have prepared hard for this moment, do not let your nervousness ruin this moment. As you are invited to this office, consider that you belong here and you are already working in this office. When a question is asked, consider it that a coworker is asking for help from you and you will do your best to explain the solution to him/her. This technique will change the whole gameplay in your head and you will actually feel better doing the interview instead of panicking. 

It is totally okay to struggle with one or even all the questions. Go ahead and talk about what you think about the problems. To the interviewers, your thought process and being a team-player is the most important thing to observe. Show your best co-operative face to them.

Final words

I understand that, even if you do everything I just wrote, you may not end up getting an offer from your target company. But trust me it is not the end of the world. A lot of engineers in these top companies have succeeded in their second or third attempts. And a lot of engineers, who never managed to be in the FAANG, have an equally fulfilling and successful career. 

But I do believe that, if you can prepare yourself well enough in the process I explained, you are most likely to get an offer and actually a very good offer from any of the companies, even if you are a very normal or regular guy. And soon, the other normal guys will start considering you like a rockstar.

Leave a Reply

Your email address will not be published. Required fields are marked *