Should we pursue simplicity?

Simplicity and minimalism are often thought to be idealism of choice when it comes to design these days. Software design should be simple - often means it should be straightforward without excess complexity. What amount of complexity is considered excess? Code should be simple - often means it should be clean code that is easy to read, well thought out without eschew obfuscation. Interfaces should be simple - can mean anything from containing a great deal of automation to it being easy to use to providing a lot of flexibility. While these are all desirable attribute, what people actually mean when you ask them about simplicity depends on who you ask. Some will love some notions of simplicity, e.g. flexible or clean, and others will absolutely hate it.

Its use is more than just as a vague qualifier to compensate for lack of vocabulary. Its definition outside obvious malpractice - e.g. trying to sell the latest fads like a data lakes or enterprise warehouses - often are very subjective. When someone says their design is simpler, what they often try to mean is how they are a better engineer that you. The underlying cause can be anything stupid from less number of lines of code to less number of system components inside a monolith or outside it for that matter. This need not relate just to individuals. Some extremely creative to some extremely terrible designs and implementations have been sold in the name of simplicity.

Does that mean simplicity is not something worth the practitioner's pursuit. I don't have a magic crystal so I'll admit, I don't know for sure. However, my opinion is that the opposite is much worse. Imagine teams ignoring business needs and pursuing nerd driven or otherwise objectives of using certain technologies or architectural choices etc. I once got into an argument with someone who thought producing mathematically correct software was more important than user satisfaction or business needs. He may have been a special case but they are more common than you'd think. I think some people get a sense of satisfaction in making things more complex. It's just like how some people forget the point of writing and take satisfaction in replacing every word with the hardest sounding synonym from their thesaurus. It is some form of ego stroking or ego fulfilment around trying to seem smart.

These notions are beyond the argument for simplicity or complexity. They cut across ethics, egoless programming, being market oriented and much else. However, on this debate, I like what Einstien said on complexity:

"Make everything as simple as possible, but not simpler."

This needs careful interpretation. First part of the quote is something along the lines of Occam's razor which says the simplest solution is the best solution. Along this lines, Einstien is often misquoted to say: "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius—and a lot of courage to move in the opposite direction." This quote is actually from the economist E. F. Schumacher on his work "Small is beautiful".

Second part of Einstien's is much move valuable which tells us not to overdo it. Simplicity, here is recognised to be just another heuristic much as the other notions of correctness or straightforwardness. Heuristics are only useful as a guide and are not meant to be taken to extremes. If you try to avoid complexity altogether, you will have a no software project.

On the same train of thought, this needs to be reconciled with business needs. What is considered to be "inelegant" due to complexity to some can be the source of competitive advantage for some business. You can't make all customers happy with a lean MVPs and super user experience considerate products that are over optimised for the average market segment.

In summary, I don't think elevating any notions like minimal  and simple or complex and sophisticated to absolute is a good idea for producing good outcome. They need to be recognised for what they are - heuristics and used with caution.


Popular Posts