Software is innately abstract. Visualisation and description are sometimes useful to communicate individual pieces, but as a whole, the interactions are often too complex and dynamic to be represented by anything static like words or pictures. Software systems are nondeterministic to the point that it sometimes seems be more craft than engineering, more art than craft. Indeed the wise heads always refer to the most complicated parts of the machine as the ‘dark arts’ as it seems that something almost mystical or magical is going on.
Arthur C. Clarke , writing about the future of technology coined his three laws:
- When a distinguished but elderly scientist states that something is possible, [they are] almost certainly right. When he states that something is impossible, [they are] very probably wrong.
- The only way of discovering the limits of the possible is to venture a little way past them into the impossible.
- Any sufficiently advanced technology is indistinguishable from magic.
All three of these “laws” can be applied daily in the creation of high quality software products. These are philosophical standpoints which stand up in the day-to-day of software product engineering. For example:
1. I have worked with distinguished engineers who have been too caught up in their own history and story to listen to engineers. I’ve worked with product leaders (or perhaps subject matter experts) who are happy to languish in a dead-end product with static user numbers – never taking a decision, never taking a risk. I’ve talked to engineering leaders who think there is a limit to the capacity of an engineering organisation. Self-limiting organisations are the worst kind of organisations. Identify them and escape them if you can’t immediately change them.
Example 2: Fear stalks us through the power of the unknown. We hide behind the spectre of failure through scaring others – like parents who have run out of ideas, we shout at our children. If we are afraid we will not make decisions, we will stagnate. We will not prosper.
Example 3: We must continue to learn. If we don’t learn then we cannot create magic. Learning means making mistakes. Making mistakes is the fastest way to learn.
If you want your software product to succeed then:
- Don’t listen to the experts.
- Don’t show fear (even if you feel it).
- Experiment. Move fast.