I was approached by a recruiter. 1st part was the online coding test. 90min to solve 2 questions. The system is terrible. It prioritizes speed instead of quality. You can't see any of the test results, and some features of your language of choice are not available, or just don't work. It's like coding offline, with a horrendous UI, with secret test cases, and with a short time limit. Your solutions need to pass on 100% of the secret tests cases. After that you need to describe your solution briefly, and provide the runtime complexity. The last step is the behavioral questionnaire.
The 2nd part was the phone call. 30min giving examples in my career related to the leadership principles, 25min to solve an average difficulty coding problem and 5min to ask questions. The live coding is complicated. You have a short description and need to solve it while the interviewer watches every single character you type. Sometimes he asks questions which help you into finding problems. Sometimes he just slows you down. He can ask about runtime complexity and/or to optimize your solution. My solution was far from being great, but, surprisingly, I was called to the on-site interview.
I didn't have to sign any NDA, so there is no problem detailing the interviews. 1st round was probably the bar-raiser. I was extremely nervous, but he did a good job in making me comfortable. 30min giving examples in my career related to the leadership principles, and 30min of a system-design question. The day after the interview I realized the question came directly from the "cracking the coding interview" book. His description was vague, with no requirements at all. You need to act more like a system analyst, a psychologist and a fortune teller than as an engineer. He was waiting for specific answers to questions he didn't ask me.
2nd round: 30min behavioral and 30min to solve an algorithmic problem. The interviewer was clear about not being interested in code. He wanted to see how I would reason to solve this problem. He took a picture of the solution I drew on the whiteboard, probably to analyze it later with better tools and more time. But if he did it for this reason, it's unfair (I wouldn't have more time and tools to work on a better solution). Although my solution worked for all examples he gave me in the interview, on the day after I remembered a case which would make the solution fail. So, my mistake.
After the lunch, 3rd round was entirely behavioral. Nothing remarkable about this round. The interviewer was extremely experienced, and interviewers such as him make you feel like you are in an informal talk with an acquaintance.
4th round, half behavioral, half technical. This time he wanted me to design an LRU cache. I forgot what was the meaning of LRU and asked him (another mistake). He didn't give me limits or any other requirement. After I came up with a stupid simple solution, and he pointed out I forgot the LRU requirement (which he hadn't detailed). I decided to manage the values in the cache using access time, but then he asked me to change the solution to limit the amount of values stored. So, I changed the solution and he asked about the runtime complexity.
Last round, again half behavioral and half technical. This interviewer sounded more impatient than the previous ones. The technical part required me to propose a solution to k-closest points problem, but focusing on OO principles. He asked so many questions and introduced so many different requirements when I was drawing the solution, that I was unable to finish it in time. It's a very simple problem, but imagine being interrupted every 30 seconds (or less).
A few days later I received an email to schedule a call. I knew it right away it was a rejection call. The recruiter from Amazon called me, and I couldn't understand half of what was said, but it was something about some good reviews, but not achieving the overall expectations. I couldn't have a detailed feedback because company policy or whatever. It was, literally, a 57 seconds call. I'd prefer an email.
Unfortunately, the whole experience was negative. You walk out this whole process thinking the day-to-day is about writing things on a white board, with no clear requirements or with ever-changing requirements. I was evaluated more on my capacity of dealing with extremely vague definitions and annoying stakeholders that change the rules all the time than on my problem-solving skills. I made some silly mistakes and I think the rejection is perfectly fair. But the points evaluated are a little bit off. Being a great developer takes much more than requirements guessing.