Our culture is obsessed with perfection. We have endless debates about it: the perfect movie, the perfect job, the perfect car, the perfect guitar riff. We seek out the best restaurants and order the best entrée. And who isn’t inspired to be the best by the song played during the All-Valley Karate Championships montage in The Karate Kid?
But should we strive for perfection in our applications? Is it worth continually delaying a release in order to make it perfect? And is there such a thing as absolute perfection?
Alex Martelli, senior staff engineer at Google and member of the Python Software Foundation, argued that we should shelve our predisposition for perfection when it comes to software. Martelli presented that good enough is indeed good enough for a release at his talk at OSCON this past week, advising developers to look at the word “perfect” as a verb meaning to polish, rather than the adjective meaning flawless.
“Perfection is only a process. It is not a state, at least on this sublunar world, because you never reach it,” Martelli said. “There’s always a little bit more, the goalpost keeps shifting, partly because you’re dealing with real world issues.”
What Not To Skimp On For ‘Good Enough’ Software
Martelli gave several items that he suggested developers not skimp on while creating a product. First, he advised that a lightweight, agile process be used. Revision control, code reviews, testing and a proper release practices are imperative to be built into the software from the start.
Developers should also code with style, clarity and elegance from the onset of their project. Being able to decipher and understand the code that was written will make it easier, and more fun, for them to improve upon later. Going hand-in-hand with this concept is the having a thorough documentation. Developers who don’t document their code from the start will be forced to rely on future users having mind reading capabilities, which they obviously don’t.
Martelli was adamant that all applications include security from the start. It is harder to add in security to an app later in the lifecycle, and developers storing data that has value should consider a hypothetical adversary willing to steal that information. Developers who don’t bake security into their app may encounter someone who is willing to capitalize on the sloppiness of their code down the road.
Nice To Have, But Not Required
Some items are nice to have in your application from the start, but can be plugged in later. Features such as modularity, plug-ins, API and the ability to scale are all things that most developers desire to have in their software, but these items are technical debt that might be worth taking on to ship your product.
Martelli advised that similar to financial debt, technical debt is sometimes acceptable to incur—as long as you do it with care. “Having debt is not evil, as long as it procures you stuff that is useful and you don’t let it get out of control,” Martelli said.
On Possible Bugs In Your Software
By definition, bugs cause damage in your software. Yet, when it comes to whether software is good enough to release, developers should ask a simple question, “Is the damage going to be recoverable or not?” If the damage is deemed non-recoverable, the software might not be good enough to release.
However, there can be a certain tolerance for bugs that may cause recoverable damage. For example, while losing a top score in a game might be frustrating to a user, it is not the end of the world. One simple way developers can mitigate these types of bugs by placing a “Beta” label on their software. As your users uncover these bugs, it is necessary for the developer to fix them quickly. When this is done, Martelli argued that the reputation of the developers is not harmed; rather they can be seen as being service focused.
In The Pursuit Of Perfection
Developers must understand that what is good enough today is not necessarily acceptable tomorrow. While creating perfect software out of the gate might be impractical, it is important for developers to perfect their applications over time. Martelli advised developers to learn from real users’ interactions with their software. By releasing early and releasing often, developers don’t simply aspire to big dreams, but ultimately create software that can fulfill them.
Please visit Alex Martelli’s site for a deck on this OSCON presentation.