Taming Complexity with Reversibility

Kent Beck wrote a lovely note on Facebook on the strategy the company adopted to fighting complexity:

Taming Complexity with Reversibility

He argues that complexity is the biggest enemy to scaling. And complexity, in turn, is driven by four different attributes of the system:

  • States. When there are many elements in the system and each can be in one of a large number of states, then figuring out what is going on and what you should do about it grows impossible.
  • Interdependencies. When each element in the system can affect each other element in unpredictable ways, it’s easy to induce harmonics and other non-linear responses, driving the system out of control.
  • Uncertainty. When outside stresses on the system are unpredictable, the system never settles down to an equilibrium.
  • Irreversibility. When the effects of decisions can’t be predicted and they can’t be easily undone, decisions grow prohibitively expensive.

A successful complexity-fighting strategy must focus on eliminating one of those attributes completely and figure out a way to manage the rest.

Since uncertainty is a factor of outside forces that our by definition outside of your control, it is extremely hard to design a strategy focused on it. Strategies focused on reducing the number of states are effective in some cases (Henry Ford’s Mass Production is a notable example). But in complex systems, like software, managing states and predicting interdependencies is incredibly difficult. So instead Facebook chose to focus on eliminating irreversibility in almost everything that they do with their software: for introducing “feature switches”, through doing gradual deployments to having backup internal communication channels in case the site crashes.

A rather compelling case for auditing the full spectrum of decisions your organization makes, identifying the ones that are currently irreversible, and figuring out what it would take to make them reversible.

Taming Complexity with Reversibility

One thought on “Taming Complexity with Reversibility

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s