Problem Solving Systems (Work in Progress)
Irreducible complexity (a.k.a. essential complexity) is a term used to describe a characteristic of complex systems whereby the complex system needs all of its individual component systems in order to effectively function. In other words, it is impossible to reduce the complexity of a system (or to further simplify a system) by removing any of its component parts and still maintain its functionality objective.
So for example, consider a simple mechanism such as a mousetrap.
That mousetrap is composed of several different parts each of which is essential to the proper functioning of the mousetrap:
- a flat wooden base,
- a spring,
- a horizontal bar,
- a catch bar,
- the catch,
- and staples that hold the parts to the wooden base.
But say you remove one of the parts of the mousetrap. The mousetrap will no longer function as it was designed, it simply will not work. That is irreducible complexity: the complexity of the design requires that it can't be reduced any farther without losing functionality.
The same thing is true for a problem solving system. Whether the functionality is provided using computer based functionality or manual effort; all the pieces need to exist in some form. You could have specific levels of functionality. For example, in financial reporting there is a difference between a "complication" and a "review" and an "audit" of a financial report.
There is a difference between a "complex system" and a simple system that is complicated. Most software applications tend to be simple systems that may be complicated. Fred Brooks No Silver Bullet points out that complexity comes in two forms: essential complexity and accidental complexity. Essential complexity is what is irreducible. Irreducible complexity = essential complexity.
The problem is making sure you avoid or eliminate the accidental complexity. Accidental complexity refers to challenges someone unintentionally make for themselves as a result of trying to solve a problem.
The Law of Conservation of Complexity states that, "Every software application has an inherent amount of irreducible or essential complexity. The question is who will have to deal with that complexity: the application developer, the platform developer that the software runs on, or the software user."
These, the graphic below, seem to be the pieces of a problem solving system which are essential. What I have tried to do is use the framework for articulating the Semantic Web Stack or "layer cake" and generalized the pieces. This is what I came up with:
Now, you can implement such a problem solving system using the semantic web stack, using the XBRL technology stack, or some other technology stack. There tends to be three primary problem solving system implementation approaches:
- Semantic web stack
- Graph database
- Logic programming
Why is this important? Multiple technology stacks is a fact of life. Different enterprises will implement different technology stacks internally. But in order to exchange information effectively, information from one technology stack needs to be converted to some neutral standard or into some other technology stack in order to exchange information effectively.
To make something like "algorithmic regulation" work, either: (a) everyone needs to convert to exactly same technology stack internally within their enterprise or, (b) reliable conversion between different technology stacks needs to be created.
Additional Information:
Comments
Post a Comment