Distance Debugging Logo

I've been reading the book Collapse: How Societies Choose to Fail or Succeed, by Jared Diamond for the last few weeks. It's a fascinating read, and I highly recommend it. One of the key points that I've taken away has to do with the correlation between degree of environmental fragility and a society's level of risk aversion. Societies living in fragile environments often make a series of missteps until they upon something that works, but then become incredibly resistant to change. This makes sense since, in their experience, things that they have tried have been much more likely to result in disastrous failure than in improvement. This has carried over into even modern societies that live in these environments, such as Iceland. For contrast, societies in places such as in New Guinea, which have a somewhat forgiving environment, tend to seek out improvements and are constantly looking for ways to get more out of their resources. In their experience, constant tinkering tends to result in successive improvement, and changes that result in failure are rarely tragic.

What does this have to do with software engineering? In my experience, a culture of risk aversion has arisen within many successful organizations. I believe it plays out like this: an early group of risk-tolerant developers (such as in a startup) go out on a limb to do things differently, whether it's develop a new genre of software, or simply attempt a style of development, as happened with the rise of agile methodologies. They either experience success and continue to exist, or they fail and disappear. It would seem like this results in software organizations that are built on risk-taking and would thrive in this manner, but the key is what happens next.

Slowly, this original group of risk takers retires (especially if they were made wealthy by their early success), or moves on to other projects. The people that come in to replace them are often more "serious", and are devoted to keeping the company going rather than innovation. Like the inhabitants of fragile environments, they excel at keeping a steady hand, and since they are taking over successful enterprises, they are rewarded for preventing change, since in their experience, change can lead to disaster as frequently as it can reward. Doing nothing is for them an excellent strategy; the missed opportunities won't show up on the balance sheet the way that failed attempts will.

I'm sure many of you who have worked for large or even medium-sized enterprises that exhibit these symptoms, which I call Management by Saying 'No'. It's the default answer for any change in policy, any innovative program, or any request to go beyond the circumscribed activities that have brought success in the past. Since the managers who have been the best at saying 'No' are seen as "good at managing risk", they are often promoted into higher positions of power, and the idea permeates deeper.

Is this attitude justified? Is the world of software Iceland, or is it New Guinea? I would argue that companies that aren't afraid of being unorthodox, or flying in the face of common wisdom are big winners right now. One only has to look as far as Apple (you'll never build a business selling mp3 players!) or Google (you can't possibly earn enough revenue from advertising!) to see that it might be a little more New Guinea than many companies make it out to be. As a developer, that makes me happy, because I ultimately want to believe that software is a fertile world where unlike architects or doctors or aerospace engineers, we have the freedom to take risks and innovate in a forgiving world. That aspect is one of the things that attracts creative people, and I fear that management by saying 'No' will squeeze this element out.