Software is a medium for storing executable knowledge
Software is a byproduct, rather than a product. Suppliers often overlook this perspective, resulting in naive software.
In his insightful article for Communications of the ACM, The Business of Software: the Case For a New Business Model, Phillip Glen Armour argues that software is not a product but a medium for storing knowledge, pointing out that software suppliers often overlook this perspective, resulting in what I call naive software.
The evolution of knowledge storage spans billions of years and various mediums. It begins with DNA around 4 billion years ago, followed by the emergence of brains 500 million years ago, and the development of the human brain roughly 200,000 years ago. Hardware appears about 2.6 million years ago with stone stools, and then writing systems emerge around 3200 BCE. The invention of the printing press around 1440 revolutionizes knowledge sharing through books. Since the 1950s, software becomes the preferred medium for storing knowledge.
Different knowledge media vary in durability, rate of change, control over change, and power to act of their instances.
Knowledge Medium | Durability | Rate of Change | Control of Change | Power to Act |
---|---|---|---|---|
DNA | Billions of years | Years to a lifetime | None to low | Grows physical artifacts affecting the world |
Brain | Decades | Seconds to years | Low to medium | Influences the world through bodily actions |
Hardware | Millions of years | Minutes to decades | Medium to high | Impacts the world through physical presence |
Books | Hundreds to thousands of years | Minutes to centuries | Medium to high | No direct influence on the world |
Software | Decades and counting | Seconds to months | High | Strongly impacts the world |
Software gives an unprecedented ability to store and update knowledge. More importantly, it enables the practical execution of that knowledge.
Unlike hardware, software is its design, encoding the knowledge of how it works.
Unfortunately, software can impede knowledge sharing or even encode ignorance without customers and end-users noticing, as long as it works well enough for their needs. This happens because software suppliers often focus on delivering the product, overlooking that while customers and end-users benefit from its use, the real value for suppliers is the underlying knowledge.
Software suppliers should prioritize understanding domains and managing knowledge beyond technical skills. Systems should be designed to store and share knowledge, enabling continuous learning. Businesses should implement knowledge accounting to measure, manage, and leverage their intangible knowledge assets. Finally, failures should become opportunities for validated learning.
In essence, Software development should be about capturing and encoding knowledge, with software as a byproduct rather than a product.