In my recent job I have come across an attitude of “good enough” more than once from various people. It’s never one I have subscribed to or agree with. I have a healthy agreement with the idea that perfection is the enemy of action but that is a different argument. Better something than nothing but once you have something more than nothing I don’t see the point in giving up and doing nothing more.
In fact I don’t understand the mentality that leads to the idea of good enough. There is a touch of the fatalistic about it, that we shouldn’t try and expect more than what has been achieved so far. Then again this could also be a variation of Panglossian pessimism: in this imperfect world we have the best imperfect solution we can hope for.
Personally I’m rarely satisfied with my work and the urge to revisit it and improve it is one of the attractions of permanent employment rather than contract work. Sometimes the revisitation is to fix issues of time and resource constraint during the initial work. Other times it is to revisit old work in the light of new experiences, to transfer the lessons of work done well to earlier projects. Sometimes it is just pure dissatisfaction, the knowledge that something could be better than it is. I always like to build in huge margins of performance and capacity (in fact some of my recent software has perhaps a 200 to 300% margin) which some people might criticise as being over-engineered however the important thing is that if you had a choice of a margin of 30% or 100% for the same budget, which would you choose? Ambition is what drives the search for that additional 70% and people who believe in “good enough” don’t have the ambition to find that little bit extra from their work.
My views are formed by my experience with SMS billing where no-one really foresaw or predicted the phenomenal growth in texting and text services. It took us all by surprise and if the software had a margin of 100% excess then it could be used in a quarter with exponentially more needed for the next quarter.
I think it is worth approaching every project as if it has the potential for being a huge success. I don’t think every project should be budgeted as if it might be a huge success because 90% of ideas never pan out quite the way anyone hopes (WAP is a good example of this). If you don’t think a project might result in a big success then there is a question about why you are doing it in the first place. If you, the implementer, don’t believe in a project then why the hell would else believe in it?
Even if you design for success you should always be prepared to return to a project and make improvements. My favourite example are web-based applications. Every time I come to a web application project it seems that the technology involved has evolved and all manner of new solutions to previously difficult problems are now available. What took weeks of effort in the past is now part of some standard library or tool, the weeks of effort can now be spent on getting way beyond the basics of the app and providing some reason why your application is going to stand out from the rest. I always enjoy ripping out some half-hearted custom solution to a problem that was written in-house with a standard piece of technology. For me change is progress and progress requires change.
Ultimately in business software you have to provide your own impetus for change and innovation or your competitors will. Someone will come and eat your lunch if you give them the chance. Perhaps that my problem with “good enough” is that it smacks of the fatal complacency that leads to losing contracts, losing jobs to cheaper labour countries and ultimately losing the lead in innovation and ideas.