Pros
- No prior experience needed to join. You don't have to be an expert in distributed systems to get a job. The interviews are also not that tough. If you go through all the interviews posted at glassdoor.com and careercup.com, you should be fine. - Great co-workers. Team work is really good at Amazon and you see heros all around, constantly fighting the madness. - Product moves fast and very little beaurocracy (no three month long project reviews, you deploy the code and see what breaks, then fight to stabilize things overnight).
Cons
I will speak for AWS because that's what I know. One word can sum up the work here - pager. Responding to the pager is what engineers are hired for. You do get to code snippets now and then, but in all likelihood, you will write more code during the interview than in your actual work at AWS. There is an elaborate system to track who's supposed to respond to the pager when, who all that person can then page when he's unfamiliar with the problem (happens a lot), how many pages were encountered during the day, how many pages were encountered during the night, what to do if you see the same issue when you get paged next. Everything, expect how to fix the problem that caused the page. Yes, that's discussed superficially at meetings, but then there is no one to actually go and do the fix, because all the engineers are attending to the pager, or waiting their turn to do so. People keep joining and leaving the team every month ( it's a "revolving door"). At the end of my eighth month, I was the second seniormost person on the team. Most people who hang on beyond a year have under water mortgages or kids in college to pay for. If you do join AWS, don't at least buy that million dollar condo.