Copyright © 2009 Corvus International Inc. All Rights Reserved
This was the first article in The Business of Software series and the underlying theme of software as a knowledge medium drives all the articles that follow...
Software is not a Product
The core issue with the business of software is that we misunderstand what software really is.
Most companies think of software as a product--the job of a project is to build a system that we ship to the customer. Software development is usually managed as if it were building a product: "...have we shipped the latest release yet?..." But software is not a product.
The Five Knowledge Storage Media
Consider where (in what medium) we could possibly store some knowledge that we have gained. For this purpose think of "knowledge" as being the necessary "instructions" (steps, data, events, actions, situations, etc..) necessary to achieve something of value to an organism.
There are only five places or media in which knowledge can be stored. In historical order, they are:
- DNA. . . . . . . This was the first "knowledge storage medium" in the history of the world. This is the medium in which species store knowledge. For example, instinctual behavior is DNA-stored knowledge. While humans have little DNA-stored behavioral knowledge--we have much more control over our behavior than do most animals--our bodies still carry a lot of DNA-stored knowledge particularly about body functions.
An example of knowledge-in-DNA in humans is the capacity for language.
- Brain. . . . . . . A defining characteristic of the human race is that much of what we know is stored in the read-write medium of the brain. This allows us to learn, and relearn; it allows us to choose modes of behavior rather than being driven solely by instinct.
An example of knowledge-in-brains in humans is the particular language we use.
- Hardware. . .Is not usually viewed as being a knowledge store, but it is. A ruler or tape measure "stores" knowledge of length, a wrench stores knowledge of the dimensions of nuts and bolts. Hardware has the distinction of making the knowledge manifest or usable--it allows us to apply the knowledge in some way.
An example of knowledge-in-hardware is a sniper's rifle sighting mechanism which stores a mechanical implementation of the knowledge of
distance to shot drop, allowance for wind, gravity, and other factors that affect the flight of the bullet.
- Books. . . . . . .Can be on paper or in electronic form (as in most web pages). Books store a description of the knowledge they contain but are characterized by the fact that the knowledge representation is entirely passive. Book-stored knowledge has the advantage (over brain-stored) in that it is relatively persistent, however, in order to use the knowledge in a book, it must be transcribed into one of the other media first. Knowledge in books doesn't actually do anything.
An example of knowledge-in-books is a dictionary which stores descriptions of words.
- Software. . .Knowledge stored in software is active. Software-stored knowledge is not merely described, it can be executed.
An example of knowledge-in-software is a spell-checker which actively verifies and corrects words.
Software is not a product, it is simply a medium for storing knowledge. It is the most recent of the five media, but also the most powerful.
The hard part about creating software systems is not creating them, it is in acquiring the knowledge necessary to create them (correctly). We can write as many lines of code as we want, but if they don't "work" (read: contain the correct knowledge) the software is of no use to anyone.
Since Software is not a product, Software Development is not a product-production activity.
Software development is, in fact, a knowledge acquisition activity. But it is neither recognized nor managed as such.
Our lack of understanding of this basic fact is one of the key issues facing the software industry. We do not "build systems"ówe acquire knowledge. The systems we ship to our customers are actually the byproducts of the real activity, which is to learn.
The real product is the knowledge that is in the systems we ship to the customer, and we don't manage that at all.
Businesses that learn to manage the real product will become unbelievably efficient and productive. Businesses that don't will become marginalized and will fail. Given this, productively improvements of 1000% are possible and should become routine in those companies that figure out this issue and learn to effectively manage the empirical knowledge of their domains.