charting enterprise application complexity

introduction

Buildup of accidental complexity

The following steps describe how accidental complexity can creep into system during development.

  • projects go live every now and then with a new release (the green arrow)
  • projects report on a regular basis about progress (development of functionality, #bugs), risks, issues, etc. to management
  • hardly ever is the buildup of complexity (the red cloud) part of the project report/metrics
  • as accidental complexity in a codebase increases (see diagram below);
  • project velocity can come to a grinding halt, entailing huge organizational (development/growth) risks

As complexity increases over various project releases, the project velocity will become lower and lower. In the end it will be very difficult to change the application, for example to fix a significant bug or add a new feature. Robert C. Martin wrote about this process in his article Continuous Care vs. Initial Design. A quote:

"The design of many software applications emerges as a vital image in the minds of its designers.
With luck and skill it may achieve a state of cleanliness, elegance, and beauty that fills its developers with deep satisfaction.
Sometimes the developers manage to maintain this purity of design through the initial development and into the first release.
More often something goes wrong. The software starts to rot like a piece of bad meat."

The following diagram illustrates this process.



Desired functionality vs accidental complexity

So, if accidental complexity is not measured during a development trajectory, it might become a substantial part of the application without the application's owners realizing it. Accidental complexity is an unwanted by-product of the development of new functionality.

Complexity Map allows accidental complexity to be measured and managed, just as the development of new features is managed. The result is a nearly debt-free codebase and a sustainable development process, which allows the organization to quickly release new features.