So, I woke up this morning musing about idealism vs. pragmatism in the field of software development -- but 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.
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
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.
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
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.