Do the simplest thing that could possibly work … and no simpler.
To solve a particular programming problem, implement the simplest solution that effectively solves the problem for all the cases necessary to satisfy current needs. Do not implement a solution that solves problems you don’t have yet, and DO make sure that all real, current needs are met by the solution
See http://c2.com/cgi/wiki?General/DoTheSimplestThingThatCouldPossiblyWork for a fuller discussion.
I’ve been developing business software for just about 15 years. I’ve been lucky enough to work with large retailers, banks, energy companies, car manufacturers, and education companies. They all suffer from this problem. Developers are constantly writing unused code. And they write code that will solve problems that won’t be asked by the users. At the same time, deadlines are being missed because core functionality is being pushed aside in favor of all the small ‘just in case’ code blocks. It’s a real problem that drives a significant portion of projects over time and over budget. The problem is even more pervasive in shops that use OO design. A developer is asked to code a class based on specifications. Those specifications do not include cases that the developer thinks make perfect sense. The developer is probably right, but more often than not those cases are irrelevant for the software being developed. All these small efforts add up to time being spent on code that will never be used.
Since the goal of General/ExtremeProgramming is to align development effort with business needs, hit targets, and increase code quality, getting developers to concentrate on the goals of the project - and nothing else - is important. Less time writing unnecessary code is more time spent writing and testing relevant code. –General/TimHart
Lots of meta-discussion moved to General/AnnoyinglyHeavyHandedWikiAdministrationDiscussion…