Interviewing For a Software Engineering Internship at Amazon
Why would I talk about Amazon when I’ve interviewed at more than a dozen companies? Well, it’s one of the most valuable and influential brands on planet earth — and software engineers are lining up at the door for a chance to join the team.
The company boasts stellar compensation, benefits, and the opportunity to work on monumentally impactful code. Because of all this, it’s incredibly challenging to get a full-time role, let alone an internship. Plenty of candidates who are more than qualified get turned down, because the program is that selective! Their internships are among the most sought after in tech, and they’re hiring like crazy. Getting hired is a matter of persistence, hard work, and (unfortunately) luck.
It’s important to note that the steps I outline here are the steps that I took, and your experience may vary a bit. What worked for me may not work for you, and vice versa. Also, I won’t go into verbose detail on the specifics of interview questions, as that would be unfair to Amazon and probably violate an NDA of some sorts.
Step 0: Prepare
You definitely don’t want to go into this blind, so the more time you have to prepare, the better. Once fall comes around though, don’t delay applying.
You will get your choice for the most part on working with Java, Python, C, C#, or C++. Stick with your most comfortable language and become really proficient at using it to work with data structures.
In the early stages of the interview process, knowing how to work with loops, arrays, and strings is vital. By the 3rd round however, you must be prepared to use more complicated data structures, like Sets, HashTables, and Queues.
And while it doesn’t seem to be a huge deal in the assessments early on, understanding time and space complexity is a vital skill.
There are plenty of free online resources to help you in becoming proficient with the types of questions Amazon will throw your way. My favorite practice tool is Leetcode, which has countless questions that have been seen in real interviews. Another popular resource is Hackerrank, which is a similar tool. If all of the data structures that I mentioned sound foreign to you, don’t fret! It’s probably best to begin with a more academic approach. Cracking The Coding Interview is my favorite book for preparing for interviews, and it comes with hundreds of practice problems.
Step 1: Apply
You have 2 options here: you can apply cold, or you can try to find someone to refer you. I’ve gotten an interview at Amazon both ways, but when a friend was kind enough to refer me the second time around, I was offered the first pre-screen almost immediately.
The timeline you’re looking at is aggressive. For a summer internship, you’ll want to be sure to apply by October of the previous year.
Do your resume prep, find online resources and get feedback from peers and mentors! Once you’re ready, you can apply online. If you’re fortunate enough to have someone referring you, you’ll likely hear back within days. If not, there’s almost no telling. The first time I applied, I actually didn’t get pushed forward until Spring 😅. The whole process took about a month for me, which feels like forever, especially when you’re excited!
So the somewhat-obvious truth is that you don’t put all your eggs in one basket. Even if you’re the most qualified candidate on the planet, any company could pass you up for a number of reasons. Apply to dozens of other internships! After a few, it’ll become super natural and easy for you.
Once you begin the assessment process, it is without a doubt in your best interest to complete them all as fast as possible. You wouldn’t want to go through all this effort only to miss a deadline, or worse — find out that they hired their max # of interns even though you finished the assessments in time.
Step 2: Pre-Screen #1 🐛
If you pass the Resume screen, congrats!! The next step is typically a series of prescreens. To be respectful of your time, Amazon will send out the pre-screens in a series of progressively challenging stages. If you pass the first, you’ll get the second, and so on.
You’ll get an email with some info on how to access and complete the pre-screen, and you’ll have under a week to execute. The assessment is online, and they’ll ensure you are working on your own by requiring access to record your camera, screen, and microphone.
Without going into too much detail (wouldn’t want to spoil the fun 😉), you’ll spend most of your time finding and fixing bugs in code, already written in your choice Java, C++, or C. It can seem daunting at first but don’t get freaked out. I burned through 80% of my time before I even found my first bug, but once I spotted and fixed it, all of the others became immediately obvious to me. Most people try to overthink this stage, but it’s really just a test to see if you’re familiar with programming!
Step 3: Pre-Screen #2 🤔
If you were able to fix “enough” of the bugs in the first assessment, you’ll get an email in a few days with instructions for the second. No one is quite sure what constitutes “enough.” I solved all of them, and I’ve heard of people getting pushed on having solved 75% of them.
In this section, you’ll be asked to solve puzzle-like problems using your choice of Java, Python, C, C#, or C++ (Technical part of the interview). After a few of those, you’ll go through a “work-style” simulation, which constitutes the behavioral part of the interview.
For this part, having a working answer seems to be more important than efficiency. Obviously, if you can do both, DO IT. But I only had time to implement brute force solutions that passed most (a few pesky ones trailed) of the test cases — and that still got me through!
This stage has questions that match what Leetcode typically classifies as “medium” problems, and there will probably be about 3 of them. If you can quickly solve medium level problems on Leetcode, this will be no sweat for you. If you find them tricky, put in some practice and then give it your best shot!
Step 3: Pre-Screen #3 ⏱
This last part is brutally long, at an estimated 2.5 hours to complete. It consists of a workday simulation and a logic test.
The workday simulation is actually both fun and stressful. It’s very much made to be game-like while assessing how you perform under pressure. You’ll be presented with problems (like missing deadlines, buggy code, arrogant coworkers), and asked you how’d respond. It’s important that you’re honest, and if your responses line up with Amazon’s leadership principals, you’ll likely pass no problem.
The last part is a logic test, which feels a lot like the ACT had a baby with a Mensa test. Likely designed to get a feel for how you think, the test is really hard to prepare for! If you really want to get a feel for what it’ll be like, practice with some fun Logic/IQ tests online.
Step 4: Final Interview 🙌
If you performed well enough on all 3 steps, a recruiter will likely reach out to schedule a phone interview! Even getting here is a great accomplishment, so congratulate yourself on a job well done.
Ultimately, I turned down that final round interview because by that point, I had happily accepted an offer at another company. Once I knew that I wouldn’t be taking the job even if it was offered to me, I let the Recruiter know so as to respect their time. Amazon is a great company, but I ended up going somewhere that feels like a better fit for me.
In all honesty, there’s no telling how I would have performed on that final interview! Because I didn’t follow through on the last stage of the interview, I won’t speak too much to it. I hear they typically ask one or two questions similar to the ones you saw in the second assessment. The biggest difference is that you’ll want to explain your design decisions to the interview to show an understanding of programming principals, rather than just cranking out code.
Remember that the person you speak with wants to see you succeed, so don’t be intimidated. Ask lots of questions and don’t be afraid to say when you don’t know something!