> [!note] Disclaimer
> This note has been replaced by a more detailed blog post, [Software is a medium for storing executable knowledge](https://adrianodigiovanni.com/software-is-a-medium-for-storing-executable-knowledge/). The post offers expanded insights and examples on the concepts mentioned here. For the latest information, please check the blog.
> [!note] Disclaimer
> This note elaborates on a presentation based on the article by [[Armour, Phillip Glen|Phillip Glen Armour]], _The Business of Software: The Case for a New Business Model_, originally published in _Communications of the ACM_. The interpretations and insights here expand on the original content, reflecting my perspective. For the original ideas and context, please consult the [source](https://cacm.acm.org/opinion/the-business-of-software-the-case-for-a-new-business-model/) directly.
The image below shows an Oldowan tool, one of the earliest known stone tools used by early humans and their ancestors, dating back about 2.6 million years.
![[1613070886.jpg]]
**© The Trustees of the British Museum**. Shared under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) license](http://creativecommons.org/licenses/by-nc-sa/4.0/).
What value did these tools provide?
They stored knowledge.
Oldowan tools, like all stone tools, reflect the skill of selecting the right stone, striking it for a sharp edge, and using it effectively. These tools carry this knowledge, passed down through generations by observation and practice, encapsulating the experience of many.
Even today, stone tools provide value by allowing archaeologists to retrieve ancient knowledge through reverse engineering.
**If hardware didn't store knowledge, reverse engineering wouldn't be possible.**
Before stone tools, knowledge was stored in DNA, beginning roughly 4 billion years ago, and in brains, starting about 500 million years ago, with the necessary cognitive functions culminating in the human brain around 200,000 years ago.
Knowledge was later stored in writing systems, beginning around 3200 BCE and reaching a new peak with printed books around 1440, thanks to the invention of the printing press.
Since the 1950s, knowledge has increasingly been stored in software.
Software is a medium for storing knowledge.
**If software didn't store knowledge, reverse engineering wouldn't be possible.**
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 | Billion of years | Years to a lifetime | None to low | Can grow physical artifacts affecting the world |
| Brain | Decades | Seconds to years | Low to medium | Affects the world through bodily actions |
| Hardware | Million of years | Minutes to decades | Medium to high | Affects the world through physical presence |
| Books | Hundreds to thousands of years | Minutes to centuries | Medium to high | No direct capacity to influence the world |
| Software | Decades and counting | Seconds to months | High | Significantly affects the world |
Software is eating the world[^1] because it gives an unprecedented ability to store and update knowledge. More importantly, it enables the practical execution of that knowledge. [[The output of knowledge work is decisions]] and [[Software encodes and implements decisions]].
The true value of books lies in the knowledge they contain, recognized by writers, publishers, and readers who capture value from it. In contrast, software users value its ability to solve problems, automate tasks, and boost productivity, more than often without engaging with the underlying knowledge that shapes the [[User Experience (UX)]]. As a result, software can obscure knowledge and even encode ignorance without users noticing. As long as it works. Yet, the true value of software lies in the knowledge it stores. Software is a byproduct.
Software writers, publishers, and readers can capture value by focusing on acquiring and encoding knowledge from both the [[Problem space]] and the [[Solution space]] during development. When software is treated as a product rather than a byproduct of the process, scopes creep, budgets overrun, projects fail, and value is missed[^2].
Software development draws from traditional engineering practices like requirement analysis, risk management, and design patterns. However, applying these methods can neglect the unique nature of software, its development, and its operating context[^3].
**Unlike cars or buildings, software *is* its design.**
Software people should prioritize understanding domains and managing knowledge beyond technical skills. Systems should be designed to store and share knowledge, enabling continuous learning. Businesses should track how knowledge is developed and applied. Failures should be reframed as opportunities for [[Validated learning]]. ^70933a
[^1]: [Why Software Is Eating the World](https://a16z.com/why-software-is-eating-the-world/)
[^2]: [Software Project Failure Statistics: Alarming Trends Revealed in Study](https://zipdo.co/software-project-failure-statistics/)
[^3]: [An Introduction to Residuality Theory: Software Design Heuristics for Complex Systems](https://www.sciencedirect.com/science/article/pii/S1877050920305585)