I’ve worked as a software engineer at 2 FAANG companies, a media company, and 2 startups. Getting into these companies is a skill that can be learned, but you need to start with the right basic knowledge. I’ve attempted to boil it down to a set of guidelines that anyone can follow.
What is FAANG
FAANG represents a set of companies, which is typically Facebook, Apple, Amazon, Netflix, and Google. Some people extend this set to include other large companies, such as Microsoft. This post is intended to help anyone interviewing at any large tech company learn how to interview and find the position they desire.
Why work at FAANG
Working at one of these large companies has many benefits:
- Large scale: You could be making changes that affect millions to hundreds of millions of people. This can be rewarding as you feel like you’re actually making important changes.
- Culture: Each of these companies has a unique culture, so you can choose the one that you gel with the most.
- Pay/Benefits: These companies pay significantly more than non-FAANG companies. With experience and dedication, you can achieve much greater levels of compensation you would receive at a smaller company. Part of the pay gap is because most of these companies are in the Bay Area. You’ll find tech salaries very high compared to other areas in the Bay Area, NYC, and Seattle, but living expenses in these areas are also higher. However, I’ve found the higher pay and opportunities in these companies to far outweigh the living expenses. Over time you can earn multiples of what you would earn in smaller cities.
- Perks: There’s usually free or discounted lunch on site, commuter benefits, shuttles, and at some companies many other perks. These companies really want to make sure all of your life needs are taken care of so that you can focus your time on doing your best work.
- Stability: You’ll know your paycheck will arrive the next day and if there are layoffs or firings, severance is typically involved so that you’ll receive compensation while you find another job. This is a double-edged sword because it may take time at some of these companies to get rid of low-performing employees, but in general you will be working with great people at a well managed company.
- Name Recognition: Finding other opportunities later is easier since you have the name recognition of one of these large companies on your resume.
A degree is helpful and common, but not always a hard requirement
As an experienced engineer, I interview other engineers. Most people I interview have at least a Bachelors in Computer Science. A small fraction have a Masters and a PhD is pretty rare. Less rare than a PhD is someone with no degree or a degree in a different field. I find these people typically already have startup experience, are self taught, and extremely experienced/motivated. They’re a rare breed, but do exist. I think it’s a lot easier to get interviews and jobs with the Computer Science degree, but if you don’t have one, consider working at a startup and then transitioning to FAANG later. I’ve also seen people start with a degree in another field, such as Physics, and then transition into Software Engineering.
There can be some downsides
- Cog in the wheel: Sometimes you may be working on projects where you feel like you don’t have a large impact. There are so many people working in the company the part you’re working on may be very small in relation to the overall product.
- Politics: As with any large company, there can be politics that distract you from the work you love to do.
- Older technologies: Some of these companies can have a lot of legacy, poorly written code. The flip side to this coin is that at big tech companies people are typically pretty accepting of initiatives to rewrite projects to improve them.
Having the right level of knowledge for the job
It’s very important to start with the right level of knowledge in Software Engineering. This ultimately boils down to coding and learning as much as possible. Build as many real projects as you can and dive deep into every topic. While I’m working, I’ll Google search everything I’m unfamiliar with, read Stack Overflow, read blogs, read the docs, and dig into the source code of libraries and frameworks I’m using. One of the best parts of the job in my opinion is the time you have for continued learning.
Communication skills are very important. Even if you’re the most technically advanced candidate, you need to be able to effectively communicate your ideas and pass the culture interviews. Do practice mock interviews with friends (preferably in the industry) and while applying to as many places as possible, interview at as many places as possible! This will allow you to establish confidence in the process and improve with each interview.
The first company is always the hardest
Getting a job at your first company is the hardest. It’s a combination of skills and numbers here. Once you’re at the right skill and level in terms of tech and interviewing, you have to apply to as many places as possible through as many channels as possible. These channels include direct via the company website, LinkedIn Jobs, through a recruiter on LinkedIn messages, and direct referrals through friends. Spend a lot of time on a few applications for your top choices and then apply for as many companies as humanly possible without spending as much time on the applications for your secondary choices. There’s other websites, such as Indeed, Hired, Vettery, etc. Setup accounts and apply through all of these sites. Call and message any friends you have in the industry and ask them for a referral.
I got an offer from a large media company as my first job because I randomly called a friend of mine to ask him for a favor. He wasn’t available for the favor, but he asked me if I was looking for a job. When I said yes, he asked me to send him my resume. After I sent him my resume, I was contacted by a recruiter, went through the interview process, was made and offer, and accepted.
Once you have the first job, make sure you set up a good comprehensive LinkedIn profile and friend recruiters from other companies. You’ll have a constant stream of job opportunities coming into your inbox and all you’ll have to do to get started on your next opportunity is reply to your messages.
You will absolutely get rejected from companies. You have to stay strong and keep applying. Looking for a job is a combination of luck, skill, numbers, and hard work. You have to work hard to make sure you have the right skills and apply to as many places as possible for your first job to get as many opportunities as possible.
By constantly learning and diving deep on topics, you can be confident that you have the right education. Once you have this, it’s simply a matter of submitting enough applications to get in front of the right people and demonstrate your skills.
Getting rejected from these large companies is no big deal. I was rejected by 4 large tech companies and then accepted by 2 others. I’ve also received an offer at a company that previously rejected me, in which I re-applied. You’re usually allowed to apply to each company once per year - keep applying! Because there’s a luck factor involved, even if you’re a stellar candidate, companies may pass on you because of random reasons (e.g. interviewer is a great engineer, but not good at interviewing others). Don’t take it personally or try to make excuses about why they didn’t give you what you deserved, but rather focus on yourself and making sure you have the right skills and are conveying a persuasive argument that you’re the right person for the job in the interviews you have.
Submitting your resume
First make sure you have a good resume. There’s plenty of generic information online about this, so spend enough time on this important step. While listing education and work history, list the major projects you worked on and talk specifically about the part you did. Ensure you’re very knowledgeable about the skills you list on your resume because you will be tested on them.
You resume should be concise and preferably exactly one page. If you spend a lot of time on refining this, it makes it easier for the interviewer to know what topics to ask you about. You should list education, work experience, and skills. Make sure you spell and grammar check your resume so that you give off a good impression from the start.
Studying the coding problems for whiteboard coding
There are several tactics to this, so I’d recommend doing as many as possible and as often as possible:
- Study up on all the major algorithms: For this, I like the Design Patterns book.
- Study the problems used in interviews. I like Cracking the Coding Interview, but there are several books on this topic so choose the one you like most. A lot of people use sites like Leet Code, but I’ve never used sites like this. Before I interview I typically practice the problems in Cracking the Coding Interview. This book has been one of the single best sources of interview advice I’ve found.
- Practice coding on a real white board. If you don’t have a white board, use a piece of paper. This is a very important skill because you will be asked to code and diagram things on a white board in front of people. Some people like you describe things as you go and others don’t care and just want to see the solution. You have to use your intuition to gauge what the interviewer wants, and provide it to them.
- Whatever skills you’re experienced in, Google the interview questions for that skill and read sample answer. For example, if I had a Java interview coming up, I’d google “java interview questions” and study the questions and answers in depth. The goal here is to gain a real understanding of the topics and not just the superficial ability to recite answers you read online.
- The questions can be coding and systems design/architecture questions. Make sure you’re proficient in both of these areas and have practiced interviewing questions with them ahead of time. For diagramming, practice drawing architecture diagrams complex systems.
What to wear
What you should wear typically depends on the company, but FAANG is not very conservative. I typically wear jeans, a button down shirt, and nice shoes. When I’ve interviewed people I’ve seen anything from T-Shirts and flip flops to people wearing full suits. Both extremes can make people uncomfortable so I typically try to dress nice but not too fancy or laid back.
Practice, practice, practice
Practice coding, interviewing, people skills, and interviewing as much as possible! The more you practice the more confident you will become, and as you are more confident others will believe in you as well.
The interview process
There are many variations depending on the company, but the interview process is typically in the following process. Ensure you have a pre-selected list of questions to ask each person you speak with in the interview process. These questions can be about the company, team, culture, etc. It’s very important that if anyone asks you if you have questions that you respond yes and ask 1-2 questions to show that you’re interested in the role.
- You submit your resume to the company or get referred internally by a friend/colleague
- A recruiter reaches out to you to set up a phone call
- Send the recruiter your availability for the next 1-2 weeks. I send them specific days and time ranges to avoid the back-and-forth of times not working.
- The recruiter will set up a call with you and them. When they call you, they typically asks about skills, interests, and sometimes compensation requirements. They will set up a phone screen with the hiring manager.
- The hiring manager is typically a technical engineering manager with a team. In some companies, this person makes the ultimate decision on whether to hire you and in others they rely on a committee’s advice. The hiring manager will call you and talk to you about interests and try to figure out if you’d be a good fit for the team they’re trying to build.
- If you pass the manager phone screen, you will be set up with an engineering phone screen. This will be a technical phone screen to make sure you have the right engineering skills. I’ve seen many variations on this which have included the following: CoderPad live coding exercise, chatting over the phone about technical questions, coding on Google Docs, and a take home technical exercise.
- The engineer interviewing you for the phone screen will give feedback to the hiring manager along the lines of pass, neutral, or fail. If you pass, you will continue to the on-site interviews. If they are neutral, they may bring you in, tell you that they are not continuing the process, or have you go for a second round of technical phone interviews. If you go for the second round of technical phone interviews, it will be very similar to the first, except that it will be with a different engineer.
- The next stage is that they will bring you in for on-site interviews. These are typically 3-8 hours. You’d typically have a schedule for the day with several interviewers and possibly lunch. Each set of interviewers would interview you for 45 minutes to 1 hour. These interviewers are typically 1 or 2 people at a time, but in rare cases, you may experience a “panel” of many engineers and/or managers. This can be pretty intimidating, but just stay confident and happy.
- Once most of the managers and engineers have interviewed you, you may be interviewed by Directors/VPs. Typically if you get this far it means you passed the past stages, as they wouldn’t waste the time of a Director/VP with someone they didn’t want to hire. These interviews are typically less technical and to make sure you are a good culture fit, but at some companies they can be technical as well.
How to get the best offer
Never mention salary requirements ahead of time. When a recruiter asks me for salary requirements, I give them a vague answer about how I’m interviewing at several places and I’m looking for a competitive market rate. If they push harder, I keep deferring the question as much as possible. Ensure you are applying to enough places that you have multiple interviews at once. This will give you leverage so that you can have competing offers. Once you have multiple offers, you can tell them about your other offers and ask them for a higher salary and/or stock compensation. With most of FAANG it’s typically easier to negotiate stock than salary, but try to negotiate both. I’ve heard that people can negotiate other benefits, e.g. vacation days, but I’ve never been able to successfully do this myself. The most success I’ve had in getting offers increased is by having other offers on the table. I’ve gone as far to tell recruiters I won’t accept at the current offer of “X”, but if you could get the salary to “Y”, I would accept. This is a last case ultimatum and I’ve ultimately only done it when I truly felt the compensation was wrong and the last thing holding me back.
Figure out what the next steps for you are and write them down. Spend all of your time intently focused on reaching those steps. Make sure you’re in an environment with the least amount of interruptions so that you can get as much done as possible. This will allow you to “level up” in your own skills. The skills needed here are technical, communication, and interviewing skills. Feel free to DM me on Twitter at @daringdanz if you need any individualized help!