Pros
* Great Co-workers. My experience has been overwhelmingly positive in this area. My co-workers are smart, motivated, and trustworthy. I can count on them for design and execution. * Great products. Loving the product you work on is great motivation for getting up in the morning. * Engineer-oriented. Product managers for the most part do not call the shots. Engineering bears most of the responsibility for design, timelines, etc. * Flexible hours. Performance really is king; engineers have a lot of flexibility in deciding when to come in and leave. * Food. Delicious. * Idealism. "Don't be evil" isn't just some marketing ploy that insiders scoff at. There's a real culture of accountability. * Stability. I heard of no one in engineering that was worried about their job due to the global economic crisis. * Scale. You're probably working on something millions of people use. There's great job satisfaction in that.
Cons
* Limited upside compared to a start-up. You don't come to Google thinking you're going to strike it rich in one fell swoop anymore. This is the price of stability. * Company has grown quite large. There's something intangible that changes with growth, and even getting to know everyone in your extended team can be hard. There are no all-company events anymore. These have been replaced with organization-specific events. * Management quality varies. I have a great manager but I've heard horror stories. * Your initial project is assigned based on expressed preferences and relevant experience. It may take time to get off of it if you don't like it. * Ramp up may take some time, but don't get discouraged as this is expected. The software stack is almost all in-house and so there's indirect transfer to other systerms.