From time to time I receive Emails about some content on my site that are both interesting and thoughtful. In this case, this is a reflection on an exchange between James Bullock and myself back in 2004. The following quotation is slightly edited for readability on line.
I've heard James [Bullock] speak and read some of his work. I was very interested
in your comments on his piece: "The Top 10 Ways Software
Projects are Different". Most of your comments are very good, but I found
some wide of the mark ... Software is a brand new thing, unlike
any other form of Intellectual Property (IP) pre-existing. (And I can hear the
sighing from around the globe!) So, here's a thought or two.
Software is a Cognitive Amplifier in the same way that machines are Force Amplifiers. For example, Business Software replaces Human (cognitive) processes [because] software can provide benefits via: "Cheaper, Better, Faster, More". [So,] Software Projects are notionally about providing a business benefit.
But it is exceedingly rare to find the expected benefits listed or defined. [True that] a Business Case might be made with numbers that say there'll be a Net Tangible Benefit [but] these tend to become shelfware and collect dust. I've never heard of any project that included the monitoring and reporting of those benefit metrics. Nor of any management team assessing systems/projects this way.
So how is Software a new form of IP?
The first type of IP is:
- Stuff you make.
It is the result of some thinking and a lot of craftsmanship. Say a novel chair whose design you register. Exact copies are prohibited, close copies are not.
The second type of IP is:
- Creative expression.
This will usually some form of artifact but could be playing music. It is the result of thinking, creatively plus the production or performance of the piece. It is covered by copyright, trademark and similar.
The third type of IP:
That is, the formula, design or process to make something. These have to be: Novel, Inventive, Useful. Novel means "new", while Inventive requires a "non-obvious step". Patents are never for "things", "stuff" or "performances", but instead about how to make them. Curiously, mathematical algorithms and Laws of Nature are excluded.
Software involves all three types of IP, plus Algorithms - but with these essential differences:
- Programs are the embodiment of small-thinking-steps
- A running program is thinking. (That's the new part)
- Programs that don't run are nothing, only a random jumble of bits.
Software Systems are Programs + Data + Communication + Processes (Human and Mechanical) and exist at many levels.
Software isn't just intangible - what you are trying to produce is thought. Not (just) the results of your thinking - but writing down the thoughts (small-thinking-steps) to go through to solve a particular problem. Software is different because it runs on mechanical thinking machines. This is what is new.
There are no limits to the problems that can be solved (The Turing Test), the field of endeavor or the cognitive processes that can be replicated. Learning & Adaptive Behavior are possible in software (but so far not done much). The limits are threefold:
- How well the problem domain is understood & the solution specified (speech recognition)
- How competent the programmer is (hard problems require more able programmers)
- The limits of the underlying technology.
This nature of programs as thoughts in action affects the whole software production process. Everything that's observable from the outside (through interfaces) does not reflect the internals. The only way to get a picture of the current state of any code is to read and understand it. Everything else, including machine metrics, are second and third order effects.
It is very similar to Aviation: Pilots get to choose who can be Pilots. Or even scoring Gymnastics, Dance, Board Diving, Dressage. Respective domain-experts become very good at assessing others' performances. Which leads to another observation: Programming is a performance discipline, like surgery, piloting, architecture, gymnastics.
Amongst professional programmers there is at least a 1000-fold difference in productivity. The only informed consensus on productivity metrics is that mechanical counts, like Lines-of-Code (LOC), are not a meaningful measure across individuals, types of work, applications, projects and organizations. The "degree-of-difficulty" of problems that individuals can solve (either the "expert" level or "genius" quotient) isn't defined and, as far as I can see, has so far not been researched.
As an illustration of the 1000-fold productivity difference, consider these two examples:
- Microsoft used 10,000 people over approx. three years to produce "Vista" (and the
same again for the one it threw away, "Longhorn"), around 25,000 man-years.
- The team at Bell Labs that produced Unix around 1969, built its replacement in 1990, in around 25 man-years.
The Bell Labs version is faster, more secure and more robust than Vista, and from day one it ran on around a dozen different types of CPU, as compared to Vista that only supports Intel/AMD CPUs.
I wholeheartedly agree with your cynicism towards Software folk declaring themselves "Special and Different", and saying things like "The stuff we work on is completely different, you wouldn't/couldn't understand." That position is self-serving and disingenuous at best and only speaks to the lack of imagination, ability and understanding of those making it!
However, "all problems are people problems". There must also be an overwhelming overlap with "people problems" from all the other types of projects. I'm not sure of how to find a way through this maze. It is incredibly rare to find a person who is an experienced and competent software professional, who is also experienced and competent in another field, and has the personal insight, time and interest to compare and contrast.
Who am I to challenge the words of an expert? However, I am pleased to report that some companies are at least now trying to monitor and report on the actual benefits realized as a result of software implementation.