Last Fall in 2015, I interviewed with Amazon Web Services for a senior web developer position and was eventually offered a job with one of the AWS teams. Interviewing with a massive tech firm like Amazon was a significantly different experience than with any other company I’ve interviewed with, and I want to talk about how it all went down. How the interviews were structured, what all was discussed, what questions were asked – all the way down to getting flown out to onsite interviews and eventually getting the offer. As I was going through the interview process, I read posts on several forums by people who went through the same thing – and they were helpful, but they never got very deep. Not much of it applied to me, and it would have really helped me to feel more comfortable throughout the process if I could have found a true documented experience by someone who had gone through this before. This is my chance to make that happen for you, the future developer interviewing at a global tech firm. Spoiler alert – I did not accept the position, even after the entire interview process. We’ll get to why I made that decision, but first let’s start from the top.

Interview Structure

You can break my particular interview process up into a few segments – and that’s how I’m going to talk about them:

Phase 1 – Getting Recruited

Phase 2 – First Phone Interview

Phase 3 – Second Phone Interview

Phase 4 – Onsite Interviews in Seattle, WA

Phase 5 – The Offer

As far as my research went, this is more or less the same process that most developers went through who interviewed with Amazon, Microsoft, Google, etc. However, I read a few stories of developers having 3 phone interviews instead of 2, so your mileage may vary. I’ve bored you with enough of this meta-information – let’s get to the meat of the process.

Phase 1 – Getting Recruited

As a developer, I get hit up a lot by tech recruiters either through email or LinkedIn, and honestly I tend to ignore most of them or – if the recruiter sent a half-way decent message – respond politely, declining their request. However, one day in August of 2015, I received a message by a recruiter – but not a normal 3rd-party tech recruiter like I normally see. This was a recruiter working at Amazon Web Services, specifically searching for a Senior Web Developer with one of the AWS teams. From the very beginning, I took it very lightly. I responded saying that working for Amazon would be awesome, but for me and Layla to move up to Seattle would require a 170-200k salary. I assumed this recruiter would take a look at that number, scoff, and politely end our conversation – but she affirmed that they could work with that, and asked if I wanted to set up a phone interview.

I was pretty shocked – but I told her I’d bite. I’ll play along for now. After all, how many times do you get to interview with one of the most influential companies in the world?

Over the next week, I emailed with this recruiter and her hiring manager to complete some basic paperwork and to schedule a date and time for my first phone interview with AWS.

Phase 2 – First Phone Interview

My first phone interview was scheduled at an exact time (2pm) with the manager of the service that I was interviewing for – so basically my intended future boss. I remember I spent the whole day looking up common interview questions for programming, and watching a lengthy video series over data structures so that I knew the time and space complexity differences over iterating between arrays, hashes, binary trees, etc. A few minutes after 2pm on a Friday, I received a call from the manager – we’ll call him Bob (not his real name). All in all, the phone interview lasted about 1 hour and 10 minutes – and it really wasn’t technical at all. No coding, no super-deep programming questions. Initially, the phone call seemed a little bit “bureaucratic” in the sense that I had to verify that I was expecting this call and made sure I had allotted a full hour to speak – but it quickly became very relaxed.

Bob started off with just asking about my general skill-set, and told me a little bit about what the position entailed. After about 20 minutes, we segued into other questions. He asked me if I could explain a single-page app, what MVC was, and he asked me a time when I disagreed with my manager. I hate those types of situational questions – but it wasn’t too bad. We spent about 20 minutes talking about that one question. After that, we just made some small talk about weather, what Bob does, the fact that it was Friday and he was taking it easy, etc. The last 20 minutes were really chill, just 2 people talking. Neither of us were bothered by the fact that the interview had gone about 10 minutes late.

