While the software world is caught up in the hype of the Internet and the World Wide Web, one reality still tempers this excitement. Even more real is the fact that these systems tend be large and complex. Most of them are being supported and enhanced by teams that had little to do with the original design and development. Internal documentation does not even remotely reflect what is in production, and the rationale and assumptions used to develop the applications have long been forgotten. Indeed, it is an immutable fact that most software applications are destined to be maintained and enhanced by teams that were never involved in the original design.
Teams make changes that cause the application to break or seriously malfunction.
Teams don't make changes because they do not know how they will affect functionality and performance. Teams write inordinately more code than they need to because they do not really know what the original code is doing. The end result is a tangled mess of code that gets more and more difficult to maintain. Unfortunately, most corporations cannot afford to re-engineer these applications or initiate new projects. After the Fact Most major software projects start off with well-intentioned goals and principles.