I was driving down the highway the other afternoon when I saw a billboard for some car. I don’t recall the car, but I do recall the slogan “Enough of ‘Good Enough'” it read. Presumably the implication was that other car manufacturers make a car that’s just “good enough” and that this car was exceptional.
“Good enough” is a common phrase in software development, and I get the concept, but not the practical applications of it that I see. Conceptually, you build something that is just enough to meet the customer’s needs and no more. The issue is, the definition of what a customer wants or needs isn’t exactly readily available. If you were making some sort of trivial object and dealing with economically perfect competition, good enough would make sense. You’d want to produce something that exactly met the customer’s needs and right around the same price as your competitors. Competition would assure your prices were kept low. Simplicity of the object would assure that product differentiation was a non-issue.
But software development is more of a monopolistic oligopoly. Your slightly different software is competing against others who solve similar problems but not in exactly the same way. The meaning of “good enough” begins to lose meaning because the myriad of trade-offs each competitor can make. You might offer feature X, the other might offer a product without the feature at a lower price point. Which will the customer buy? Is price all there is to it? Of course not.
Add on top of that the skewed meaning of “good enough” to many software developers and you’ve got yourself a real conundrum. I can’t count the number of times a software developer has informed me that the poor behavior of the software was user error. It’s so common, there’s a classic joke about it:
How many software engineers does it take to change a light bulb? None. We’ll document it in the manual.
In spirit, I love the idea of good enough – to never build more than your customer wants. But in practice, exactly what your customer wants may not be clear and even if it is, your developers are inclined (for some crazy reason) to make odd decisions about how the system should or shouldn’t function.
The car company is right. Enough of “good enough.” Pursue perfection.