Simplest Thing

An *agile-biased* blog would just not be complete with at least *one* article on TheSimplestThing… so here goes:

I has occurred to me [and no doubt, countless others] that after all that has been said about TheSimplestThing; there is no simple definition. The irony does not escape my sometimes blindingly slow wit, but simply put, simplest thing has not [yet] been defined with the simplest definition that can be agreed on. If simply defining a concept is not clear, how can it even be implemented?

Fortunately it seems that TheSimplestThing technicality is mostly a debate of semantic correctness but when pursued it becomes a philosophical fisticuff. You can start by asserting TheSimplestThing is X and find yourself arguing, moments later, that Such-And-Such is not TheSimplestThing because it isn’t Y.

In an attempt to capture the essence of TheSimplestThing, we use:
a) dictionary definitions
b) authoritative quotes
c) classic one-liners
d) Occam’s Razor

The dictionary definitions are the most controversial because they mix complexity and complicated [and in fact use them as direct synonyms] in order to define what is simple: ie. that which is not complex/complicated. In software, however, complicated and complex have very distinct meanings.

In fact, the two can never be used synonymously because their differences are big enough to create more potential chaos than a power-crazy nuclear arms dealer on crack. So, we can choose our words carefully with these two, unless we agree to use them synonymously but then to be specific about which one we are talking about. Or just keep the definitions distinct: surely that’s the simplest thing? 😉

Personally, i maintain that TheSimplestThing is a bit of misnomer- a red-herring- a goose chase- a magic mushroom. I prefer TheLeastComplicatedThing. That way, the solution can still be intuitively *complex* [if need be becos, well, the requirement is complex] but at least, and most important, simply understood.

Further Reading:
Simple Ain’t Easy
A Field Guide To Simplicity
complex vs complicated, + xaos
No ! Your software is complicated, not complex.

Seduction of Reduction

There are many definitions for reductionism but the most fitting here is
…complex systems can be completely understood in terms of their components
…the analysis of complex things into simpler constituents

Aaahh… this is the stuff of programmers. Give us any complex problem and we can quickly break it down into simpler consituents and provide a solution. Unfortunately, this habitual mode of thought also stops us from *really* seeing things they way they are.

The problems we deal with are indeed complex, but by no means linear. By this, i mean that the impact on the global system of a proposed solution in one area cannot always be accurately predicted. This becomes particularly true as the scope of the system increases. Manifested, we look to the codebase to see how this principle plays itself out.

As the codebase grows, small changes may ripple across the system and produce undesired consequences somewhere else. This is not always a design flaw, but can be attributed to the natural evolution of the system. However, in both cases, you end up with the same emergent non-linear complexity. Wether it falls into complete chaos or not is another discussion 🙂

Our linear reductionism works effectively in small systems where the number of interacting components is easy to snapshot at any one time. As it grows, we need to adapt our thinking to facilitate this shift in complexity. This pattern of thinking i call, Density Dependance, adapted from a similar concept in the research of AI.[1]

When we start finding that our habitual reductionism starts letting us down [manifested most notably by statements like: “Aaah.. yes, i forgot about that”], we should flag ourselves to start actively looking at the global properties of the system and start thinking about solutions “holistically” [ although i’m quite hostile towards that word itself 🙂 ]. How we think directly depends on the density of the solution, and conversely, the density of the solution depends on how we think.

Ironically, loose coupling contributes towards complexity through perpetuating the fallacy of composition, yet, it’s [LC] considered a good practice.
If all my components are reusable, i should be able to plug ‘n play different components- thereby making TheSystem itself a reusbale component.
Integration is easy? Not that loose coupling is a bad idea. It’s just funny, is all 🙂

Even more funny, when business employ reductionism to negotiate deliverables, dev reacts badly:
If it takes one developer 4 days to do the job, then it should take 4 developers one day. So why can’t we ship on Tuesday?
Again, we’re never really engaging with any kind of linearity, so that kind of maths won’t fit. And software delivery is complex [on many fronts] but governed by a few deeply simple rules in order to manage the complexity. Get your simple rules right, and it’s B-E-A-Utiful 🙂

And again, the theme keeps coming up time and again– even they way we think about our project should just be one of many tools we have available to deliver successfully what we, as programmers, agree to deliver.

[1] Brooks, R, Cambrian Intelligence, MIT Press, 1999

Crime Expo

[Ammended: 9:15pm]

Crime Expo South Africa is attracting a fair amount of attention of late. With good reason. South Africa relies on tourism and foreign investment for growth, notwithstanding 2010, when we have the honour of hosting the greatest game on earth 🙂 But how long can we pretend that all’s well when there’s serious trouble [not without good evidence] in paradise?

What’s more troubling though are the many responses to the site from people of all walks of life.

find more “civilised” :p debate at:

The Civic Platform
The Unbroken Barometer

I find it deeply troubling [irony aside] that many “peaceful” saffers would advocate crime [hacking] as a solution to combat something they don’t like. Oops. Although not meant to be serious and more said out of frustration or bursts of emotion, i do hope the site remains up and gets tested against time. further, this site is a showcase for our tolerance and commitment to democracy and freedom of speech. so let it be…
personally, i’m already bored with that site that ‘cos it’s just so negative- it ruins my day completely! but that doesn’t mean i’m not ignoring crime- that’s still a big issue for me. i need something to be done about it… but i’m pretty sure there are better ways of doing it…