The ever-voluminous Steve Yegge wrote
an interesting post back in 2012 about liberal and conservative elements in programming. By "conservative", he means practices that emphasize safety and rigor; "liberal", conversely, emphasize freedom and flexibility. He then used these labels to categorize programming languages, features, development practices, and cultures.
Here's what he had to say about Google's engineering culture:
Google -- Diagnosis: Conservative. They began life as
slightly liberal and have grown more conservative ever since. Google was
only software-liberal in the very very early days, back when the search
engine itself was written in Python. As they grew, they quickly
acquired a software conservatism driven entirely by the engineers
themselves. Manifestos were written about the dangers of using multiple
languages, and strict style guides were put in place to severely limit
"risky" or "hard to read" language features of the few languages they
did allow. ... In internal
surveys, Google engineers commonly cite bureaucracy, churn and
complexity as core obstacles to feature advancement and rapid launches.
Google has made serious attempts on several occasions to reduce this bureaucracy, but they always get pushback from -- surprise -- the
engineers themselves, who have grown so staunchly conservative that they
actively (and even more often, passively) resist the introduction of
more flexible stacks and technologies. ...
Having seen Google from the inside, I can say Steve nailed it. I had expected Google to be sort of an over-grown startup, a really intense place where you had to work extremely hard, but where you had a lot of freedom to do things however you wanted, as long as it worked. What I found was something quite different: a culture that was incredibly strict[1], top-down[2], and bureaucratic[3].
If Steve is right, what I expected to find at Google is actually found at Amazon and Facebook.
[1]: Check out the
C++ style guide (click "Toggle all summaries" to see the document in its full form). Then consider that the code review culture routinely enforces all of it. I remember having check-ins rejected for spaces at the ends of lines, for example.
[2]: I still think I should have quit or transferred the day my lead rejected the fifth rewrite of a design document.
[3]: The most prominent manifestation of Google's bureaucratic nature is the "promo packet", an elaborate document used to apply for promotion. It is typically at least a dozen pages long, with a long series of testimonials by the applicant's bosses and peers singing his praises for the promotion committee. It's like going up for tenure or a partnership, but it's done for every step up, not just once in your career.