Status: 8+ YOE
I promised myself to share an experience post irrespective of my result. The leetcode community has helped me a lot with my preparation so far. I was approached by an Amazon recruiter in April, 2020. I had not prepared for a job interview for more than 7 years. So, I asked for sometime to prepare which he was happy to provide.
I took 3 weeks to prepare for phone screen. I started with brushing up my basic algorithms first like BFS,DFS, find height of tree, zig-zag traversal etc. Then, I moved to doing questions provided in candidate experiences to get a feel of things. I also did top amazon tagged questions. Initially, I found it hard to even think of approach to medium questions and some easy questions too. I was not looking to do as many questions as possible. My intention was to get into the mindset that is required for handling these kind of questions. So, I used to spend atleast 1-2 hours on each question before seeing the solution.
After couple of weeks of doing this, I could actually feel that I was able to get close to the solution for even the hard problems. By the time phone screen interview came, I was able to do some of the medium problems on my own but I was taking time to arrive at the solution. I had completed just 20 odd amazon tagged questions including easy, medium and hard but I had understood the pattern to solve the questions and got into a good rhythm. I also watched Dan Croitor's videos to prepare for behavioural interview questions and prepared some stories from my experience. This is very important and should be prepared seriously.
Technical phone screen (1 hour):
Recruiter instantly responded back to me after the interview that I have cleared the phone screen.
I asked for another 4 weeks to prepare for the onsite interview. Recruiter was very helpful and he even organized a session for candidates to give tips for preparation. It was mostly general things but I liked that they are interested in making candidates successful.
In these 4 weeks, I continued solving more LC easy and medium problems in Amazon tagged list. As I solved more and more problems, I was gaining confidence and could see patterns in the problems. eg. if the question is asking for top K elements, perhaps a heap can be used or if question is asking about minimum transformations required, there is some kind of traversal involved. By the time of onsite interviews, I had solved around 75-80 Amazon tagged problems.
For system design, I could spend around 10 days. I read the famous course which everyone mentions for system design and also watched youtube videos from TechDummies. I also went over designing stuff like hashmap, streaming platform, Job scheduler etc. I prepared notes for different designs and they were very useful to revise towards the end.
For Amazon, Leadership Principles are very important. They will be 50% of your total interview time, so I will repeat that you should prepare them well.
I went over the major projects that I have done in last 5 years and collected data points for those like how much data they were handling, how much cost was saved by an optimization that I made, how many requests per second are handled by the apps that I built, best challenges that I faced while working on them, times where I had shown initiative and pushed for changes etc. I wrote down all these highlights in detail and mapped them to different questions.
Basically, you need to prepare highlights of your career so far. You can also prepare about any extra curricular things like organizing Hackathon or if you write technical blogs etc. If you see Dan Croitor's videos on top questions asked in behavioural interview at Amazon, you should have atleast 15-20 stories or highlights so you can fit them into different questions. They will go in detail on these questions. You should be able to respond with numbers and facts.
Onsite
Round - 1: System Design
I thought this went ok as I was able to provide satisfactory answers to the interviewer.
Round - 2: Leadership Principles
I think this round went well and I had a really great discussion with the interviewer at the end who seemed like a nice guy.
Round - 3: Coding
LP questions
a. Talk about a time where you had to plan your work for short-term delivery and later for long term quality.
Write classes for multi level parking lot and implement the main ParkingLot class that allots and release parking slots.
I thought I was able to convince the interviewer with my design and also provided him with an implementation of the ParkingLot allotSlot() and releaseSlot() methods in the 25 minutes that we had. Although, after the interview, I felt that I could have improved the design and also saw a bug in my implementation. I wasn't sure if this would be considered a minor issue as it was mostly a object oriented design interview and I wanted to get a working implementation logic out in the time we had.
Round - 4: Coding
The first half of this interview went well but the second half was the worst among all interviews. The system he asked me to design was not something that I had seen or worked on before. It was some kind of a system integration application and we just had 25 minutes left. Out of those, I spent around 10-15 minutes asking him different clarifications and to try extract some kind of a common ground that I could show my coding / design skills for. Unfortunately, time was running out and I was still not very clear on what exactly he was looking for. So, I provided some basic design classes and ideas on how I would approach it but I wasn't myself convinced with it. We both agreed that we don't have time left and we can spend many hours just talking about different design choices for this question. I felt that given that usually only 25-30 mins are left for a coding question, asking such an open ended question to judge coding skills isn't the most optimal use of time. The interviewer seemed like a good guy, So I don't blame him but I guess it was just a bit unlucky for me.
Round - 5: Bar raiser
This was by far the best interview out of 5 for me. The guy was really sharp and had spent a lot of time at Amazon. We had a great discussion about different aspects of working at Amazon like culture etc. The interviewer was honest and I enjoyed our conversation.
My feeling:
Overall, I felt that my interviews didn't go too bad and other than those 30 mins in round - 4, I thought I was able to provide solutions to almost all the things that interviewers asked for. So, I was really hoping for the best.
Result
After couple of days, recruiter reached out to me and told me that the interviewers were really impressed with my experience so far and most of the feedback was positive but they won't be able to move forward as they could not collect enough data points for the skills that they were looking for. As Amazon does not provide proper feedback, I am guessing those skills should be system design / coding. Obviously it is very disappointing for me as I felt that I missed out by a whisker. I guess it wasn't meant to be this time.
Overall it was a very positive interviewing experience for me right from the beginning call with recruiter and discussions with engineers. Amazon has changed its interview process from quite a bit in the last few years. Earlier, they used to just make decisions in a binary manner if someone is able to solve a algorithm question or not in interview but now it looks like they do look at things in a more comprehensive manner.
As for me, I hope to continue with my preparations and hopefully improve my problem solving skills. I realize that I need to work harder on my system design preparation. Hope that I will get some other interview opportunities this year.
I hope my experience will help a fellow engineer :)
Good luck with your preparations !