The Complexity of Simplicity - a talk by Bryan Cantrill

I have always been fascinated by the concept of simplicity in software design. Recently, I had the opportunity to listen to a talk by Bryan Cantrill titled “The Complexity of Simplicity.” In this talk, Bryan delves into the intricacies of software complexity and the importance of abstraction in managing it.

Here is a link to the talk and here’s an earlier blog I wrote on software complexity.

Here are my lessons I have picked by listening to Bryan Cantrill laced with my own interpretations.

  • A good abstraction hides the gory details.

  • Bad abstractions leak: instead of sealing implementation details. End results are systems that are unwieldy and brittle.

  • Accidental complexity _adapted from Fred Brooks’ paper - No Silver Bullet _ , is the kind of complexity that’s induced in a problem with that kind of entanglement. Essential complexity is the kind that is endemic to a particular problem.

  • Your accidental complexity can easily become someone’s essential complexity.

This resonates so much. I have worked on a number of developer tools. Part of my thinking has always been making things simple enough to enable someone use a tool with minimal documentation. I have encountered tools that are so hard to use even with documentation because the abstractions are so hard to untangle.

  • Focus on essential complexity and eliminate accidental complexity. (This is an EVERYDAY BATTLE in software engineering)

  • Controlling complexity is the essence of software engineering - Brian Kernighan

  • When simplicity in the abstraction is a non-goal, you do not know what to say no to.

  • Focus is the art of saying NO.

An informative diagram from the talk:

infogram