Just recently I went through the amazing interviewing process with Amazon. I had really positive experience and I would like to share with you.
Disclaimer: The opinions expressed herein are exclusively my own personal opinions. To the best of my knowledge and understanding, this blog post is compliant with Non-Disclosure Agreement I have signed.
First of all, it is not like any other interview I ever went to. Though, I have to mention that it is also the first time I go through the interview with a tech giant company.
The interviewing process is really language and frameworks agnostic and at the same time it is very code and problem-solving centric. So what happens is that you are not asked about any specifics of any given programming language, but you are expected to write a lot of code on a whiteboard. You are expected to solve problems and your way of tackling problems and your approaches are something that is very important and evaluated.
Now I see how Amazon manages to build great teams and deliver awesome products. In my opinion, this is because they hire problem solvers and people capable of coding and thinking. I believe bias factor is greatly reduced because of the way they do interviews.
Let me take you through my Amazon Interview experience. I have signed NDA, so I cannot share any specifics of projects they are hiring people for, nor it is appropriate to mention exact questions I was asked.
Amazon was organizing Hiring Event in Vienna (Austria) and one of their recruiters contacted me on LinkedIn. I don’t know whether there was anything interesting in my profile or not, but it is how it happened.
If you are actively looking for a job and want to get to the interview with one of big tech companies, seeking a direct referral from within the company is probably the best bet.
In my case, it was one of those rare HR messages which I didn’t want to ignore and decided to pursuit further. I was asked to share my resume. After it was reviewed, I was asked to do an online coding test.
To know whether you are even worth talking to there is a coding test. It is organized online, but you also have the option to program live with some coder.
You can program in any language you feel comfortable with, as long as it is one of the major ones.
My test had three problems to solve, two of which were writing code. It is very similar to what you can get on programming competitions (ACM, TopCoder, etc), but less formalized and with fewer tests. I personally spent way too much time on the first task, because I decided to implement an efficient solution using BFS. Later I realized that any solution that passes tests would be ok as well. So instead of mine O(n), O(n^2) would be fine to get me to the screening session. Two of solutions were passing their tests. I didn’t have time for the third question, so I just wrote that I didn’t have time and explained how I would have solved it.
Screening is just 30 minutes chat. They would only ask you basic computer science fundamentals. Questions would be completely agnostic to programming languages or technologies. I believe, they just want to check that you know basics of programming, you can express yourself and that you will feel comfortable during the interviews.
This is something awesome. My right thumb still hurts because of holding whiteboard marker. Something I really liked was that there was challenge, there was coding, there was problem solving.
Almost all other interviews I had before with other companies were standard boring questions about one specific technology stack, starting from persistence layer moving towards presentation layer. I never had to write code during my interview (maximum few lines of code). And only once I was asked to solve a specific problem for a start-up company.
I had four interviews during the day lasting for 50-60 minutes. For me, it looked like I would get a bit more senior level questions with every next interview, but I may be mistaken. I also don’t know if this is the way interviews are usually organized at Amazon.
So, as I said, I cannot tell exactly what I was asked, but my first interviewer was a person who writes a lot of code himself. He would slowly transition me to the coding task, which was to implement some data structure of some sort. I guess I could be something else as well. I messed up the beginning, but later it was fairly easy and I had the implementation on a whiteboard.
The second one was really interesting. It didn’t have much introduction. There was a coding problem right away. Unfortunately, I was a bit too sloppy on this one. I jumped to writing code too quickly. So, as first solution I implemented three loops O(n^3) and then, with guidance from my interviewer, I switched to writing O(n^2) solution. Somehow, even I was able to solve the problem, I feel I was too quick to jump to writing code and didn’t think enough up front. So, remember – less rush!
The third one was way more smooth at the beginning. Many situational questions. When we switched to writing code, I believe the problem was also more complex. I fairly quickly identified that the problem had to be solved using XYZ technique, but I struggled a lot with an actual implementation. I didn’t manage to have a complete solution, but I hope I was able to convince my interviewer that if I had a bit more time I would have had a complete solution in place.
This one was the easiest for me. There were two designing questions. The first one was object-oriented design for some system. And the second one was system design for the very same system. I didn’t have issues with either one of those (at least I think so).
I was very quick with OO design. I’ve done a lot of design in the past and I believe in core principles of OOD. Besides, I have even written a book on design patterns. That had to play some role.
The system design part also went very smoothly. Probably because I have very relevant experience working for a big web company. Scalability, availability, performance principles for system design isn’t something new to me. I’ve never configured load balancer nor I ever setup Master-Slave-Replica, but I just knew these things and how they are supposed to work. Just by coincidence recently I read “Release It!” book and that could have played some role as well.
In the end, I could ask questions that were most important to me. Like questions about the team, learning and growth opportunities, projects, and technologies.
I don’t know. I’m not there yet.
There is one aspect I don’t like about the interviewing process like this. Amazon, Facebook, Google, Microsoft are huge tech companies that have somewhat similar standardized interviewing process. You can read online about how it looks like and what are common questions. There is even book “Cracking the Coding Interview” that has 189 coding questions.
So hypothetically, let’s imagine there are two deep copies of me. And by “deep” I mean that we both have absolutely identical personalities, knowledge, background, experience. Now we are both to be interviewed in one month. Copy One doesn’t have time to prepare and just looks up what are the main types of questions. Copy Two takes a month of vacation and sits at TopCoder in practice rooms solving, say 300-500 problems. Copy One is also capable of doing it as both of us did some ACM in university 8 years ago. Now when the interview comes, Copy Two just shines and cracks all questions. Copy One struggles with solving problems but manages them somehow. So when the performance of these two copies is compared Copy Two wins. But what hiring company gets is almost identically same with a difference of 1 month of TopCoder practice.
Definitely, there are reasons why the process has to be standardized. It could have been way worse if it was otherwise.
I did prepare myself. Not as much as I would like, though. Buying a whiteboard for kids was definitely a good investment from my side. I did couple of problems on the whiteboard, watched couple of MIT lectures on algorithms, bought a copy of CLRS (I was even ready to use Master Theorem if asked).
I really liked interviewing process at Amazon. I appreciate all the time invested in interviewing me.
Disregard if I get an offer or not, or if I will have to decline it, I won’t change my opinion about this interviewing experience. Just going through Amazon Interview is worth the time and preparation effort.