How I Landed Offers from Facebook, Google, Uber, & Microsoft as a Software Engineer

Published: July 21, 2020
By Anthony
12 min read
How I Landed Offers from Facebook, Google, Uber, & Microsoft as a Software Engineer

I still remember applying to Facebook every year and getting rejected and how bad I flunked my interview with Google during my senior year of college. Well good news is that studying actually paid off because in I had the opportunity to interview with some of my dream companies back in 2017. I interviewed with Microsoft, Uber, Facebook, and Google and I received offers from all of them. I had actually so many interviews lined up that I ended up not proceeding with most of the companies like Apple and Amazon. I wanted to share my experiences, my study routine, and my thoughts on each company in order to help you guys join your dream company.

Preparing for Your Next Job

One big was surprised transitioning from intern life to full time was the difficulty in the interview questions. I honestly was not prepared for that when I interviewed for companies my Senior year of college. From my epic failures, I learned that I needed to prepare weeks in advance instead of days. As a Software Engineer with a full time job, I found it really difficult to find time to prepare. Back when I was working at Intuit, I typically worked from 9am - 7pm. That only gave me around 3 hours to prepare during the weekday. To compensate for this, I spend my entire weekend just studying.

Updating your Resume

Let's start with the first step which is to update your resume. Here are some tips to update your resume.

  1. Save your current job description. These job descriptions have a pretty good rundown of your responsibilities and skills. They also have a lot of keywords that recruiters look for. You will want to have these keywords on your resume since resumes get filtered through a system that looks for those keywords.
  2. Show off business outcomes when possible. Metrics like "I created feature x which increased engagement by y%" are nice to haves.
  3. If you're a front end/full stack developer, having a portfolio is a nice way to show case your skills. Here's a good example of a portfolio. You don't need to spend a single dollar on it if you use Github Pages. Here's a guide on setting up your website on Github Pages for free.
  4. Only put down achievements you accomplished. If an interviewer asks about an item your teammates did and you cannot answer, it's usually a red flag.
  5. Similarly, only list projects you're comfortable explaining to a nonprogrammer. If you can't explain the project in simple terms, then it might come off as if you don't understand what you created.

How to Study for Technical Interviews

There's a lot to study for the technical interviews. You gotta brush up on algorithms, system design, and whiteboarding skills. I started my adventures on Codewars which similar to LeetCode, but has a lot easier problems to start with. This helped refresh my memory on basic algorithms and solving basic interview questions. I also shared a LeetCode Premium account with my friend. My favorite part about LeetCode Premium was it shows topics and types of questions some companies like to ask. This can help you target your studies towards your dream company better. Honestly, $35 a month isn't that much in comparison to how much you'll make once you work for a FANG company. I only studied for 3 months so that only came out to be $105.

In addition to LeetCoding, I read a couple of books to refresh on basic algorithms. I noticed I got really distracted whenever I read books or pdfs on my computer, so I found myself checking Reddit or Facebook every couple of minutes. Since you'll only have 3 hours to study I suggest getting a physical copy or buy a dedicated e-reader. This really helped me focus since I wasn't tinkering on my computer with multiple windows open. Here's the list of devices and books I used.

Here's some of my tips and tricks that I learned along the way.

  1. Purchase a whiteboard to practice on. Coding on a whiteboard is a different experience compared to coding on your computer. You can't easily copy paste code nor can you run your code. Practicing on the whiteboard has helped me practice jotting down all my ideas before starting the implementation.
  2. Repeat problems that you couldn't figure out the first time. In fact, I would recommend redoing problems you couldn't figure out two weeks later. This helped me solidify that I understood the concepts rather than memorizing the problem.
  3. Check other people's solutions. I picked up a lot of elegant coding practices just by looking at other people's code.
  4. Use a "short" language. What I mean by short is something that isn't verbose. I used ES6 for all of my interviews this time. I really liked how I didn't have to define my types and write unnecessary code like "public void doSomething()" just to define a function. Plus you have limited space on a whiteboard.
  5. Start studying with the fundamentals. Avoid the tough stuff until you're comfortable with the bread and butter.

