So you want a job. Not just any job though. A job at a place like Google, Facebook, Amazon, Microsoft, etc. In programmer parlance, these are called “Big N” companies. As in, the Big 5, Big 10, Big “N” companies in the tech world.
With these companies, I’m also including some of the newer, larger startups, especially “unicorn” startups, or startups valued at over a billion dollars. Places like Stripe, Lyft, AirBnb, Uber, Palantir, Coinbase, GitHub, Reddit, etc. are all excellent places to intern and highly selective. Sometimes they pay even better than regular big tech companies.
There’s also some tech finance companies that are very famous such as Jane Street, Two Sigma, Akuna, etc. They pay obscene amounts. Like in the 10-14k per month range. But their hours are often accordingly tough and their application process exceedingly selective.
Another common grouping is FAANG, or Facebook, Amazon, Apple, Netflix and Google. This is kinda flawed for a few reasons. For one, Apple hires a lot more electrical engineers than programmers, and Netflix doesn’t even hire interns.
But anyways, you want one of these jobs. Whether it’s for prestige, money, or the awesome people, you want this job. How do you get it?
Reality of Rejection
For one, be prepared for a lot of rejection. Doesn’t matter who you are, or what you’ve done, you’ll get rejected from somewhere. Sometimes your application gets ghosted. Sometimes you finish an interview and get rejected for no apparent reason. Don’t take it personally, even though it totally sucks.
Therefore, you should apply to a whole bunch of Big N companies. Don’t just apply to Google and call it a day. Of course if you don’t want to work at a specific Big N company, for whatever reasons, don’t apply there. But if you want a Big N job, apply to as many as you can.
There’s basically three main divisions for interns at tech companies. There’s software engineering (SWE), product management (PM), and early-career roles.
Software engineering roles are pretty self explanatory. Yer a programmer Harry.
Product roles are not as technical but more about digging into requirements for a project, comparing them with the programmers’ responses, then doing stuff like creating estimates, managing features, and so on. In some companies they’re also in charge of developer operations, or basically the infrastructure and deployment aspect of products.
The early career roles are interesting cases. These are the programs like Google STEP, Microsoft Explore, Facebook University and so on. They’re aimed at freshmen and sophomores with some, but not a lot of experience in programming. In these programs, students receive more guidance and may alternate between product management and software engineering roles.
Apply early. Big N companies start their process super super early. I mean, almost a full year before the term in which you’re interning. Start applying for Summer 2021 positions in July/August 2020. Monitor the sites and figure out when the applications open. Sometimes this is really hard to figure out, as companies’ job portals are seemingly designed to be as confusing as possible. Guess they have to weed out the people who can’t navigate terrible websites.
The reason you should apply early, beyond the possibility that all the spots fill up, has to due with the way big companies recruit. There’s two parts of the recruitment process: hiring and team placement. In some companies, such as Google, the team placement is done alongside hiring. In others, companies recruit for a division, then place interns in specific teams later. Either way, the teams/divisions that are more desirable tend to fill up early, whether due to returning interns requesting that team, or specific requests by applicants. While any division/team in a big company is still a great pull, a really well placed team does come with more cachet and potentially more interesting work.
The process usually starts with a screen. This can either be a coding challenge via something like HackerRank, or an actual phone screen with a person. Even getting a screen is a good sign. It means someone or some system read through your resume and decided to put you into the pipeline. The screen isn’t meant to be very hard, just a quick test to make sure you can actually code.
If the screen goes well, you may have either another phone interview or an on campus interview. On campus interviews are great because they’re in person, but on your home turf.
After that, at some places, e.g. Google, you end up doing more phone interviews to place you in a specific team. In others, you get invited for an on-site interview. On-sites are really fun! They fly you out, put you up in a hotel, then give you a whole slew of interviews. I think I had 4 interviews at my on-site. Then, you get flown back and your recruiter will give you an update in a week or two with either the offer or the rejection.
The unfortunate truth about interviewing is that companies will ghost you all the time. Companies generally do this when they want to reject you, but they also want to keep the door open so that if they need to hire more, they can. It’s dumb and most of the time if I don’t get a response in a few weeks to a month I assume I got rejected.
But Nicholas, you ask, is there any way to prevent that? Well, kinda? Referrals can help with ghosting. Generally a referral will get you to the phone screening round, which means that at the very least you won’t be ghosted.
You can also go via certain unconventional routes such as Google’s foobar challenge. Having gotten the foobar challenge myself, I’m not sure if it was worth it. I spent a lot of time working through the levels, only to have it plop me into the first stage of the Google recruiting process. Which, I guess is better than being ghosted, but it took a lot of work just to get sent another online coding screen after I finished the challenge.
You can try to get to the recruiter assigned to NYU (often recruiters work like admissions officers in that they have specific domains). But you need to find their email and they might not respond anyways. Ah well. That’s the life of a tech job applicant.
I don’t know why, but recruiting emails are some of the most suspicious emails ever. They have lots of spelling mistakes, weird formatting and don’t come from the right domains. Often times recruiters are contractors and are identified with a separate recruiting firm.
Check your spam and double check that the email addressed to “Nicolas Yan” about a job opportunity isn’t actually an email from Facebook recruiting.
A lot of digital and physical ink has been spilled about technical interviewing. I’m not gonna go into depth here. If you want a good guide, read something like Cracking the Coding Interview, or the millions of guides online.
If I were to offer something new, I’d recommend that you practice problem solving skills above all else. Doing individual problems is great, but general techniques for problem solving are equally important. In my case, I’m just coasting off my math problem solving skills. A great book for this is How To Solve It by George Polya. What’s great about this book is that Polya designed it to give you an overall gist of problem solving techniques in the first few pages. You can read those pages, lose interest (as I totally…didn’t do), and still learn a lot.
Another important aspect is to mimick the interview conditions. Google for instance is infamous for doing phone interviews in a Google doc. Or to prepare for on site interviews, write code on a whiteboard. If you can practice with a friend who can mock interview, that’s great too.
In general I wouldn’t obsess too much about technical interviews. A lot of people online (*cough* /r/cscareerquestions *cough*) tend to exaggerate the amount of Leetcode one should do. While specifically practicing interview questions can be good, I find that programming regularly and have taken a halfway decent data structures/algorithms course is enough for interview questions. If you are not programming regularly or have not taken a decent data structures and algorithms course, try to do some work on your own to prepare for interviews. Cracking The Coding Interview will have some sections on data structures and algorithms. If you want a more thorough treatment, you can use something like Introduction to Algorithms by Cormen, Leiserson, Rivest and Stein also known as CLRS. But it’s totally okay if you find something like CLRS boring and overkill. In that case, I suppose a little bit of Leetcode might be in order. As for programming regularly, you can reference my CAS CS guide for some tips.
But don’t worry too much about learning every algorithm or data structure under the sun. The questions that your interviewers come up with are questions where they understand the solution and can judge potential answers. They’re probably not gonna ask you about red black trees cause, let’s face it, nobody remembers how the hell to write a red black tree.
I suppose, if you must, you should review the standard data structures like arrays, linked lists, trees, graphs, etc. Recursion, dynamic programming and other techniques are good too. If you’re applying to a more math-y position like a ML engineer or a data scientist, you should review statistics, machine learning, probability, and so on.
Ultimately though interviews are as much about how you communicate and how you think. I’ve had interviews where I didn’t get the solution immediately, but I communicated well, and therefore got the job. Practice thinking out loud and communicating your problems. Along with that, make sure to practice the soft skills in interviewing. Smiling and talking about yourself are as important in an interview as programming ability.
But again, don’t worry too much about interviews. You’ll learn as you go.
If you’ve done everything right and the correct people have deemed you worthy, you get an offer! Offers are pretty great. You get a nice salary number (usually about 7k-10k a month), plus other benefits like free housing (or a housing stipend), healthcare (yes, healthcare for interns!) and a transportation allowance.
Negotiating intern offers isn’t really a thing, but hey, try it out and maybe you can get something. I know graduate students can negotiate a little. Your recruiter isn’t gonna rescind your offer over a little haggling.
The main pressing issue with an offer is the deadline. NYU has what’s called an on campus recruiting (OCR) policy. Unfortunately, NYU does not have a great one for internships. They require companies give you a minimum of 3 weeks to decide for your offer. Which…isn’t a lot of time if you still have other applications going on.
There’s no real good answer on what to do if this happens to you. Some…more realpolitik people than myself have recommended accepting the offer, then reneging if you find something better. I disagree with that approach. For one, it’s a little unprofessional in my view. Companies may be massive machines worth billions of dollars, but you are screwing over your recruiter, who is just a person. But also that strategy can backfire as some companies may or may not remember your reneging. Plus if you’re reneging Amazon to take Google, does it really matter that much?
So yeah, there’s not a great answer to this issue. Just make your choices and try to not look back1.
As for accepting offers, I’d like to emphasize that a Big N job is just like any other job. You should analyze the job as a fit for you and you only. Not your Facebook friends who will like your job status post. It’s tempting to think “OMG Google is so awesome!!!” when you get the offer, but Google is a big place and maybe the team you got isn’t the best fit.
I’ll explain in the future the green and red flags that come with a job, but here’s some quick advice. Your company will probably sit you down with an employee who will explain the details of your offer and what team/division you will be in. Or, at the very least they’ll explain the general format of your internship. This is an important session. You are now the person in control. You should try to ask as many questions as you can to eek out whether you want to work there. Some good questions to ask include:
“Do interns get new projects or are they fixing bugs?”
“What time do you leave work?”
“Do you guys use continuous integration?2”
“Could you give me an example of a previous intern project?”
I know, there’s a 99% chance you’ll look at the salary and accept immediately. And really, it’s only three months, so even if it sucks, you’re out of there before you know it. But you should still be careful to make sure that you’re going to be in a healthy, productive work environment where you can learn a lot.
If you don’t get an offer, don’t take it personally. The process is extremely random and again, nobody has a perfect batting record for job applications.
Besides, there’s a lot of options that are as good or arguably even better. Big tech companies are great, but there are drawbacks. For one, you’re often working in a small corner of the codebase, on some project that affects some tiny part of the company, that frankly has probably already been built by some other team in a different division. If you want to make a big splash or have a diverse set of tasks, a big tech company is not the place. A smaller company will offer more freedom and diversity in tasks.
Plus the internal tools. Oh man, if you want a rant, just ask me about my experience with internal tooling. It’s really bad.
Another possibility is that you may just not have enough experience for a big company. I know, it sucks to hear that you’re not experienced enough. But legitimately, experience is important for making the most out of a Big N job. Large companies have a lot going on and it can be pretty tricky to adapt and be productive. I’m not sure I would have done great if I had interned at a Big N as my first internship. Plus there’s the pressure of a return offer or even a fulltime offer at a Big N which can be unneccesarily stressful. I’m gonna make a post on getting your first internship, and what you should look for in your first job. It’s quite different that what you may get at a Big N company.
Regardless, you shouldn’t give up. Continue applying to other companies and apply again next year if you still want a Big N job.
Hopefully this has been helpful. Let me know if you have any questions, feedback or concerns. Also, the title of this post is an homage to Steve Yegge’s post Get that job at Google and the follow up post, Get that job at Grab. Please read those two excellent posts and anything else that Steve Yegge has written, such as the platforms rant, the Tour de Babel, and so on.