An opinionated guide to getting a software engineer internship at FAANG
Warning:
This is probably very long, feel free to take breaks/ bookmark the article and come back later, etc.
This is also very opinionated and may not sit well with some people, oops sorry
Why I wrote this guide
There’s a lot of articles/ videos about how to get technical interviews in big tech companies. Most of them, in my opinion, are:
Insufficient; and
Unopinionated.
They usually assume you have a good resume that get you to the interview round, or that you have done 500 Leetcode questions (totally unnecessary), or something else. They are also usually too “vanilla” in their advice e.g. talk through your thinking process - everyone knows this!!!
Hence, this guide. It is a result of a lot of trial and errors, blood, sweat and tears. It also works - I have tweaked the strategy and method enough that I have seen really good results. I want to share it in the hope that it helps someone (and also when other people ask I can send them this article lol). Hope you find this useful.
Who this guide is for
People who want to get a software engineer (SWE) internship/ entry-level job at FAANG (or at least, 70% sure they want it)
People in school (freshmen welcome!) in the US
Because this is easiest when it comes to visa + the process I’m most familiar with, not sure about people in other places
People in coding bootcamps/ self-taught
People who have at least a 3-month runway before their application cycle (generally September every year for summer internship/ new-grad)
Who this guide is not for
People interested in data science/ data engineering/ product management
Some of it might still be helpful, but not all
People with a lot of experience doing SWE
People who are unsure whether they want to do SWE/ want it but is not committed
It’s simple, but hard work. If you are not committed, chances of you succeeding are a lot lower.
Why am I qualified?
I got 5 internship offers my junior year (Facebook, Robinhood, Tableau/ Salesforce, Brex, Intuit) and a few more final interview rounds that I end up not going.
I got a 100% conversion rate from interview to offer (all 5 companies that interview me extend an offer).
More importantly, I did not Leetcode before the summer, nor was I in any fancy internship/ fancy school names. My resume was pretty trash and I had to revise ~50 times before getting into interview rounds. Also didn’t make use of diversity program for second year (which in hindsight is pretty dumb), and didn’t code until my first year in college. I think I just had a solid strategy + hard work + consistency.
I really believe anyone can get a SWE internship if they put their mind into it. It’s actually pretty simple if you were to ask me.
Why SWE?
SWE is in such.high.demand. It’s kind of crazy how much it is needed everywhere. Even compared to other technical streams that a lot people are interested in e.g. data science, product management, etc. SWE is still in much higher demand, even for fresh graduates.
FYI: my current team has 15 engineers, 1 data scientist, 1 UI/ UX designer, 1 PM. So obviously, ratio of engineers needed : other function needed are very skewed, thus companies are hiring at a much higher rate.
SWE are highly paid. Fresh graduates that go to Google/ Facebook for SWE make $200,000+ for total compensation. Not to mention all the other perks (free food, insurance, relocation stipend, loan matching, etc.)
Especially if you are an international student who need visa sponsorship, SWE is easiest path for H1B Visa sponsorship. Also 3 years OPT. (If you don’t understand this, consider yourself lucky).
Transitioning from SWE to other functions is usually a lot easier than the other way around. E.g. you can do SWE then transition to PM, but hardly the other way around. So choose SWE if you are unsure which job function you want, because it helps you stay upwind and have more options later on.
SWE is future-proof. Very low chance of being automated.
SWE is really fun if you like problem solving. It’s like solving small puzzles every day!
Contrary to popular belief, SWE is not difficult. I want to emphasize this especially for BIPOC/ women, who think you cannot do STEM/ SWE because it’s too hard. I personally find that SWE is a lot easier than other functions e.g. Data science/ data analysts that people deem “easier”. It’s just that people usually don’t have exposure to coding before college, and so choose e.g. data science because they have statistics experience and think it’s easier and they are more used to it. But! You can definitely do it even if you just learn from college/ do bootcamps.
Overall, I would say the rate of return for doing SWE is very high (because you have relatively small investment and get really good results), and is very worth putting your time preparing.
Mindset
Before elaborating on my specific strategy, I think there’s a few mindsets that I adopt that makes the journey a lot easier.
Enjoy the process.
I will say it again and again - you need to learn enjoy the process. The more you can treat it as a learning and growing opportunity, the more you will benefit.
Broad framing.
Instead of thinking: “How can I get an internship in 2 months?” think - “How can I get a good job after I graduate?”. Too many people are dead focused on getting an internship that they forgot the broad framing parts e.g. taking a non-technical internship in the second year, wasting valuable time where they can be doing technical things instead.
When you stop thinking in terms of, “Oh, I need to get good at Leetcoding” and more “I need to be good at explaining my thought process, communicating with others and keeping my code clean”, the process will be a lot better.
Consistency triumphs volume.
Always value consistency. It’s better to do 1 question every day for 30 days than to do 10 questions in 3 days.
Time + deliberate practice = Progress.
Test, measure, learn.
Always try to improve the process. If you keep tweaking, you will find a working engine.
(FYI, none of this applies only to applying to internships).
Overview
To get a SWE internship, you need to:
Write a good resume
Send your resume
Do your online assessment
Nail your interview
That’s about it. Each of these things we can break down further, but as long as you do these components well, the path is pretty straightforward.
A good resume
Resume content
A good resume should first and foremost showcase one thing:
You can code.
That’s about it. Anything else that is on the resume that is not related to this information, while useful, will not be as relevant. You can lead 400 people in a charity that raises $100,000, but if you are applying for software engineering, that doesn’t matter until you also prove that you can code. Sure, you can argue that means you have leadership potential, you can communicate, etc. but all of that is dependent on you being able to code as a software engineer. So make sure to showcase that first.
How to show you can code, in order of preference (the higher the rank, the more valuable they are to the recruiter):
Previous internship experience directly related to coding (e.g. software, research)
Previous coding experience in professional contexts e.g. unpaid internship at charity organization, writing code for school clubs, etc.
Look for: Major League Hackathon, Code for Good, etc.
Previous internship experience tangentially related to coding e.g. Machine Learning, Data science, data analyst, teaching assistant, etc.
Personal projects e.g. in hackathons, class projects, etc.
Education and classes
Previous internship experience not related to coding e.g. working at coffee shop, working as a business analysts, etc.
I think number 2 specifically is massively underrated. It avoids the chicken-and-egg problem of finding a job: most jobs require work experience, but you can’t get an experience until you get a job. With voluntary work, you get the experience and learning required so you can apply for jobs later. It is also, surprisingly easy to find, provided you are resourceful enough. The downside of course, is that they are usually unpaid. But I also think unpaid internships have a bad reputation - if you can afford to do it, maybe you should, provided that you learn something from the experience. Especially for software, often what you learn in school is very outdated/ insufficient that even a little industry experience (and a functioning codebase) would get you massively more exposure than school. So if you can afford to do an unpaid internship when living at your parents’ home for a summer, it’s a net good overall. #broadframing
Also, brief notes on 4, 5 and 6. 4 is good, but unreliable because it’s easy to copy code from elsewhere, but it’s better to have 4, in my opinion, than to have 6. If you find your resume a bit sparse, this is also the best place to start because you can easily build 2-3 projects in a month working on the weekend. It’s much better to have 2 technical projects that you can elaborate on (even if you just follow a Youtube tutorials) than to fill up the resume with work experience about a barista. 5 might be more important if you go to Harvard/ MIT/ etc. but if not, the classes you take usually tell nothing about whether you can code or not, so it ranks pretty low.
So, if you resume is sparse/ you feel like you got nothing to write on your resume, try to find experience in that particular order. So find a software engineer experience first (maybe if you are international, at your home country where there is less competition?), then try an unpaid internship/ volunteer opportunity, then other tangentially related internship (e.g. teaching Python to high school students), building personal projects, then if all else fail, take a Coursera class.
Case in point: during my sophomore summer, I first was doing an internship writing curriculum for our school’s Data Structure and Algorithm (#3), while building a few personal projects (#4), helping out a friend at his start-up with some front-end stuff (#2) and finally, landing a summer internship in a software company in Vietnam (#1). But #1 was dependent on #4, a personal project that we won at a pitch competition, and the experience I gained while doing #2.
Presentation
There are countless resume tips and tricks, just Google/ Linkedin. I will just add a few things others don’t talk about enough:
Read others’ resumes, especially if they are in the fields you are interested in/ working on. See how they phrase things and reuse them if appropriate.
Ask others to read your resume. They will often point out things you don’t notice. Especially if they are in the same industry as you. E.g. having a SWE read your resume will be a lot more beneficial than someone doing UI/ UX design.
Use verbs and numbers. Quantify impacts.
Tweak your resume regularly, and send them and see what happen. You will know when you have a resume that work - suddenly you go from 0 response a week to 4-5, or more. That has happened to me after re-drafting my resume 50+ times.
Also, I wouldn’t get any responses for the first 20 tweaks, then maybe 1-2 response for the next 20, then jump to 8-10 responses for the last 10 tweaks. In the process, I added several bullet points for my work experience, added 2 personal projects, revamped my LinkedIn, Github, and did probably a bunch of other things I already forgot.
Speaking of which, don’t neglect your LinkedIn and Github. Add in your experience and your projects, even if they are just projects from school.
I don’t think having a personal website makes a big difference. Few people open it anyways. Just have it if you want to (brag like me).
Sending the resume
First thing first, make sure you have a good resume. If your resume sucks, even if you have the all the referrals in the world, it wouldn’t make a big difference. On the other hand, if your resume is great, even if you just cold apply, you can still make it to the interview round.
Also, I found that referrals are overrated. I have not seen much success with referrals, and a lot of my friends say the same thing. The other thing is it’s limiting - you probably know friends at 3 companies, maybe 5 if you are popular, but there are hundreds of companies hiring for SWEs. Referrals don’t scale that well.
What is underrated is going to conference and applying using specific links. This guarantees that a recruiter will go through your resume and read it (which is a lot harder to guarantee for cold applying). Popular conferences include Grace Hopper, Anita (for Women in tech), but also keep an eye out for CodePath’s conference, Out In Tech, Ladder’s conference, etc. Especially with everything being online, it is a lot easier to just sign up for a bunch of conferences and send your application through this process.
Finally, for cold application, use this https://github.com/pittcsc/Summer2022-Internships Github (or search for Github summer 20XX internships/ new grads), click on Watch so you get a notification every time someone adds a new entry, and apply away!
If you are first/ second-year minority, apply to STEP/ Facebook University/ Microsoft Explore/ Uber STAR/ etc. They are specifically for first/ second-year so are easier, but still require a few experience in hand (so you can’t just hand over a blank resume and call it a day). Also helps if you’re a minority. And don’t feel guilty that you get special privilege because you are minority. Make the best use out of it.
One more thing: timing is important. Recruitment cycle for SWE starts in August/ September, so be aware and prepare everything early, otherwise you might miss out on the recruitment cycles and spots get filled up. On the other hand, don’t rush it if you are not ready. I think my first 50 applications were probably too rushed because my resume was pretty trash at that point, but I was hearing the advice of “Apply early or else the spot gets filled up” and got scared. Think of it instead as a trade-off that you need to balance: apply early enough that you are competitive & have a spot, but late enough that you feel prepared and confident.
Online assessment & Technical interview
Elaborated on in a separate post: How I prepared for technical interview. OA is pretty much the same thing, except you don’t even have to talk! Questions are usually harder though.
Behaviorial interviews
For me, this was usually the toughest (even more than technical interviews, which I always ace because I prepared for those pretty intensely). I always felt like an imposter, so it feels uncomfortable to talk about my work (because I always feel like I did so little). A few things help:
Practice, practice, practice. Find out questions in advance (the common ones), think of answers for them, write them down and practice with a friend.
Have 2 - 3 stories that you want to share and can fit in multiple scenarios. E.g. Your proudest achievement can also be your biggest learning experience or biggest challenge or learning to work in a team, etc.
Make sure you can talk about each point you put in your resume in depth e.g. Teaching assistant ⇒ what did you teach, what did you learn, what was difficult, what was easy, etc.
STAR method. But also - make it a story. Have a beginning, a challenge you need to get through, why it’s difficult, how you solve it, etc. Make it engaging and fun.
Prepare really good questions. This is the part where you drive the conversation, so make sure it counts. Take your time to get to know the interviewer, their background, their work, and ask them questions related to their experience and learning. Everyone loves talking about themselves!
Conclusion (& a note on broad-framing)
All these things are useful in the context of applying for SWE internships. They are also useful for a lot of things outside of the specific context. For instance:
All of the mindsets I have while applying to SWE have been extended to my school work, jobs & internships, also relationship, health and more. They are, in general, good life principles.
Writing content for a good resume is primarily about finding ways to maximize directed learning. That means learning that is as close to the real thing as possible. For SWE, obviously, it means getting a software internship. But it also applies for other things too e.g. For exams, do mock exams; for learning to code, jump straight to a new coding project; for learning about start-ups, found one!
Writing your resume is about test, measure, learn. Making small tweaks and then seeing what happen, over the long haul, can make large differences!
Sending resumes is about using the third doors. People talk about referrals and cold applying, but there’s a third option that is more useful than both (in my experience). You just need to dig a bit deeper, and you can surpass a lot of people.
OA & Technical interview is about consistently doing the fundamentals right. I was very consistent with the work, and I focus on making sure I understood the data structure and algorithms right, and improve each time. I think a lot of things boil down to just that: consistently doing the fundamentals right, day in, day out. Gaining muscle is consistently lifting weights close to limits, losing weight is consistently eating less calories than you burn, being in a relationship is consistently respect and care for another person. Getting the fundamentals right is simple, but hard, and immensely important to get right.
Behaviorial interview is about learning to sell yourself. So hard, but so important, too. And, I’ve learnt, a lot of things that make a good interviewer/ interviewee conversation also make for a good conversation in general - bringing confidence, but also ability to ask question and listen carefully.
In the end, you only need 1 company to accept you. That’s all it takes. 99% of your efforts might get wasted, but as long as you have that 1 success, all will be fine.
If we zoom out, even if the technical interviews are stupid and the interview process is broken, if we have the right mindset, we can learn a lot. More than anything, making sure that you treat this as something you can learn, is probably already the highest ROI thing you can do for this entire experience.

