I just landed a developer job at Amazon London: Here is how I prepped for it
I have recently received an offer from amazon to join their Prime Video team in London. I went through a normal application process through their website. This means I did not receive any internal referrals, all I did was apply to an advert on the amazon.jobs website. I got shortlisted through the rounds and finally cleared the onsite to receive an offer. I will be joining Amazon in September, exciting times! The reason I am writing this post is to offer advice to prospective candidates who wish to apply for Amazon, specifically in their London office. I realise there are plenty of posts about how to get into tech giants (FAANG), and alot of their advice applies here as well. In addition, this post is focused on the interview rounds that were held in London, which may differ in other places where Amazon hires. The impression I received is that the interview process is fairly standardised across the various offices. So, here’s what I did on a regular basis until I finally landed this role. During this post I will describe the stage that I witnessed and comment on key points that I think will help you out if you end up in that particular stage. The stages I went through are:
- Online Application
- Online Problem solving stage (+ behavioural)
- The onsite stage
So lets dive right in and experience what each of these stages is like. I will also cover some other
Ahead of Applying
Let’s say you are currently a student and are considering to apply for a full-time role at amazon. Or maybe you are currently a developer and you wish to apply in the foreseable future. Its a good idea to always be ready. The more practice you put in ahead of the application process, the more prepared you will be (which applies to almost anything in life). A continuous growth mindset is essential. I still practice algorithms and data structures everyday, since I consider myself an amateur — and I am interested in them. From a technical point of view the three key areas you need to focus on are Algorithms, Object Oriented Design, and System Design (focus on SOA, or microservices).
For Algorithms, there is no silver bullet and its all about how much practice you put into it and getting used to look at a code segment and analyse its time & space complexity. There are alot of great resources to practice, and I will link some below.
Ironically, I think this could be one of the hardest parts of the process. The application process would be quite competitive as you would imagine. Amazon was the first tech giant to shortlist me for a next round after the Resume sifting stage — so I guess I must be doing something right, or maybe I just got lucky.
Of course you need to make sure your resume stands out from the rest of the applicants to stand a higher chance of getting shortlisted. Companies like Amazon receive a lot of job applications, and often they need to make a shortlisting decision within minutes. Make sure your resume is clear and concise, and try to make sure that the information most relevant to the role you are applying for appears first. Make sure to read the job role you are applying for and keep your features. Also take a look at some great sample CVs to gain some insights.
The Online Interview Stage
After I got shortlisted I was invited to the online round. The email I recieved explained everything about the platform used for assessment, and provided and mock test to familiarise with the environment. This stage consists of 2 algorithm questions with an allocated time of 90 minutes. After that you get 30 minutes to explain your code, and take a behavioural test. In my case I solved both of the problems using a brute force solution, which got them to pass the test cases. There were a few edge cases that were not documented in the question, and I had to guess what the expected outcome would have been for them. I’m not sure if they left it intentionally vague or they missed that part out from the problem statement. I completed both questions in 45 minutes so I had another 45 minutes to optimise my code. I attempted to reduce my N² complexity to N * log(n) using Binary Search. However, there was a bug in the code which I didn’t get to fix until after the time was out. So in the next part I explained how I would optimise my code further.
I was not sure if I would clear this round, since I only managed to use bruteforce. However, I was delighted to receive the email that I have cleared the round, and it was time to prepare for the onsite stage, which was a real beast on its own. Note that I can’t say much about the behavioural questions, other than the fact that I answered them as honestly as possible to express my behaviours in the respective situations.
Note: I have been told by colleagues that they managed to replace their online stage with a phone screening interview. This may or may not be possible and is not official, but it is worth asking your point of contact if you prefer speaking to a human and not have a machine judge your code :)
The onsite Interview
Before the onsite interview, you are invited to attend a coaching webinar which discusses the expectations of the onsite stage. You are also invited to have a phonecall with one of the internal recruiters to go through any questions that you may have. This is a great chance to know what you would expect on the day. There were four stages for the onsite:
- Algorithms Question 1
- Algorithms Question 2
- Object Oriented Design
- Systems Design
Each of the above stages also consisted of a set of behavioural questions, based on the leadership principles, so let's talk about the behavioural questions first. I spent alot of time anticipating these questions in order to be able to answer them when asked. There is a Youtuber by the name of Dan Croitor who has done an amazing job in collecting expected questions related to these behavioural questions. Here is his most relevant video that helped me out: the video. I collected all of the 35 questions in a living document, and I prepared answer for each, based on my previous life experience. Below is an example of some answers I prepared for these questions:
Of course I did not memorise these answers, but writing this down helped me remember the cases once they were asked. The important part was to follow the Situation-Task-Action-Result (STAR) pattern, and to back up your claims with data or success metrics.
Now, for the algorithms section, there are plenty of resources to prepare for this, which I have linked to in the section below. My main strategy was to practice from a diverse range of problems to stay fresh for the day. A few problems for each category and data structure seemed like a good idea. So I picked a few problems from each category in the Geek4geeks course and used those for practice. One thing that came as a shock to me was that while writing the algorithms in the onsite stage I was not expected to run any code or test cases. You only type your code on an online editor and the interviewer examines your code visually, then asks you about some logical aspects, or edge cases.
Since I was applying for a role within Prime Video, I was expecting the system design question to be along the lines of designing a service like Youtube or Netflix. Therefore I prepared for exactly that. I found this course on educative.io which provided a lot of sysdesign scenarios and then walked you through the thought process of designing the system components for it, covering various issues including database sharing, selecting NoSQL Vs. SQL databases, CDNs, etc. I studied the Youtube service quite closely and tried to understand all the factors in designing such a system. My expectation was right and I was in-fact asked a question related to this. If you prefer to not pay for an online course then there is also a github list of topics in this repository. However I found that this repository was too generic for my needs.
I did not do much practice for Object Oriented Design, since I felt like my time was better focused on the algorithms and System Design parts. Therefore I do not have much resources to recommend here. However, if you have worked as a software developer on mid-large software, or contributed to some open source projects, these patterns should be quite familiar to you. It is really a matter of understanding good design, maintaining your application state, delegating tasks for child objects via composition, and inheritance. Dealing with changing requirements is also one of the things that will be tested in this section of the interview.
Offer or no Offer
After some days you will get a call from your recruiter, which hopefully bears the good news.
Selecting the teams
Once you get an offer, I was given a chance to select some teams which I would be interested in joining. After this I was able to speak to the respective team managers to learn more about the work they do. Based on this information I could select the team which I would be interested in joining.
- Educative System design course [paid]
- geek4geeks interview questions list
- System design premier
- HiredInTech System Design tutorial
- Algorithms preparation sheet for interviews by Mustafa Saad
- Book: Daily coding problem
- Book: Cracking the code interview book
If you have any further questions or you think there is something I should missed on and should be added to the post, feel free to ping me on linkedin or twitter :) Also if you’re looking to improve in algorithms for the qualification or onsite stage, i run a regular meetup group for Londoners