Sep 16, 2009

From Spaghetti Code to Spaghetti Connections

Twenty five years ago my boss handed me the primary billing program and described a series of new features needed. The program was about 4 years old and had been worked on by 5 different programmers. It had an original design model, but between all the modifications, bug fixes, patches and quick new features thrown in, the original design pattern was impossible to discern. Any pattern was impossible to discern. It had become, to quote what’s titled the most common architecture pattern of today, ‘a big ball of mud’.

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.