“In everything…uniformity is undesirable. Leaving something incomplete makes it interesting, and gives one the feeling that there is room for growth… Even when building the imperial palace, they always leave one place unfinished.”
Japanese Essays In Idleness – Kenko Yoshida (14th Century)
Imperfection in architecture, design or the fine arts is beautiful. Even my year old iPhone, as pretty as it was fresh out of the wrapper, looks better now for it’s hard earned patina of fine scratches.
But what about software? We don’t stand for imperfection in software, they’re called bugs, defects or issues. Perfection in software is important, indeed, bugs are unacceptable and so if you believe Yoshida, aiming for anything less than perfect creates a contradiction. Or does it?
From the New Oxford American Dictionary:
perfection (noun): the condition, state, or quality of being free or as free as possible from all flaws or defects
Aha! It says “as free as possible from all flaws”. Apparently perfection leaves some room open for imperfection. OK we’re off the hook, perfect doesn’t mean perfect! What a relief, I can stop worrying about failing to achieve perfection, or worse, not even starting for fear of failing to achieve perfection.
The fool’s gold of perfection in software terms is the bug free product that boasts every feature you could ever desire. Assuming that’s not possible (trust me it’s not) and given bugs are unacceptable, the only way out is to provide less features. Therein lies the key to shipping great software, it has to do less. Unconstrained featuresets produce software that is sprawling and unstable, assuming it ships at all. Constraining the featureset of software makes it robust, usable, unpretentious and elegant. A perfect imperfection.