I wasn't at Google for very long, so my picture of its long-term trend has had to come from other people.

I think Google made several mistakes. First, the language issue. C++ is undoubtedly the right language for some of the work, but their language policy leaves a lot to be desired. A lot of systems that should be in a language like Scala or Python are in languages like C++ or Java. The problem isn't "bad languages", because C++ is not always bad; it's a very small language whitelist and an arrogant dismissal of "Other Languages" that goes up to the top. By the way, Python is nearly deprecated in production. It's used for some projects (such as Google's code review system) but generally the only people using Python for their day job are managers who still code, and then if their ideas take off they make other people implement them in C++. In reality, Google's mainly a C++/Java shop, with Java tolerated in the context of acquisitions.

A limited language white-list, coupled with a willingness to produce huge programs without modularity (Google's codebase is one monolith) produces something like this: http://michaelochurch.wordpress.com/2012/04/13/java-shop-pol... . This wasn't written about Google, and it's probably much less true of Google than of typical enterprise Java shops, but Google's not immune to the illnesses of the large-program mentality.

Ok, this sounds a bit like a religious war, but I think it's generally true that shops using Java and C++ for almost all of their development will very quickly get past the point where one person can have an independent impact-- especially on a 20% basis-- unless that person has above-normal political favor and can always end up on the right projects. Hence, politics. That said, Google was always a C++ shop at heart, and it didn't go to crap until late in its trajectory, so there has to be a lot more to the story. You can't really blame this on languages, or the culture would never have been good.

What I've heard is that the real change came in 2006-9, which is when Google hired a lot of executives from companies like Intel and Oracle, and they tracked a lot of shitty culture into the place. For example, "OKR" is an Intelism. This explanation sounds very plausible. What I was able to see, even in the short amount of time that I was there, was a top-down effort to concentrate power back in the hands of executives, at the expense of engineers. This would have been a creeping campaign, but Google+ turned it into a war.

The language issue was a "tyranny of past success" mistake. In 1998, using C++ for a high-performance service was the absolute right choice. In 2012, C++ still has a place but most new development should be in a language like Scala or Clojure.

The bigger mistake Google made was that it hired a bunch of executives from other companies and didn't tell them to wipe their feet off. So they polluted the place with horrible culture.

Finally, Google+. I don't want to get into too much detail there, but I'll mention that 90+ percent of engineers hate, if not the Real Names policy, the draconian enforcement of it. I don't think RN itself is the source of all the anger-- for some it is, but a lot who are on the bandwagon are mad about other things. I think it's a touch-point for a general sense of engineer disempowerment.

That said, Google is a huge company. If you end up on the right project, it's a really great place to be. I know people who've been there for 5+ years and couldn't be happier there, and there are a lot of cool projects the company is doing (although most of the good work is in MTV; I'd avoid applying to any other office). It has a lot to do with where you land and what alliances you're able to make in order to get the things you need.