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. A fair amount of effort is spent on requirements analyses, system modeling, and design.
Teams invest in sophisticated modeling tools and environments.
Even the requirements and design documentation stay in sync with the models. Personnel changes take place, and knowledge of parts of the system are lost. Compromises are made in design, coding, and testing to meet deadlines. Promises are made to eventually rewrite documents. The truth of the matter is that many good software engineering practices are shelved in the interest of meeting business and corporate deadlines.