The circumstances and root causes behind unreliable software/hardware
Unreliability in computer software/hardware occur because of incorrect data entered into databases or from interpreting data in a wrong way during retrieval or processing.
I wanted to do this small exercise and compile the list of root causes behind such mistakes. Why do humans commit such errors in the first place? What are the circumstances surrounding projects and causing developers to produce unreliable software? It would have been nice if the book had compiled the list for us, but thinking for ourselves and deducing answers from the examples given is a good practice. Here is the list that I came up with:
Lack of communication or agreed standards: This could be evident in the case of the “Robot mission to Mars” and the catastrophic results due to a lack of agreed upon measurement standards.
Time Restrictions: In many scenarios such as the “lack of accuracy in NCIC database”, time plays a major role. We cannot simply wait a long time to ensure accurate results. Fast results are sometimes essential for the success of a certain initiative.
Competitive Markets: When it comes to business and off the shelf software, the time to market and release is a major role in the success or failure. Many companies make the unethical decision to release a product ahead of its competition in order to gain market share.
- Lack of Team Motivation: A software product should be treated with full attention to detail. All developers and manager on the team should work with passion towards their projects. For that reason, everyone on the team must be motivated to produce the best results.
- Miscalculated Budgets: Many times managers of software projects miscalculate the budget. With limited budget, shortcuts have to be made. Most of the time the testing part of the project gets hit because it is towards the end of the project life-cycle (at least in the waterfall method)
- Complexity of Software: Software is complex. For large projects trying to manage the development of a software without a proper software engineering methodology or without a proper development framework is a call for disaster.
- Lack of Precision: When it comes to life critical software, being precise in calculation is a matter of life and death. Many examples from the book agree with this point.
- Fatigue or Personal problems: In some occasions a developer enters the wrong information into the database, simply due to fatigue or personal matters in mind.
- Lack of Prudence: In many cases, the people on the team do not have the ability to look ahead and see into the future what could potentially go wrong. It is very important for us as developers to have that quality. Software is built for the future and one has to ensure it will continue to operate for the next few years.
- Changing Environment: The software you build is not a standalone entity. It cohabitates with operating systems, it interacts with other software and is built on top of hardware. Any changes by those agents might result in failure of your software, deeming it as unreliable.
For all the other reasons that could not be justified, I will simply say. It’s bad luck. I hope this list compiled out of my experience in development and programming, gives everyone an insight into the root causes behind the development of unreliable software.
In my opinion, taking these 10 points into account will lead to a very reliable software that will continue to operate successfully into the future.
Join Weboq to Gain Access to Many Free Resources