There’s been a lot written about how Amazon interviews people. This isn’t necessarily anything that new, but this is my experience with it.
The first thing that struck me was the speed of the entire process. From the moment my resume was submitted to the moment I was in a face-to-face interview out in Seattle was exactly two weeks.
Here’s the full timeline:
- 3/19 – Resume submitted by my soon-to-be hiring manager
- 3/21 – Auto response that I’m in the system
- 3/23 – Contact by recruiter asking for phone screen availability
- 3/27 – Phone screen #1
- 3/28 – Phone screen #2
- 3/28 – Schedule face-to-face
- 3/29 – Airline tickets confirmed
- 3/30 – Flight to Seattle with En
- 3/31 – Wander around the city + prep
- 4/1 – More wandering and prepping
- 4/2 – Face-to-face interview
- 4/3 – Offer
This, to me, is stunning.
Another thing that struck me about the interviewing process was how quickly everything went into coding. This wasn’t a surprise, but it was interesting watching.
I didn’t have any coding questions that were the “trick questions.” None of the “You have nine balls, one weighs less than the others, how many times do you have weigh them to figure out which is the light one.” Those questions piss me off. They don’t test how well you can program — or even think for the most part — but rather if you’ve seen this problem before.
– = –
So I show up at the the Amazon campus at 10:30. I want to be early for my 11:00 interview. The day is scheduled to go all the way to 3:45. There seems to be a half-hour break… but we’ll get to that later. My flight out boards at around 7:00 that night for a red-eye back home.
– = –
After coding anything, the first followup question was typically “So, can you tell me the order of this?”
Big-O isn’t something that most people think about in day-to-day life. But it’s an important thing to show that you have a grasp of how algorithms grow and scale.
Here’s a concrete example: “Make a string trie on the whiteboard. Write the insert and select for it.”
A trie, is a prefix tree. Unlike a binary tree, each node stores one extra segment of information. This can be the next character in a string or an octet of an IP address for instance. I decided to use dictionaries at the nodes because of ease of implementation. No problem.
So then the obvious followup question comes: “What order is it in time and memory?”
I thought about it for a moment. “O(1)+k where k is key size.”
This wasn’t what my interviewer was expecting. “I would have said O(n)…”
“But each level of the trie is a dictionary and access is O(1) for each level. Since each level is constant for collection size, it’s O(1) for the collection.”
“I think you might be right.”
– = –
I have a hunch that guy was the bar raiser.
– = –
Intermingled in all of the live coding exercises were the typical behavioral questions. All of the questions about how you deal with problems and situations. The good thing is that there are only so many questions out there. The link up there is basically the mother-lode of all of them. The better thing is you can practice.
En and I practiced for probably 8-10 hours over the weekend. It was rough.
Every time I had a problem answering it I made a note. I need to come up with a scenario to cover that situation. Every answer needs the situation, what you did and how it ended and what you learned from it. Every answer must be real and non-rambling. You must be able to delve deeper in case someone starts to dig.
All of them must be true.
Even better if you can link things to the Amazon Leadership Principles.
– = –
At the end, away from me obviously, the interview team gets together to compare notes and vote.
The bar raiser is from a different team that who you’re interviewing with. They’ve had more interviewing training. They also have veto power.
– = –
4/5 – I accepted the position.