Configuration Divergence
2 min read
Configuration divergence is a result of change entropy in an environment that doesn't enforce referential integrity between loosely-coupled state or "state-at-a-distance". Simultaneously this allows the anti-pattern of action at a distance. This phenomenon is also called "Connascence" and I have also called this "meta-coupling".
This process gives us a system that becomes more and more opaque as time continues, and we lose referential transparency on the entire system. The result of course is a repeated cycle of entropic reduction projects (often called " refactoring" or "rewriting") where consultants are hired to clean up technical debt. Occasionally these projects will suffer from the second system effect. All of this resolves to increase the cost of changing/adapting software systems.
With this in mind, the significant difference between data and code is that code is usually considered to be "stateless", and data to be "stateful" , but this is not a difference in kind, but a difference in degree. In time, both data and code will be changed, and will exhibit all the properties of "stateful" systems. Therefore, this problem cannot be solved with tools that only enforce a consistent baseline. We either accept divergence and try to converge back to the fixed point, or we rebuild with tools that are correct by construction. As a software community, we'll get there eventually, but it's going to take time.
Here are examples of this problem:
- Magic Strings and Magic Numbers
- Laravel's Route Tags