Disclaimer: This is going to be a very lengthy and descriptive post.
I want to thank the community for inspiring me to work hard and not to let go whenever I felt like giving up! After one year of learning and solving ~200 problems on LC, I got an offer from Amazon.
Status: 2.5YOE, in no-name startup and underpaid contracting, MS CE from Tier 1 public university in the US
Position: SDE2 at Amazon
Location: Austin, TX
Date: July, 2020
It all started last year when I was laid off from a no-name start up as their budget imploded. When I started to apply for jobs, even though I was able to get many calls from different companies including Amazon, I was failing at the very first step, i.e, online assessment. I still remember I couldn't figure out the problem that needed level order traversal of Binary Tree in one of those tests. I realized I needed some serious studying and practice in DS/Algo. I got a job which involved redundant automation and not much Coding, I used the spare time to practice LC, but most of the times I felt like giving up, It was then I got familiar with the discuss section and read experiences of many other people who worked hard and got successful. This encouraged me to be at it and come back a couple of days later and not give up. I subscribed for LC premium in January 2020 and seriously began practicing.
I had a phone interview with Facebook in April and failed. I got disappointed at first but started leetcoding again.
I decided its time in May, eventhough I felt I was a bit rusty in graph and DP related problems, I started applying for positions online or reached out to recruiters on linkedIn based on my preference.
I got a call from Amazon recruiter in the last week of May.
Here's the time line:
Applied Online: May 22nd, 2020
Initial email from recruiter: May 26th, 2020 => setup a call to to see if there was a match in our expectations
Recruiter Phone call: May 27th, 2020 => Sent OA link with 2 weeks time
Online Assessment: (June 1st, 2020)
Experience:
Both questions were from Amazon list of OA questions
Eventhough I have solved both the questions before was only able to get 15/21 and 19/23 test cases passed on each question.
I took care of writing the code in high standards like abstracting each functionality to reusable methods, naming conventions etc.
Result: (June 2nd, 2020) Recruiter gave feedback that the Hiring Manager wanted me to go through a Phone interview.
Phone Interview (June 10th, 2020)
Preparation:
I prepared a whole day for LPs as I was told by my recruiter that LPs could make or break my interview, remaining days I wason and off with Amazon tagged questions and DP/graph related problems.
Experience:
I was asked 2 LP questions with a lot of follow-ups, I was able to answer them to the point and could sense the interviewer was impressed.
I was asked a popular graph related question, I was able to recognize I can use DFS and shared my approach and started coding, I got a follow up and was able to solve that too with minor changes. I got to ask some interesting questions about the team and Amazon in general since there was a lot of time left. I felt like I did really good.
Result: (June 11th, 2020) Recruiter said the team wants me to invite me to the onsite and asked for a timeline I would be available to take it.
I thought I needed a 3 week gap and asked to schedule it after July 4th.
Virtual Onsite (July 7th, 2020)
Preparation:
I knew I had to prepare the best stories from the limited exposure and impact I was able to create in my earlier jobs. I prepared for almost a week for LPs, writing, proof-reading, gathering datapoints, improving based on tips from Dan Croitor on Youtube, sample questions and answers in "Answering Behavioral Questions in Amazon Interviews: Advice for Candidates at All Levels" book, also had 5-6 mock interviews with my friends.
Remaining days I was on and off with Amazon tagged questions and DP/graph related problems. I practiced OOD and system design questions for 4days from "G*** series" and I did many mediums randomly picked from Top interview question lists everyday. I also did timed mock interviews of Amazon, Facebook and Apple.
Round 1 (Hiring Manager | All LPs):
Round 2 (Bar raiser | 3 LPs and 1 coding question):
I knew the interviewer was Bar-raiser as every other interviewer was from the same Org I was interviewing for. I tried to re-collect my best stories from my pool in the gap.
He started by asking me 3 LP questions with a lot of follow-ups, most of the follow-ups were based on technologies I used, trade-offs I had to consider etc. I think he was more interested in techonolgy side as he was an SDE himself. (took 30minutes)
Then came the coding question. I was able to figure out I needed to use BFS as soon I got to know the question after clarifications. I quickly explained my approach and started to code after the Interviewer was satisfied. I got all the edge cases right and the interviewer seemed impressed. He then asked a follow-up building upon the initial problem, i was able to quickly solve that too. Then came another follow-up, After a bit of thinking out loud, I was able to solve it with slight modifications to existing code. All the solutions took O(N) time and O(1) space.
It was time for me to ask the interviewer any question, I asked about his team, about the impact his team had on others and vice-versa.
Round 3 (SDE2 | 2 LPs and 1 LC hard string question):
I felt like this was easiest LP based round with very few follow-ups. (took upto 20 minutes)
For the coding question, I struggled for a couple of minutes in coming up with an approach, but was thinking out loud and then said I would go with recursion with memoization, started coding it up and finished in 10 minutes covering all edge cases. This ended up taking O(N^2) time and O(N) space. The interviewer asked If I could think of a better approach, after a couple more minutes of thinking out loud, realized I could use a Trie and DFS approach and explained him, this got the time down to O(N). The interviewer said that is exactly what he was looking for, I quickly started coding it up and was able to finish with a couple of minutes left. asked some questions related to his day-to-day work and tech stack.
Round 4 (SDE3 | 3LPs and 1 OOD question):
I had to repeat a story that I used in Hiring Manager round but focused more on technologies and trade-offs (from my experience with bar-raiser, I thought SDEs are more inclined towards technologies) (took more than 30 minutes)
This was one from Amazon tagged frequently asked OOD questions. It was a fairly good discussion coming up with Objects, Abstractions, Encapsulations. I had to make a lot of changes to my code with increasing requirements as I did not use the appropriate design pattern from the beginning. The interviewer was satisfied at the end.
I asked a couple of questions about the team.
Round 5 (SDE2 | 2 LPs and 1 System Design)
I had no difficulty with LPs this round but was tired after 4 hours of speaking. (took almost 25 minutes)
Then came the System Design question, It was based on Amazon specific use-case. The interviewer specifically asked me to start with OOD, APIs and build out the rest of the system later. He questioned every choice I made with Objects, variable names and asked a lot of follow-ups on why I chose a particular Data-structure for a particular use-case. He also asked about trade-offs and how one choice effected the complexity in other API calls. this went for almost 25 minutes. He was satisfied with my design and explanation and then started designing the rest of the architecture starting from database-sharding(discussion on sharding strategy),Load-balancers( avoiding single point of failures), caching in front of each data layer as required. Overall, he seemed pretty satisfied and said this was a good design. There were like 5 minutes left and I asked him the same questions that I asked other interviewers about technologies, team, culture etc.
I later realized I did not include bandwidth calculations in my design and how they effected my design choices, which I felt was a negative in system design.
Overall, I felt the interview went well except for no proper design pattern in OOD and no bandwidth specifications in System Design. But, I was worried these could lead to rejection.
I sent a thank you email to the recruiter and tried to forget about the interview.
Timeline after Onsite:
July 10th, 2020:
After 2 days, the recruiter emailed and said she has the feedback and asked If I was free to discuss. I said I was available anytime. she called an hour later and said the team felt that I would be a good fit for Amazon and eventhough they thought I did well, they felt I did not meet the bar for SDE2 and that I could get in as SDE1 and improve my skills.
She also said the particular team that interviewed me did not have any SDE1 positions open and she would reach out with other recruiters and hiring managers to see if there are any SDE1 positions available. She also advised me to look for SDE1 positions that I am interested in and send them over.
July 13th, 2020:
I have prepared a list of SDE1 positions that I was interested in over the weekend and sent them over to her.
July 14th, 2020:
She got back to me saying another team in Austin was looking out for SDE1 and introduced me to the recruiter for that position, I spoke to the other recruiter and she said she will be forwarding my resume, profile and onsite feedback to the Hiring Manager.
July 15th, 2020:
The new recruiter got back to me on the next day saying the Manager is available to discuss the role that evening and said it is more of a casual discussion and seeing if there is a mutual fit for both. I got on the call with manager and he seemed to be impressed with my experience, I liked the what team was working on and thought he would be a good manager. I immediately sent my update saying I am very much interested in joining his team as an SDE1. The recruiter got back to me immediately saying the manager felt the same and they are willing to extend me an offer.
July 17th, 2020:
I received my Offer-letter.
I hope my experience would help somebody. I decided to include the whole timeline as I did not see many posts here explaining what happened after SDE2 -> SDE1 downlevel. I feel like I am extremely lucky in getting a team-match at my preferred location so quick. I wish everyone all the best in their Leetcoding journey!