After studying the program for several days, I informed my boss the program was untouchable. The effort to make anything more than a minor adjustment carried such a risk, as the impact could only be guessed at, that it was easier and less risky to rewrite it from scratch.
If they had considered the future impact, they never would have let a key program degenerate that way. They would have invested the extra effort to maintain it’s design, document it property, and consider the impact of quick changes.
Nowadays a similar pattern is happening in many IT shops with integration. It starts with “just” connecting a system or two. Technology, methodology, and architecture is not considered – after all it’s just a connection or two. After a few years, that IT shop is faced with tens to hundreds of connections via all kinds of different connection technologies (and gateways), a wide variety of data formats, limited or no reuse of connections, and a systems integration infrastructure that looks like a plate of spaghetti!
Minor changes to one system begin impacting multiple other systems. Slowdowns of one database cause impact throughout the environment, even impacting systems seemingly with no relation to the database involved.
The accidental integration architecture begins to rear its ugly head.
Figure 1 represents a key business system at a US Fortune 50 IT organization that grew, in an unplanned fashion, into a highly integrated system. Systems stability degraded tremendously, and system agility became an impossibility.