So you want a software engineering job at Facebook/Apple/Amazon/Google/Netflix? Get in line.
It’s every software engineer’s dream to work with one of the top technical teams in the world. Not only do you get the prestige of adding one of the famous FAANGs to your resume, but also the invaluable experience of working alongside people building the world’s most-used technical products.
So how do you get a software engineering job at one of these companies? That’s what we’re going to answer here today.
First, let’s get a few hard truths out of the way. No matter how good you are, how much prior experience you have, or how big your network, landing a job on a top technical team is no small feat. At Google alone, more than 2 million people apply for positions. 5,000 get hired. Oh, and that’s not to mention people already working for the company who want those open positions. At best, that leaves your odds at 400/1. But just like any long shot, the payoff is huge if you do win.
So if the odds don’t put you off we’ve gathered information from recruiters, managers, and software engineers at major tech companies to uncover the secrets of landing a top software engineering job from where to find openings to how to show you’re the right person for the job, land and nail the interview, and get an offer.
How to become a Googler according to Google. It’s a bit more of a process than this! ;)
Step 1: Are you ready to apply for a top software engineering job?
Before you start searching job boards and dusting off your CV, you need to be able to honestly answer the question: Are you ready?
Applying for software engineering jobs is a job in itself. And timing and effort matter. At a minimum, if you’re going after a job at one of the world’s biggest companies, you should have a few things ticked off your list:
- Can you do the job? In other words, are you proficient enough in coding and software development to be a true contender for one of these jobs?
- Can you show that you can do the job? Do you have projects or past work you can point to that illustrate your abilities?
- Are you confident in your skills? Not just in coding, but in being the kind of software engineer that gets hired by one of these companies? (We’ll get into what that means in a little bit).
Bond those minimums, there are a few common questions you probably have:
Self-taught vs. school: Do top tech teams really care?
Do the top tech companies in the world only hire 4.0 GPAs from the best schools in the world? The short answer is no. While many companies actively recruit from certain schools, that’s not the only place where you can get a job.
As Kaewe Block, a recruiter for Google explains, they’re hiring people, not machines:
“Don’t assume you’re unqualified on the basis of your educational, professional, or personal background and decide against applying (or, for that matter, let self-doubt get the better of you when you do show up for an interview). Trying to land a competitive tech job is daunting, but it’s only impossible if you don’t compete.”
In fact, Google and other companies don’t even look at GPAs to determine if you’re a candidate or not. Instead, they’re looking for real-life experience, regardless of how or where you learned to code. That means experience at hackathons, coding competitions, or programming assignments at work.
Don’t assume you’re unqualified on the basis of your educational, professional, or personal background and decide against applying or, for that matter, let self-doubt get the better of you when you do show up for an interview.
What software languages should you know for the job you’re applying for?
As Planio CEO, Jan Schulz-Hofen explains:
“A solid foundation on IT/CS basics is indispensable for anyone looking for a top software engineering job. As an employer, I am seeing too many applications from people who self-taught just one programming language that's "en vogue" but don't understand the concepts behind it. Generally, this approach doesn't take you very far in my experience.
A good software engineer doesn't care if it's Python or NodeJS, she understands programming as a concept and learns every language in a matter of hours/days.”
While it’s important to have a deep understanding of the tasks you’ll be expected to do for the role you’re applying for, companies want to hire smart, well-rounded engineers. The narrower your field of expertise, the narrower your options become.
I am seeing too many applications from people who self-taught just one programming language that’s “en vogue” but don’t understand the concepts behind it. This approach doesn’t take you very far in my experience.
Step 2: Build your resume and portfolio — How to better your chances by showing top tech teams what they want to see
Alright, you might think you’re ready now. But you’re not. Not yet at least.
In a 2012 study, researchers found that users judge a website’s perceived functionality in 1/20th — 1/50th of a second. Unfortunately, your portfolio and application get almost as snappy of a judgment.
In fact, most recruiters spend just 6 seconds on an application before moving it to either the “no” or “maybe” pile. So how do you catch their attention with your work? You work with people’s short attention spans.
That means no long, drawn-out introductions or essays on what it means to you to be a software developer. Forget the cute story about the first time you used their app/product or how it’s always been your dream to work for them. Instead, treat your portfolio like your Greatest Hits album. All killer and no filler.
First, let’s talk about your resume.
According to Twitter software engineer Zhia Hwa Chong—who wrote about his own experiences getting offers from pretty much every major technology company out there—your resume needs to be short, concise, and easy to read.
Recruiters and hiring managers go through hundreds of resumes a day. The quicker you can show them what they want to see, the better your chances. More specifically, you should follow a few golden rules:
- Be consistent in your font types and sizes, tense, and design (remember that humans judge things in a fraction of a second. You might be a developer, but when it comes to your resume, design and language matter.)
- Break it up into relevant and commonly used sections like Work experience, education, skills, and projects.
- Briefly explain why you’re suitable either in an additional cover letter or in a summary at the top.
- Use numbers and keywords to show quantifiable results. If you scaled a website from 100 daily users to 10,000 tell them that. If you know Python and React, say that (and skip the qualifiers. No one needs to know you’re “good” at one language and “great” at another).
- Only highlight just 2-3 projects you know front-to-back. You don’t need to list everything you’ve ever done or every class you took in University. Pick the hits and leave the rest for the interview.
- Resist the urge to pepper in buzzwords and fluffy language. Use buzzwords at your own peril. You’ll be expected to show your expertise in them, not just the fact that you know them.
- Use a PDF. No, seriously. PDFs will render the same regardless of what reader your recruiter is using.
Think of your resume as your elevator pitch. Its job is to get your foot in the door. In that sense, you want to use it to tell your story—your experiences, challenges, and successes. If you want an easy way to do this, here’s how Hwa Chong describes his process:
“A good mental exercise I use is: if I only have 60 seconds to pitch someone on why they should hire me, what would the pitch look like?
I then work backward from there and expand on the things I’ve done in order to drive home my pitch. An example would be:
‘I’m a backend software engineer who is highly driven and well-versed in RESTful architecture. I built highly scalable web apps that scaled to over millions of users and drove the product vision for my company.’
The points I want to drive home here are:
- Backend engineer
- RESTful architecture
- Product visionionary
I would then curate my résumé to center around those four pillars.”
Zety.com has some more inspiration on how to write your resume including right/wrong resume examples.
How to build a portfolio site for software engineering jobs
You’ll also want to spend a bit of time crafting a simple portfolio site.
This isn’t just a hosted version of your resume, but a chance to show off some of your most impressive projects. Like your resume, your portfolio should be simple, clean, and easy to understand and navigate.
Include your basic information like your contact information, elevator pitch, and experience, and then showcase the work you’ve done. Try to show the breadth of your experience and interests. Sure, work projects are powerful to show but consider side projects or any open source projects you’ve been a part of as well.
This is your chance to expand on the projects you listed in your resume and also show a bit of your human side. (Remember, people hire people. Not coding machines).
You can host your portfolio somewhere like GithHub Pages with a vanity domain (www.your-name.com).
The million dollar question: What if you’re a new grad?
What if you don’t have any experience to show in a portfolio or resume?
It’s the classic Catch-22 of job hunting. And while it’s not impossible to get your first software engineering job at a top company, it does take some finessing.
Showing that you can do things in practice, either by running a side project or contributing to open source projects is a major boost. Here’s former Google engineer Peter Locke talking about getting his first job at the company:
“What [my hiring manager] found on my résumé that he was really impressed by and really stood out, was the fact that I had done a project with a team… And that it was working and running. (This was also one of the only two projects that I had on my resume.)
It shows not only that I’m able to deliver a project and keep it running and keep it live while having a user base, but also that I can work with a team and resolve arguments… That’s literally what you have to do day in and day out when you’re working with these companies. So if you can show that, it will come off as amazing.”
The experience that gets you noticed by a hiring manager or recruiter doesn’t have to just be from a school, internship, or company. In today’s world, there are so many ways you can prove you have what it takes to get hired if you’re creative.
Step 3: The search – Where to find software engineering jobs worth applying for and land an interview
You’re mentally prepared for the battle ahead. You’ve got a resume and a portfolio that any recruiter would salivate just looking at. Now, where are the jobs?
One of the most difficult things about landing a top software engineering job is that not every company wants you to apply. In his book, Work Rules, Google’s former head of People Operations, Laszlo Bock, wrote that
The odds of hiring a great person based on inbound applications are low.
You can probably understand why.
Recruiters at Google, Apple, Facebook, etc… aren’t waiting with bated breath for you to cold email their
email@example.com account like every other wishful candidate. And you can be sure that any open positions listed on their site are attracting more than a few people similar to you.
So while applying to online job listings isn’t completely a lost cause, it’s not the best use of your time. Instead, the strongest way to get an interview at any company is through a referral.
According to the recruitment website Jobvite, 40% of hires come from referrals (the next largest channel is via career sites at 21%). While referrals get hired in an average of 3 weeks compared to 7 weeks for other applicants.
But I don’t know anyone at Amazon/Google/Facebook?
Maybe you don’t. But that doesn’t mean you can’t get a referral if you follow a few simple steps:
Find software engineering jobs online and use listings to create a “job wishlist”.
Use LinkedIn to identify influencers or connections at those companies.
Research, reach out, and ask for a referral.
Step 1: Where to find software engineering jobs online
Pretty much every major company will have a jobs or career page you can find on their main site (or by searching “[Company name] careers” in Google). However, a lot of fantastic companies also list jobs on recruitment sites like Lever.co, Greenhouse.io, or AngelList.
To find jobs listed on these sites you can use a simple search formula:
(site:<recruitment site 1> OR site:<recruitment site 2> [OR ...]) "<job title>" "<location>"
For example, let’s say I want to look for frontend engineer jobs in LA. I could search:
(site:jobs.lever.co OR site:boards.greenhouse.io OR site:angel.co) frontend "los angeles"
The point isn’t to apply to these jobs, however. Instead, you’re using them to research companies and put together your own “job wish list”.
What’s a job wish list, you ask?
Your wish list is exactly what it sounds like: the details of your ideal position including company, title, team, and even potential location (or remote). Companies like Google and Microsoft are massive, and simply searching for a “software engineering job” is going to leave you with too many options.
For your best chance of getting hired, you need to find the perfect role for your experience.
Step one in this process is to do research on existing job postings to answer a few questions:
- What are the titles and roles that match up with your interests and skills?
- What language do they use to describe what they’re after?
- What specific skills are you missing or need to brush up on?
- Are these positions mostly remote or in person?
- What team would you be on and who would you report to?
Step 2: Use LinkedIn to identify influencers or connections at those companies
Now that you know who’s hiring, for what positions, and on what teams, it’s time to start building connections.
Let’s say you’ve discovered that Facebook is hiring a Junior backend engineer on a team you’re excited about. Your goal is now to find someone in a position above that role to connect with, either a senior developer or a team lead.
And the best way to find those people? LinkedIn.
Head to your account and search for “Job title + company + location.” You already know what you’re searching for from the previous step.
Once you find a suitable person, it’s time to get their contact info. Occasionally, you’ll be able to contact them directly through LinkedIn. But if not, you can always try an email finder tool like Hunter.io or Voila Norbert.
At this stage, you might find you already have a contact working at that company. In this case, great! Reach out and see if they can help you or connect you with someone who can.
Step 3: Research, reach out, and ask for a referral
Now comes the hard part. Your “target” needs a good reason to answer your cold email. And “I want a job at Facebook” isn’t one.
Do some basic research on LinkedIn to see their job history and path. Check to see if they write on Medium or Quora and are interested in specific topics. Do a little social media stalking to understand their interests. (Yes, it feels weird, but most people expect you to do a bit of research on them. In most cases, if it’s easily found online, it should be considered fair game).
Use that research to craft a quick message explaining who you are, showing that you know who they are, and asking for a few minutes to ask them a quick question about their role/project/whatever you’ve found that you connect with. Keep it simple. One study of C-Level executives published in Fast Company found that 66.7% will reply to an email with the subject line “Quick question”. So try that to start.
Use this as a framework, but make it personal. And don’t mention the position. Not yet, at least.
(There are lots of resources out there that can help you write cold emails people will respond to. But when in doubt, go basic. Everyone loves talking about themselves and sharing their expertise. So skip the quirky guilt-trips and go with something authentic and excited.)
Once you’ve made contact, you can follow the advice of Cultivated Culture founder Austin Belcak:
- Ask for a meeting (in-person or Skype/Zoom to build a connection)
- Prepare questions that dig into their career path, role, or expertise
- Ask them “what’s the biggest challenge your team is facing?”
- Do homework and try to find a solution to their problem
- Follow-up with a thank you and show what them what you’ve created
As Austin explains:
“It’s very important that you do not mention the open position in any of your emails or the proposal. Be patient and wait for their response. When they do get back to you, they will not only bring up the opening but they will ask you if you’re interested. Kindly accept and play it cool. You’re in!”
Recruiting events, In-person meetups, and other ways to get an “in”
If this feels like too much work, or it isn’t your personality type to reach out to random people at a company, there are other ways to make connections. Search for recruitment events, job fairs, or in-person meetups in your area and use them to build connections.
Just remember, for bigger companies, you usually won’t find people in top influential positions at these events.
Step 4: The interview — What to expect, how to prepare, and what to do afterward
What your referral gets you is a foot in the door and a chance to prove you’re worth the company’s time. Next comes the interview process.
While this will differ from company to company, most follow a similar pattern:
- Phone screeners
- Technical interviews
- On-site interview
Let’s start with how to prepare for the process itself and then dig into what to expect at each stage.
Preparing for your interviews
Interviewing is a skill in itself. Each step of the process is designed to weed out people for a different reason, whether cultural or technical. The more you practice and prepare for each stage, the better your chances are of moving forward.
As Twitter engineer Zhia Hwa Chong explains, getting a software engineering job at a top-tier company comes down to 20% resume, 20% research and 60% interview preparation.
So how do you prepare? There are a few places you should focus on.
- Know what you’re great at (and where you need work): Be honest about your skills, where you excel and where you might want to focus more energy.
- Do some basic online challenges: Use sites like LeetCode, Cracking the Coding Interview, and Top Coder to familiarize yourself with testing interfaces and make sure your skills are dialed in.
- Listen to the way people at these companies talk: Get to know the company and the team you’re trying to join as much as possible. Watch YouTube videos of talks and conference videos. Read blog posts. Check their personal social accounts. Use their language whenever possible.
- Do a mock interview with a friend: Get out the jitters and “umms” and “uhhhs” by going through classic interview questions with someone you trust. The more you talk through ideas, problems, and your own skill set, the better.
The first step of your interviewing journey is a simple phone screener with a recruiter or engineering manager. This is their first chance to talk to you, ask questions, and see if, at least on a high-level, you’re a good fit for the company.
But you’re not the only one going through this process. As Google’s former VP of People Operations, Laszlo Bock explains, for any open position, Google (and other companies) will be interviewing 100 people simultaneously.
So how do you stand out?
During the first call, they’re going to be looking for signs of four qualities:
- General cognitive ability: Not just raw intelligence or listing off facts and figures, but are you able to quickly absorb, understand, and build on information?
- Emergent leadership: When you see a problem do you step in and try to solve it? And, more importantly, are you able to step away when you’re not needed anymore? As Bock explains, “that willingness to give up power is really important.”
- Cultural fit: Do the company’s values and your own match up? This isn’t always about the things written on the wall, but about how you get along with other people. Can you work well with others? When the facts show you were wrong are you able to say you accept them and move on?
- Expertise: More bluntly, can you do the job they’re hiring for better than 99.9% of the people out there. Or, at least 99% better than the other candidates.
It’s important to understand that the order of importance matters here. The best companies in the world most likely won’t put up with an aggressive personality or single-mindedness just because you’re a pretty good software engineer. These companies are massive machines, and each moving part needs to do its part in order for them to keep growing.
Once you get through the initial screener it’s time to put your money where your mouth is.
“Why are manhole covers round?” “How many times a day do a clock’s hands overlap?” “How many golf balls can fit in a school bus?” Top tech companies used to be notorious for asking insane-sounding questions during interviews. Luckily, they crunched the numbers and found that (Surprise!) being able to answer absurd questions doesn’t make you a better software engineer.
Today, interviews for software engineering jobs follow a similar, tried-and-true method. This might mean “matching” with a team at the company you’re interested in working with and going through some technical problems with their engineering manager or lead. Or doing a team-coding exercise with one of their engineers.
As Google recruiter Kaewe Block writes:
“It goes without saying that engineers need to be able to code, so intensive preparation for the coding exercise–the centerpiece of every Google engineering interview–is a must. Candidates should be able to answer three coding questions from scratch (without the help of a library function) within 45 minutes.”
Kaewe also suggests practicing with a live person, whether they’re technical or not.
“Try going analog–use a whiteboard or a blank piece of paper,” he adds. “And focus in particular on algorithms and data structures. There are some great samples in Cracking the Coding Interview, Topcoder, and LeetCode.”
This, of course, will vary depending on the company, team, and role you’re after. But success comes down to this: Be confident and show you know what you’re doing, ask good, smart questions, and talk through your thought process.
It’s time to step up to the big leagues! If you’re still in the game at this point, you’ll be asked out to Dream Company HQ to go through additional interview stages and testing. At this point in the process, things are usually much more conversational as they dig deeper into your past and mindset to make sure you’re a good cultural fit.
Here’s what to expect during these interviews and how to prepare:
Nail the basics
Career coach Penelope Trunk explains that the most obvious questions are sometimes the most important:
“You will probably get questions asking you to show that you actually have the skills to accomplish the goals for the open position. Be prepared to give organized, rehearsed examples of how you have performed at work in the past in order to show your skill set.”
Know your past projects inside and out
One of the places you need to be able to talk about without hesitation is your past projects and experiences. As Hwa Zong explains in regards to his interview experience at Twitter:
“The interviewers will ask you in-depth questions about your past projects, and they’ll grill you on what you’ve done in the past. If you claim ownership of a project, you should expect some questions about it. You’re encouraged to use them for references and to bounce ideas off of.”
Be ready to go analog with technical questions
Not every company will ask you to run through technical problems on a whiteboard during your on-site interview. But some will. And if you’re uncomfortable breaking down your process, talking high-level or structurally, and showing your work visually, this will be a challenge.
As Facebook developer Andyy Hope writes, at a minimum you should:
- Learn to write code by hand on paper and a whiteboard first.
- Develop deep knowledge of data structures, their strengths and weaknesses in comparison to each other. As Hope writes, “I discovered that implementing data structures and their behaviors from scratch taught me so much more than what I knew from their abstract concepts.”
- Completely understand Big O notation for both time and space complexities.
- Grasp all major sorting algorithms.
Show you’ve got grit
One thing that came up time and time again from recruiters, team leads, and employees at major companies was showing you can stick it out when things get difficult. Think about ways you can show this quality in yourself.
- Have you worked on especially difficult projects in the past?
- Did you come up against a serious issue at a past job that you worked through?
- Have you been in a leadership position that required you to get through major hurdles?
Have a story or two prepared and try to work them into the conversation whenever possible.
Prepare for the hard questions about your career
Additionally, be ready to answer any questions about your resume or past positions like frequent changes, gaps, or short tenures at a company. Again, practice in answering these questions can offset any concerns they might have.
Step 5: The follow-up — How to stay top of mind and get an offer
Interviewing for a software engineering job at a top company isn’t like the movies. No one’s going to shake your hand vigorously at the end, pop champagne, and exclaim “You got the job!”
In most cases, you’ll be back home and left to wait while hiring committees go over your information. But this doesn’t mean you should be totally left in the dark. As career coach Trunk explains, an interview is all about selling yourself:
“Ask for decision-making timelines, and try to find out who is making the decisions. Don’t barrage the interviewer with questions in this regard, but the more information you have, the more able you will be to get yourself to the next step.”
While you might be tempted to reach out the next day, try to hold off. These processes can take weeks as they go from hiring committee to executive review to offer. If it helps, try to remember why you got the interview in the first place! As Google’s Kaewe says:
“It’s equally important is to keep a lookout for ‘impostor syndrome,’ certain high achievers’ tendencies to discount their accomplishments and fear being exposed as a fraud.”
Stay confident that they’ll come to you when the time is right. And if not, keep applying. As CS Dojo founder, YK Sugi, explains, he had to apply 5 times before landing his software engineering job at Google!
If you don’t get the job, try, try (and try) again
Landing your dream job at a major company is a job in itself. And there are no guarantees that you’ll come out victorious. But that’s the battle you have to be prepared to fight if this is your dream.
To give you the best chances of success, follow these simple steps:
- Make sure you’re ready to apply.
- Build your resume and portfolio.
- Find relevant positions and build contacts there.
- Prepare for and nail your interview.
- Stay calm and follow up.
The odds may be stacked against you, but every good gambler knows that you’ll never win if you don’t play the game.