Before we got off the phone, I asked for Bob’s email address (with the intention of sending a thank you email later in the day). I was told that I would hear back within the next week about whether I made it to the next interview. This part was pretty crazy to me, because it wasn’t even a full hour before I heard back from the Amazon hiring manager saying that I had passed the interview and they wanted to schedule another phone interview with someone else to assess my coding abilities. This next interview was scheduled for the following Thursday, this time at 3pm.

Phase 3 – Second Phone Interview

Unlike the first phone interview where I had no idea what it was going to be like, I knew ahead of time that this interview was going to involve me coding for an hour. I was given a link for a service called CollabEdit where I would code inside of a text area and the interviewer – let’s call him Jim – would be able to see in real-time what I was coding.

Jim called promptly at 3pm, and told me a little bit about himself. He was also a manager, but in no way related to Bob or Bob’s team. Jim was someone who I would never work with, and was strictly there to assess my coding skills. He told me he had 4-5 questions for us to get through, but if we only got through a few, then that would be fine. The emphasis was on him assessing me, and not necessarily completing the questions.

For about 45 minutes, I coded with him on the phone. I had a bluetooth headset and mic while I was coding, which I highly recommend anyone else do. I couldn’t have done this with my phone held up to my ear by my shoulder. We spent the entire 45 minutes on one question. Just one. And it was about client-side javascript. The single question was about how would I find all HTML elements on a page by class. Within the first line, I started with a simple jQuery selector – which he said worked. But then he slowly started giving me constraints. How would you do this without jQuery? How would you do this with multiple classes? Can you use a wildcard selector? etc. We spent the whole time on that one question; it was actually pretty fun – we both got really into it. My biggest tip here for anyone in this same position is to talk about what you’re thinking. Jim’s just a man on the phone who can see what I’m coding – but he doesn’t know what’s going on inside my head, so I need to help him with that as much as I can.

Towards the end of the hour, Jim stopped the coding session and asked if I had any questions for him. We then talked for a minute, and he told me something similar to what Bob said – that I would hear back within the next week, but this time, instead of another code interview, the next step would be an onsite interview. He did tell me that he’d had good interviews and bad interviews in the past, and he felt good about this one. This interview was on a Thursday, and I heard back the following Tuesday evening that I had passed onto the next (final) round of interviews.

I was going to Seattle.

Phase 4 – Onsite Interviews in Seattle

I got the email that I had made it to the next stage of interviews, and was asked what dates would be best for me to fly to Seattle for the interviews. This email exchange took place on September 9, and the dates matched up for me to interview in Seattle on October 12. Once the date was set, I was given the information of an Amazon travel agent (run by another company) to call and schedule airline times and whether I was staying 1 or 2 nights. My interview was on a Monday, and I was offered to fly up on Saturday and stay two nights – but I opted to fly up on that Sunday, and then fly right back to OKC directly after my interviews on the Monday. Just a 1 night stay. This is all paid for by Amazon, by the way. I didn’t have to give a credit card number at any point in time.

Once October 11th came, I flew to Seattle and stayed at Hotel Ändra in downtown Seattle. To get around, Amazon told me I could take a cab, Uber, public transportation – anything, and they would reimburse me up to $100/day for food and travel combined. I took the Light Rail directly from the airport to downtown Seattle for $3. Talk about a deal. For dinner, I just got room service. Eating dinner out alone is just … lonely.

My interviews were scheduled to start at 9:45 am on Monday, and were to finish at 2pm. I woke up early, got breakfast by the sea, and explored Pike Place while it was opening up for the day. Definitely a neat experience. From there, I just walked to the interview building.

Amazon encouraged me to dress casually, but I still dressed business-casual (button up, dress pants, no tie). Throughout the day there were 5 back-to-back interviews, each one-on-one. All coding was done on a white board. No electronics involved at all (except for the interviewer taking notes). Here’s the breakdown of my interviews:

Initial interview with a team member I’d be working with. 50% discussion, 50% coding.

