Pros
Smart, driven people. Lots of code to write, many problems to be solved. Code quality is *generally* OK, but varies wildly throughout teams and projects. Little bureaucracy
Cons
High operational load, which is effectively suffered silently by the SDEs. On-call for engineers is a perfect representation of this; the complex web of interacting services are constantly changing, and having engineers on call 24/7, 365 is how Amazon handles this issue. This varies by team, of course, but it is not at all uncommon to get woken up in the middle of the night to fix a problem, be up for a few hours, and then put in 8-10 hours the next day. Amazonians, being generally hardworking and dedicated overachievers, tend to accept this operations load during their core hours and do project work and programming in the evenings or on weekends, in order to make progress and actually get things done. Management doesn't outwardly show that they recognize this at all, and schedule projects and deadlines accordingly, assuming that an 80 hour week is a sustainable pace for their teams to be working at. Because of all of this, working at Amazon is essentially 25% amazing (rewarding, sane project work), and 75% firefighting. And while politics can be avoided somewhat, there's a marked Machiavellian feeling in the air.