All software is hard. Building good software is not trivial, but the challenges I face are different depending the intended use of my software. For me it helps if I put software into three categories
- Critical – this controls nuclear power plants, medical equipment or aircraft control systems. If it breaks a lot of people die.
- Enterprise Class – If it breaks I cannot run my business (pay my suppliers, pay my employees, serve my customers)
- Trivial – If it breaks I can’t check the latest sports results, or post my opinions on my lunch to facebook and twitter
The tolerance of the consumers of each of the above software for failure is quite different and as such the speed with which new features can be delivered and implemented will differ. If the pilot of your plane sees a pop up on his screen right before he takes off saying “An update is available for your autopilot software, would you like to install it now?”; would you want him to click ‘Yes’?
I build Enterprise software, which is the middle ground. I certainly have to spend a lot of my time ensuring that what we build is robust and reliable, but there is plenty of scope to innovate. I respect the people who build there other types of software as they each have their own unique challenges. Critical software has to be totally safe and reliable and those pressures are obvious. What I class as trivial software is a challenge because you have to move with the market and bring out new features and innovations very fast and keep your customers very happy and engaged because they can move easily to another product. What is trivial software to the users may well be critical to your ability to make money and pay your own bills.
Do you agree with my categories, or do you prefer to slice it another way? Is trying to categorize software a futile exercise? Am I just trying to be controversial by calling some people’s life passion trivial? Have your say in the comments below.