2nd interview with a developer on another team. 20% discusion, 80% coding. This coding session involved more “traditional” coding interview questions. The main question was about how to build a circularly linked list, and how would I add a method to delete a node and have the linked list still be circular. I started answering this in C, but after my knowledge failed me, I just moved to ruby, which was significantly easier for me. The interviewer was cool with it, even though he didn’t know ruby.

3rd interview with a developer on another team – strictly to assess my personal skills. These were the “fun” situational questions (mixed in with some personal experience questions). 100% discussion, no coding.

4th interview with Bob – the manager of the team. This was over lunch which he paid for. It was mostly casual talking, but he asked me some technical questions as we were eating.

5th interview with a developer on another team. 20% discussion, 80% coding. This was a very front-end oriented interview. All code involved web development topics, HTML, CSS, and Javascript. One question was how an interaction with a JSON API is different from standard HTML, leading up to how single page apps work – so I basically drew a simple diagram of the request process for a single page app. The main coding question was how would you build a slider (like the ones you see on every page). I stumbled on this at first – as it seemed like a crazy interview question, but I took it one step at a time, i.e. a slider is just a wrapper element with child elements. The CSS should just position them absolutely next to one another. Clicking arrows should just issue JS to shift positions of those divs.

After my final interview, I had just over 2 hours until my plane took off (I wanted to get back home as early as possible). I booked it to the Light Rail station, spent another $3 to get to the airport, hustled through security and made it minutes before my boarding time.

If you go through an interview process like this, here’s a big note: don’t bring checked luggage. You’re staying for a very short time, try to keep everything carry-on. Checked luggage will just be a pain to deal with.

Phase 5 – The Offer

Back in OKC, it was either the next day or the day after that I got a call from Amazon’s HR department. I was told that Bob liked me and they had an offer for me. I won’t get too specific, but it was in the low 6 figures (plus a bonus) – definitely not the 170-200k the initial recruiter told me they could do. Restricted stock units (RSUs) were a part of their overall benefits, and made up about 2k of salary for the first year. They made up a little more after the second year, and would have maximized by year 4. In total, it probably would add up to 40k of stock after 4 years – which isn’t a petty amount. Regardless of salary, I was honestly pretty shocked that I had gotten an offer, and told the HR person that I would get back to them within a week after I discussed this with my family.

This is probably terrible to say, but everything was a game to me up until this point. I never in a million years thought I could get picked up by Amazon – but here it was, the opportunity. We spent that whole weekend deciding what we wanted to do – but in the end, we made the decision not to take the offer.

Relocation cost wasn’t an issue – Amazon pays for all of that, and goes above and beyond to make sure you assimilate to Seattle well. The other benefits that Amazon offered were pretty stellar too, but there were two big reasons holding us back:

Cost of living. Here in OKC, we have super cheap cost of living. In Seattle, we would be paying twice our current house payment for a mid-level downtown one-bedroom apartment, and 2.5 – 3 times our house payment for a two-bedroom. Houses were pretty much out of the question – anything comparable to what we had here that was near downtown Seattle was anywhere from 600k – over 1 million dollars. Sure – the offer I got from Amazon was twice what I made here in OKC at the time, but that was still just too much for us.

Family. This was the big deal. We never really thought about leaving family – until we were forced to. We just couldn’t do it. We have parents, friends, siblings, and nieces all within a few miles that we see just about every week, and we just didn’t want to give that up.

It was difficult, and I did wonder for a few days or so if we had made the right choice – but I’m positive we made the right decision to deny the offer. I explained the whole situation to the HR person I was working with, and he was very kind about it and congratulated me on getting the offer nonetheless. For me, this was truly the opportunity of a lifetime, and I’m so thankful that Amazon was awesome enough to let me have it.

Final Thoughts

I’m sure some of you out there would kill me for not taking the opportunity to work at Amazon – but I promise you, we made the right choice for us. We belong here for now, and going through this process showed me that big time. Plus, with the OKC developer community really growing within the last couple of years, I’m not sure I ever want to leave now. We’re rooted, and I’m happy about that.

Thanks for all of this, Amazon.