OdeToCode IC Logo

Antifragile Software

Friday, June 21, 2013

AntifragileNassim Taleb’s book Antifragile: Things That Gain from Disorder is a celebration of volatility and the systems that not only survive stressful conditions but thrive and become better when faced with irregularities. The book spans economics, medicine, politics and more, but it’s easy to read the book and see how the concepts apply to software applications and software development.

The Netflix chaos monkey is one example of how volatility can improve software. Failure recovery becomes “easier, faster, and eventually automatic” when the monkey is terminating random services in a complex distributed system and exposing weaknesses.

Some of Taleb’s points include:

Avoid Decision Makers With No Skin In The Game

An example is the software architect who makes decisions without writing code or dogfooding their own decisions. As Jeremy Miller once said: “designs get better faster when the designer has to feel the pain from clunky designs and adapts to alleviate that pain."

Small Is Efficient And Beautiful

Those who follow principles like KISS and SRP know that small, focused abstractions are easy to read, write, and maintain.  But “small is beautiful” is also applicable to systems themselves and is a core tenet in the UNIX Philosophy. Users also value simplicity in software applications. Witness the success of Dropbox over more “fully featured” file sharing applications.

Think Of Cats, Not Machines

The software industry tends to visualize schedules using precise Gnatt charts, work in progress items fall into swim lanes and ordered backlogs, classes can be neatly arranged into architecture diagrams, and someone generally creates an aesthetically pleasing network diagram for every distributed system. We tend to think of people, processes, and software as things that act logically and are easy to categorize, however all three are organic and can replicate the inexplicable behavior of a cat. The last decade or so has shown that thinking in a way that embraces uncertainty and change will generally lead to happier teams, happier users, and better software.