As far as humans are concerned, reality exists in two dimenstions:
- idea – knowledge, abstraction, concepts
- action – implementation, instance, software
Asymmetry refers to the disconnect or mismatch in ideas or actions between at least two people.
Knowledge asymmetry is the difference or incompatibility in idea. Action asymmetry is the difference in execution or instantiation.
Software is a manifestation of action. There is so much asymmetry or heterogeneity in software. Operating systems, middleware and applications. They are so diverse like ecology. Look at methodologies, frameworks, design patterns, open source vs proprietary, differences, heterogeneity, incompatibility and complexity all too common in software.
It is a crazy world, it is anything goes (Paul Feyerabend).
The asymmetry in knowledge and action existing in software only shows that traditional engineering pales in comparison to software engineering as far as complexity is concerned. Traditional engineering is basically static, whereas software engineering is dynamic, adaptive and organic.
That is why there is Agile Manifesto, Extreme Programming, Test-Driven Development, etc that people concoct to bring order out of the chaos of software development.
From a vendor’s point of view, heterogeneity is complexity and interoperability is a necessary evil. In contrast, homogeneity is a competitive advantage (just look at how integrated Apple is).
Knowledge asymmetry and action asymmetry may explain why there is so much complexity in IT (specifically software).