Common technical conversation: "Well, why don't we just make a generic system, and then we'll tweak it to work with every specific implementation as we roll it out?"

There follows a long conversation from any good project manager that runs roughly like this:

a) In order to avoid having to completely rework much of the innards of a "generic" system, you need to know all the ways in which the specific systems could be exceptional.

b) In almost every case, if you knew the data in (a), there would be no reason to build a "generic" system, because you could simply start building the specific systems.

c) No, customer, your case is not an exception to (b).

d) OK, happy to do it your way. Please sign this spec, and pay attention to the bit that states that change requests void deadline commitments and will be charged extra at a higher than standard rate.

Most "simple projects," at least in the tech world, tend to be complex projects that have not been subject to sufficient scrutiny to have their complexities identified.

Emphasis mine. Via Will Obamacare's Exchanges Be Ready on Time? - The Daily Beast.

Are you stuck with a legacy PHP application? You should buy my book because it gives you a step-by-step guide to improving you codebase, all while keeping it running the whole time.