Note: I am currently a Senior SDE at Amazon Web Services (and I am hiring, my team is awesome, please message me if you are interested). Opinions there are my own and does not represent the one from my employer.
Amazon is a major tech company and is a leader in many domains, which gives a lot of jobs opportunities (like working on Cloud Computing via Amazon Web Services, Retail via Amazon.com or Virtual Assistant via Alexa. Thousands of people want to work there and the interview is hard. This is very common to find people frustrated because they have been rejected, like this on Quora.
The interview is hard and even if you think you did great, you probably did not. Reality check: this is really hard to get another perspective (see pic below). And unfortunately, we probably do not perform as good as we think most of the time.
As a senior SDE working there, I wanted to share some advices on how to prepare for your interview. These advices are mine and are limited to my knowledge and experience. Do not consider them as the only good practices, these are just my perspective (see pic above).
Demystify the interview
First of all, do not focus too much on the outcome on the interview. Hope and shoot for the best but keep in mind it might not happen.
Interviewing is like dating. You prepare, you try to be at your best and you will be stressed. This shows that you care about the job. But if it does not work out, no worries, there are plenty of fish in the sea. But if it works, you do not have to seal the deal right away: a company that is rejected by a candidate is likely to come back later.
But first thing first, you have to be prepared.
Work on coding. Know your basics
The general advice, no matter the tech company is to know your basics: algorithms, data structure, complexity, you have to know these topics. If you do not know, do not even go and try, you will waste your time.
I would advice to read at list two books:
- Elements of Programming Interviews: the most complete resource to be prepared for algorithmic, design and other technical aspects
- Cracking the Code Interview: a good second book that explains also what to expect during the interview.
If you think you already know your basics and you do not need this, think twice. Reading Elements of Programming Interviews will definitively refresh your skills.
You can also go for a mock interview, a coding bootcamp. Whatever. Be ready to write code on whiteboard and answer to some basic questions.
Know the leadership principles …
Technical (coding/system design) skills constitute 100% of a hiring decision. The other 100% is guided by the leadership principles. The ratio might be be accurate (no kidding!), but what I want to highlight there is that most books and advices do not dive deep on this topic while this is very important. Knowing the leadership principles shows your culture fit and your understanding of the company principles. If you do not know them:
Learn and show you understand them. Connect your own experience with these principles. Explain how you apply customer obsession, frugality, bias for action or learn and be curious in your actual job. Doing this will prepare you for your interview.
This is an important part of an interview because these principles drive our work every day in the company. Showing that you understand and follow these principles is key.
Also, do not make up stories, be sincere, real. If you do not know something, say it and ask for more clarifications or to have another question to evaluate you. This is very easy for an interviewer to see when somebody is making up a story.
… and do basic search about the company
Learn about the job and do some research about the division you are interviewing for (lab126, AWS, etc.). Know the products they are developing. This will show you are interested about the job and you care about it. Do not overdo it, just know the basic information: products, target, overall development plan, major leaders, etc.
Practice a lot
Practice, every day. Start with practicing on leetcode, geeksforgeeks or any other online coding site. Solve at least 4 problems a day (for example, 2 in the morning, 2 in the evening). Make sure you solved at least 4 to 5 problems in every category (arrays, tree, linked-list, etc.) before scheduling any interview (even a mock).
Buy a whiteboard. It costs nothing (~$10) and will help you to practice in real conditions.
Do not bother having a coach. This is non-sense, a waste of time and money. Just work hard, every day for several weeks in a row. Stop coding on your computer and switch to the whiteboard exclusively.
Go out and interview periodically
Interviewing is like a muscle: you need to practice so that you do not loose your ability to interview. Even if you are at your dream job today, continue to practice to keep it strong. This is very important to keep this ability up and running. You can do that in different ways: you can either practice with a friend or just apply to positions to evaluate yourself.
Remember, interviewing is like dating, you can go interview but do not have to accept any offer. If you refuse, the other party will contact you later to check what you are up to. And even if you refuse it, having a nice offer will boost your ego and give your value on the market (always good to take!).
Same player, try again
Even if you prepare at your best, there is still a chance you will not be selected. There are many reasons a candidate will not receive an offer. Your goal is to be prepared at best to reduce the probably of being rejected. But it can happen for various reasons. And that is ok.
Do not take this personal. Consider this as a learning opportunity to improve and re-apply few months after. After few days, you will know where you probably made a mistake and can work on improving. The process is generally oriented towards false positive, this is why recruiters will probably re-contact after a few months to re-apply.