Of course theres a billion things you need to study, but here's a list of the main topics I focused on.

  • Arrays
  • Linked Lists
  • String Problems
  • Stacks/Queues
  • Graph Theory (DFS, BFS, Dijkstra)
  • Trees
  • Sorting Algorithm (Good to know one O(n^2) algorithm and one O(nlogn))
  • Greedy Algorithm (Most of them follow the same pattern, so just understand one really well.)
  • Dynamic Programming (I didn't spend much time on this area since I found this topic hit or miss.)

System Design

These problems tend to be open ended. The interviewer gives you some sort of scenario or a real world problem and will ask you to "design" it. I usually start by listing out use cases. Let's say the interviewer asks you to create Youtube. There's a lot of parts of Youtube so just list all of them that come to your mind. Once you have all those features, I would start eliminating features that are not part of "core" features.

I actually learned how to answer System Design questions by watching Youtubers walkthrough some problems. Here's a video that I found pretty helpful.

The Phone Interviews

The Recruiter's Phone Interviews

After applying to a company, a recruiter will email you to chat. Usually your first phone calls is a non-technical interview with a recruiter. This call is mainly to find out your availability for interviews. Depending on your situation, you can tell the recruiter one of the following:

  • You're currently not looking for a new opportunity.
  • You're interested, but you'll need some time to prepare.
  • You're interested and you're currently interviewing with other companies.

The last option tells the recruiters that you need to interview with their company as soon as possible and potentially skip the phone interview. I actually skipped the phone interview with Google because I told my recruiter I already had onsites scheduled with Facebook, Uber, and Microsoft.

The Technical Phone Interviews

All of technical phone interviews were more or less the same. You spend 45 minutes to 1 hour with an engineer to code up some problems on a Coderpad or a Google Doc. If you do well then you'll move onto the onsite. I would recommend starting phone interviews with companies you are least interested in first. That way you can practice and gauge how well you're doing. Also, since the interviewer can’t see you, it’s important to explain your thought process and how you plan to tackle the problem.

Here are some takeaways

  1. The recruiters want you to do well.
  2. Ask for as much time as you need. I asked Google, Facebook, and Uber for 3 months to prepare.
  3. Start interviewing with your least favorite companies.

The On-site Interviews

On-site interviews vary company to company, but for the most part, you and an interviewer interact in solving a problem on a whiteboard. Most companies have about 4-5 technical interviews and sometimes a System Design question depending on your level. These interviews are back to back with a lunch break in-between. While you don't want to eat too much, actually try out some of the food because if you join that company you're going to be eating their food for many years to come.

Don't start these problems by busting out code. Start by writing down all the ideas that come to my head. For example, if they ask you to get the top K elements of an array, just write down all the ideas that come to your head even if they sound crazy. This will also allow you and your interviewer to bounce ideas off each other.

Another trick I learned along the way is if you're unsure of the most optimized answer or an answer in general, start with the brute force solution. Once you figure that out, try to bounce ideas off with your interviewer.


Microsoft logo

I actually didn't apply to Microsoft. Rather Microsoft reached out to me for a hiring event. Instead of doing a phone interview, I had to complete an online coding assignment in an hour. After I finished the assignment, the recruiter reached out to chat and scheduled a date for an onsite interview. Microsoft flew me to Redmond and paid for the flight, food, and the hotel. I came in a day earlier to check out the city, visited common tourist areas, and I even stopped by the original Starbucks shop. ‪The next day, I came for the on-site, which had 4 rounds with each being 45 minutes long. I also had a System Design round.


Google logo

This was actually the 2nd time I interviewed with Google. The first time did not go so well, so I really wanted to redeem myself this time. Also, since I had other on-sites coming up and an offer from Microsoft, Google let me skip the phone interview.

I interviewed at the Sunnyvale site which is where their Google Cloud team is located. The on-site had 4 rounds with each round being 45 minutes long. They also have a Googler take you out to lunch at the Google cafeteria after the 2nd interview. I would say this was the hardest of all my interviews. I heard Google has a behavioral round to gauge your Googleyness now, but I didn't have one of those.

After you finish your interviews, the interviewers submit their feedback and it goes into a packet for a hiring committee to review. If they give the thumbs up, then you start the project fit calls. These calls are pretty informal where you and a potential manager chat about the team and what you want to do. After these calls, you select one of them that you're most interested in.


Uber logo

Uber has a couple of offices with some in Palo Alto, but their main HQ is in SF which is where they conducted the interviews. But thankfully, Uber was considerate enough to provide me with $200 of Uber credits so I didn't have to worry about driving to SF and back.

Uber's on-site consists of 3 technical rounds and 2 behavioral rounds. They allowed me to bring my laptop and code out their coding questions on my device. I really enjoyed this since it felt more practical. I also liked having 45 minutes to just talk with the manager and a cultural bar raiser. The cultural bar raiser is someone at Uber who isn't on the team I'm interviewing for. Talking to him gave me an opportunity to learn about what others thought about the company. It felt like they really value culture fit as much as technical prowess.


Facebook logo

The interview took place at Building 10 inside of the Classic campus. Facebook's campus has the biggest wow factor. Seriously, Facebook Classic is amazing. I seriously felt like I just walked into Disneyland. They literally have everything on campus including a sweet shop, a health center, a Phillz, a barber shop, an arcade, pop up shops, and way more that I have not covered. Check out some pictures here.

So the interview was pretty long consisting of 5 rounds. I had 1 system design question and the rest were all coding questions. Each interviewer asked about two coding questions.

Negotiating the Offer

I would recommend scheduling all your interviews as closely as possible. It will make negotiating a lot easier since you'll have most of your offers at the same time. The key to negotiating is having more than one offer. Having patience is also important. Recruiters will try to pressure you to accept an offer as soon as possible, but you can tell them you're still waiting to hear back from all the other companies to buy some time. Once you have all your offers, you can use your offers to increase each other. For example, if company A offers you $100k and company B offers you $120k, you can use the offer from company B to increase the offer from company A. Generally big companies don't match offers from startups since their stocks are not liquid yet, but this strategy worked well for me regardless. One big mistake I made was giving out my expectations; if a recruiter pushes for a number, try to push it off. Offers usually consists of base salary, a targeted bonus, a sign on bonus, and equity. Targeted bonus is paid out annually based on your performance. If the target is at 15% and your base salary is 100k, then your bonus is 15000. Equity usually vests over a certain time period. So, the company may offer $10000 worth of stocks over 4 years and lets assume the stock price is $1 when you started. This means you have 10000 shares. However, you will only earn 2500 shares every year.

Links in Article

All products recommended are selected by our team. If you buy something through one of the links on this page, you'll be supporting our team to keep doing what they love.

Related Posts

Copyright 2020 © Mai Nguyen. All rights reserved.