Recently I watched the documentary "A Faster Horse" which is a story about the Ford Mustang and the creation of the new 2015 redesign for the 50th anniversary of the Mustang. There was a quote from Henry Ford mentioned that Simplicity, Reliability, and Affordability as keys to the success of building and selling an automobile. Watching this documentary really got me thinking about how similar the automobile industry is to the software industry. There must be some things the software industry can learn from the automobile industry; after all it is about 50 years older. You can not see the correlation immediately, so I'll explain what I mean.
Just as everyone should be able to just get in and drive, users of software should be able to get automatic productivity. This is something that the software industry has failed horribly at time and time again. So many legacy systems, many of which are very prevalent in the industry today, get simplicity wrong. But, what is Simplicity?
Both automobiles and software can be extremely complex systems. However, the interface and certain key maintenance items need to be easy; they need to be "simple." A simple interface means the product is intuitive such that there doesn't need to be a huge amount of training required to use it. Simple maintenance means not requiring the user to remove the engine in order to change the oil or air filter. Certain items should be easily maintainable in a product.
If a product (car, software, or otherwise) doesn't attain a certain level of simplicity then no one (NO ONE!) will want to use it. And, if they do use it, they may use it incorrectly. Incorrect use of a product can result in many bad problems or accidents. With cars, accidents from improper use can be deadly. Software run the worlds these days, and it too can have some very serious consequences if the people using it can't use if productively and/or effectively.
While Simplicity can be hard, reliability can be just as hard to achieve. However, it is a bit easier to gauge how reliable a system is. Does the car work every time the key is turned? Whats the likelihood it won't start? How about the likelihood something else stops working? These concerns are just as equal with software.
Some of the tools we use in software development to help with this are TDD / Unit Testing, Performance Testing and Monitoring. These tools help gauge metrics on software systems before they are called "finished" and released for use. These metrics area also used to make sure the system stays working tomorrows the same as today.
Part of the Reliability concern are both Security and Fault Tolerance. Fault Tolerance is the concept of how many and which things can go wrong or break while still allowing the entire system to function. With a car this could be if you pop a tire, you have a spare you can put on. Or, the engine runs and car still "works" even if the air conditioning or headlights stop working. With software, this could be building a system that can handle 1 our of 2 servers going down without the system completely going down. Security is the concept that if the Reliability of the system falters, the product will not become unsafe. With a car, this could be how likely the drive could lose control and crash the car if something goes wrong. With software, security is generally a little less life threatening, but in some industries it's not.
How affordable is it? What's the longer term life expectancy of the product? What kind of ROI will the company get after investing in the development and/or implementation of the system? Sure, given enough time and money, anything can be built. However, almost no one is willing to spend $5 Million to implement a software system that will only last 1 year of use. Sure different markets have different cost tolerances depending on their needs.
Basically, if the customer can't afford the product, and it doesn't sell then you might as well not have a product in the first place. In order to have any system succeed, there needs to be someone willing to pay the cost of producing it and maintaining it, otherwise there really isn't a product.
There are so many things a young industry like the software industry can learn from older, possibly more established industries. We don't need to figure everything out on our own. We can learn from others success and failures and grow appropriately. Also, many other industries, like the automobile or medical industries, are far more regulated than ours. Unless we want governments to decide how we build software, we must be responsible and come up with and adhere to our own standards to meet Reliability, Security, and many other concerns we all deal with everyday.