Simple Is Rarely Easy

Get The PDF!

Simple Is Rarely

Simple Question: Why Are Simple Things So Hard To Make?

Simple Answer: Because The Process Is Complex

More descriptively, a simple implementation relies on simple rules. Any change to those simple rules often results in a drastic change to the result.

Nature seems to like this way of working though, so we best get used to it. Witness cellular automata, and this little snippet, which took me months to fully understand

function callcc (f,cc) { f(function(x,k) { cc(x) },cc) }

(for the CS people, see Matt Might's Article)

Note that we're talking about a simple implementation, not a simple presentation. Something that is presented simply can still be hoisted up by a trainwreck-like implementation (eg: the iPhone and iPad backed by iOS)

But as Rich Hickey points out, we aren't searching for simplicity per se. Rather, we are trying to avoid "Complecting" -- munging together multiple threads of meaning. Having multiple simple threads is hence considered perfectly fine.

In fact, what we see in nature is a range single-purpose implementations interacting together (using simple rules) to form a working whole. eg: We'd be pretty upset if the heart did any more than pump blood. Heck, it doesn't even need to know the contents of the blood to pump it -- let blood handle the chemical domain, I'll just stick to mechanical action.

Building a heart is a whole different matter, and it's obviously something that's kept people up at night, and which spans too many domains to enumerate. Once you've actually got a heart, then you need to work on the even harder task of getting it to coorporate with the rest of the (legacy) system.

Unfortunately, because of the aforementioned matters, there is no other way to achieve a simple implementation other than to understand to a large-enough degree the factors affecting your implementation, and then to experiment like crazy in trying to achieve the desired goal.

Practically speaking, a generalised Barbell Strategy is called for.

More importantly, we need shared wisdom to distill those simple rules for everyone's benefit. This is far too often an unrewarding exercise, for which the only reward is respect. This leaves a world largely unwilling to share "trade secrets". This is understandable, since there is a financial and social incentive for things to be kept secret.

I certainly keep things to myself, both personal and professional. But I certainly do not believe in the "Why Share When You Don't Have To Approach". (A Stance taken by Google, and many other entities wielding great power)

Fortunately, respect is an intangible, and hence potentially infinite resource. I'll make it a point to start giving more of it. It's the Simple Choice.


Post Credits:

Thanks to Rich Hickey for Clojure, and countless ideas.

Thanks to Matt Might for showing how theory is really practice.

Thanks to Nassim Nicholas Taleb for his ideas on Robustness.

Thanks to everyone who inspired the aforementioned people


comments powered by Disqus