In 2012, by some crazy stroke of luck I was invited to participate in the Diablo III Beta program. It had been 12 agonizing years since the last iteration of the game was released (not including expansions). 12 years is a long time to wait for any sequel in a successful franchise, but even more conspicuous for a giant game company with deep pockets like Blizzard Entertainment.
But Blizzard seems to relish being perennially behind schedule, because as they say, they are making the game 'perfect'. "The game will be ready when it's ready" was the hardline mantra from Blizz. A uniquely-Blizzard smack of self-righteous indignation, like a bloody cudgel to the collective breastplates of the legions of increasingly frustrated but loyal Diablo fans.
On one hand I admired Blizzards' desire to release a product that is polished and ready for release into the big bad wild, but on the other hand I just wished they'd get on with it.
In life, as in software, there are a lot of good reasons to strive for perfection. Quality, reliability, longevity, etc. But most of the time singular focus on perfection is a dangerous illusion. Obsessively striving to perfect something often comes at the expense of all other factors of success. These are costly sacrifices to time, money, and in the case of many Diablo fans, sanity.
Here are a few of the more common casualties of chasing perfection:
- Diminishing Returns - The effort required to polish something beyond discernible improvement is rarely worth it. Will your users even notice, or more importantly appreciate these efforts?
- The 80/20 Rule - The final 20% of any project usually takes 80% of the effort. Moreover sometimes the last 20% can be so unreasonably difficult that all previous effort needs to be scrapped. This is how good ideas get scrapped.
- Lost Time - Excess time spent honing tiny details could be spent working on future phases, while users can invest themselves much earlier.
- Lost Feedback - Delaying releases also delays some of the most vitally important insights and feedback from users. Critical bugs are one thing, but maybe that awesome feature you thought people would love sucks? How will you know?
- Flawed Design - Software designed with perfection in mind is idealistic in nature and often plagued by inflexible architecture and poor integration. In these cases, design trumps compatibility and you end up with a system that doesn't play nice with anything else.
- Cost - It's just plain more expensive to work on something for 10 years than it is for 5 years.
- Opportunity Cost - What new features and suggestions could have been implemented in the time it took to polish every dark recess of the code base? How much market share has been lost while your competitors capitalized on your inactivity? How much money has been forfeited from a lack of new features or major releases?
- Technology Decay - Technology is inexorable and cruel, leaving behind antiquated versions of legacy software in favor of anything faster, cheaper, better or newer. Suddenly your state of the art system is a stinky pile of legacy garbage that nobody wants to touch.
- Paradoxical Refining - Obsessive second-guessing can lead to valid or otherwise satisfactory features being changed repeatedly, sometimes for the worse. Ever agonize over something (like a blog entry) until you had thoroughly mangled an otherwise acceptable success?
Perfection in software is an illusion. As an example, many modern quality assurance practices like zero defect testing, though well-intentioned, are often distorted by the pursuit of perfection. The intent in seeking software perfection is admirable, but the goal is impractical or unattainable. Slavishly chasing perfection can seriously jeopardize the overall success of a project. Desire for perfection should be tempered with an understanding of what is possible, acceptable and reasonable for success.
So, at what point does one decide to stop chasing the perfection fairy? I usually ask myself if I have met or exceeded the customers' expectations. Success is defined by the customer. Is the customer happy? If so, I move on.