Software Engineering: Does a good engineering culture matter?
Answer by Adam D'Angelo:
A "good" engineering culture directly benefits a company in a few ways:
- The company gets the ability to hire better engineers. Many of the best engineers prefer to work with other great engineers in a good engineering culture, and that gives the company a recruiting and retention advantage. For an example see:"I figured Google would be better [than AltaVista] because I knew more of the people there, and they seemed like they were more technically savvy."
- Engineers are more productive, independent of their skill. This is a result of better infrastructure that builds up over time, a better codebase, more reuse of others' work, less time spent dealing with technical debt, bugs, and firefighting. The differences here can be huge, like 2-5x over an average company and even more when compared against a particularly bad culture.
- The organization can adapt to change more quickly. This is the result of a lot of small cultural effects adding up. For example, in a good culture it's easy to start a new project and have everyone immediately be on the same page about how code is going to be written, how services will be operated, and what is going to be reused from other projects. It's also easy for engineers to go into a project that's already been finished and extend it to support a new feature.
In terms of business outcomes, the sum of all this makes it possible for the company to build products and features that other companies can't, or get things done faster, keep infrastructure costs lower, stay on top in its market, and break into new markets. Here are some examples I can think of:
- The quality of Gmail in 2004 over other webmail products was a direct result of Google's stronger engineering team and culture.
- MySpace just couldn't keep up with Facebook's product development pace, even when it had a much bigger engineering team. I remember talking to an engineer who worked there who told me about how they had this huge list of regular expressions to try to prevent cross site scripting attacks, and whenever there was a new one they would make a new regex to try to fix it, rather than sanitizing html the right way. Things like that add up to a lot of time wasted that could otherwise go into making a product great.
There is obviously a lot more than engineering ability that goes into making a company successful, and it matters more in some markets than others. If a company's engineering strength is directed toward building things that don't matter, the company will be beaten by a competitor with a worse engineering team that's more efficient at getting outcomes.
To address Amazon: My impression is that Amazon has really good processes and it does a lot of other things well aside from engineering culture that make up for its weakness there. Also, I'm sure it still ends up much better at engineering than Barnes and Noble and most of the other companies it competes against.