A Little South of Perfection: Idealism vs. Pragmatism

Originally posted on: 2012-08-11 on my legacy blog.

So, I woke up this morning musing about idealism vs. pragmatism in the field of software development – but it also applies elsewhere. Many of us at some point or another have had ideas, concepts, visions for a product, bug fix, enhancement and so forth. Whether due to nature or nurture, we tend to strive for perfection, but that’s a lofty (and often impossible) goal to attain and one that’s likely to discourage you somewhere along the way.

How many times have you started a project (be it software or any other kind), for some time you keep chiseling away your idea and then sometime later look at all the work needed to get from where you are at all the way to “perfection” and feel somewhat or completely discouraged (and possibly abandon the idea altogether)? I know I have, many times. So, is the mantra of “aim for the stars” actually a detriment or a self-defeating ideal? Well, I wouldn’t say that; not in and of itself. Aiming for perfection is a good and noble source of motivation, but shouldn’t be your main goal, in my opinion. So, you may ask, “what should my goals be?” Well, without know the specifics,all I can recommend is: a little south of perfection and a bit north of “good enough”.

In the software world perfection might come in the form of 100% test coverage, 100% feature-completeness, 100% automated deployments, properly styled every nook and cranny of your web app and so forth. But, in doing so we face a rather formidable law of nature (that Economists borrowed): the law of diminishing returns and increasing marginal cost. So, how much is it going to cost you to have 95% test coverage vs 91%? How much effort it will take to have your product to be 100% tested/deployed automatically as opposed to having all but two steps being manual steps? How much will it cost you to have your app 100% UI/UX reviewed/designed as opposed to having, say, the 75% most used parts of the UI UX reviewed/designed and the rest get “generic” treatment? In my opinion, even without knowing the process you use or the funding style the answer to all of the above is: too damn expensive. Perfection is expensive, very expensive.

Don’t mischaracterize what I’m positing here. I’m not making an argument for mediocrity and sloppy software. I’m putting forth the argument that a little better than “good enough” is the so-called sweet spot and that perfection, in as good and tantalizing as it sounds, is actually not a place you’d want to pay your journey to. If you want a more concrete example of the message I’m trying to convey, consider Google, for instance. Google strives for “really good”, not perfection. All their services are great (and many of them are right out mind blowing), but none of them is perfect. Their services may lack a few “featurettes”, might not enjoy perfect UI, might do unexpected things, have little bugs, etc. and yet they still are, by any measure, really good products. For something smaller, consider turntable.fm. They’re far from perfect: they lack some key features that should be there for a social app, their phone and tablet apps have a somewhat clunky UI and yet people keep using the service. Why? because the service/app provides a lot of value and works great at its core while leaving the imperfections for “later.”

Just to reiterate, perfection is great as motivation, not as an end-goal. And don’t forget to head a little south of perfection and a little north of “good enough” if you really want to get things done.