Why errors happen in software development
Published on July 19, 2018
Last modified on December 01, 2022
Published on July 19, 2018
Last modified on December 01, 2022
Estimated reading time: 12 minutes
You may wonder why humans can undertake large and complex construction projects successfully, and yet software development companies struggle to deliver software projects without bugs.
This page discusses some reasons why errors happen in software development and suggestions on what can be done to reduce or avoid these errors.
Roughly speaking, ‘software errors’ can be divided into two categories:
The first one consists of actual errors in which something is not working; while the second one is more of an ‘understanding error’ in which the customer has expected a different result than what he or she received.
We explore possible reasons for both of these categories. These reasons are not meant to tolerate shoddy software development practices—rather, we're saying that even with an excellent process in place, software development remains a highly challenging field.
A software error is an error that causes a website, webshop, app, or any other software to suddenly not work or behave strangely in some situations. This usually happens because of a bug in the code, or because an external system is not working as expected.
Software errors can be very frustrating because they often occur at the most inconvenient times, and in unexpected corners of your system.
Typically, errors occur because the software developer:
Ultimately, software is created by human beings, and humans are fundamentally prone to make errors. As human beings develop software, it will be irrational to expect software to have no defects.
Having said this, it is also a fact that any software that is developed to function for specific purposes is extremely complex and no single person can conveniently understand it.
Each line of code can have thousands of possible inputs, outputs, states, or dependencies to deal with. We can say that it is possible to document every test case for every line of code, but we still cannot be sure that there is no unknown factor that can cause an error.
A line of code is a part of a whole system, and the whole system needs to be tested to make sure that all parts of the application work correctly.
Aside from the code that makes up a software, there are also many external factors that can affect its quality. These factors can’t be controlled by the company developing the software.
In addition, adjusting the system according to the issues from these external factors can result to additional time and development cost.
Here are some things that need to be considered:
How does your software developer test?
It’s important to understand and agree on how your developer performs their software testing so that you don’t end up having to test the system yourself.
Many companies employ freelancers who often do not have the infrastructure or time needed to test their own output. Besides, many developers overlook mistakes when they are the ones who test what they have developed.
The problem is, when you are the one who developed the system, you often test with the same data and in the same way. It is then easy to overlook mistakes which may have been more obvious to other people who were not part of the initial development.
Testing should be done by QA testers who are experienced and whose sole job is to test. First, they will be much faster at it. Second, their experience enables them to spot errors quickly and document them properly so the developers can fix the bugs.
Complexity of software means that it’s impossible to test its every path. Software development companies address this problem by implementing various processes such as setting up coding standards and using different testing methodologies.
Automated testing is one practice that companies can implement to save time and do things faster. However, it is important to first consider the cost of its implementation before setting it up.
If you update your software only once or twice a year, it will most likely be too expensive to develop automation testing unless if it’s for applications where the cost of errors is so high that they exceed the cost of developing automation testing.
Automated testing is especially useful for software where you constantly make small changes and updates like 3-4 times a week. Besides, it is almost impossible to test the system 3- 4 times per week, so it becomes necessary to automate testing.
Developers also incorporate “program bits” in their code that automatically test parts of the system—it’s a bit of a complex process, but it’s basically a piece of software that automatically validates another piece of software when it is delivered.
If the results don’t tally, the developers are notified of the error that needs to be corrected.
Unit testing and automated testing are two components used in continuous integrations where a developer, in the perfect world, simply has to press a button when he or she completes a task, then it is automatically tested and installed.
You test every time a developer has made a change or update to the system.
Software testing is a task that takes time. It is a common mistake to not test enough or disregard the testing stage completely because testing is associated with expensive cost and too much time.
This results to struggling with mistakes and frustrating everyone involved in the project as it becomes even more expensive and ends up taking more time.
Here are some methods available:
Most clients or users don’t know what they want until they see it. Most of the time, it is not until they start actually using the software that they begin to understand what they need.
Because of this, requirements and specifications constantly change throughout the development process, which can also contribute to the errors that crop up in the final development output.
Studies have shown that an average software development project experiences about 25% change in requirements from the “requirements completion” stage to its first release.
This is a common “scope creeping” problem that hampers nearly all projects. Commonly, users or system owners start to creep in new requirements when the first designs have been done.
The design serves as visual basis for them to think more deeply on what they really want—and, thus, create changes.
Changing any software requirement, even a small change, can have adverse effects. High level of interdependencies between the plugins, makes the system error-prone. Here are some examples:
Errors also arise from misunderstandings or miscommunications between the client and the developer.
Developers can’t read thoughts, so you can’t expect them to understand everything that has to be done and how things are work in your industry without all the details being explained.
There are things that may seem completely logical to you, but incomprehensible to developers without your industry knowledge.
Here are some tips to minimize these kinds of errors:
There are no hard-and-fast rules to eradicate software bugs, and as you have read, there are many factors that come into play. However, this does not mean that software development companies should be complacent.
At the end of the day, it’s the quality of their work—and their business—that’s at stake here.
This is why software development firms observe processes, and put in place quality assurance or testing units. They also invest in tools and talents to catch errors, and ultimately improve the quality of the software they produce.
AUTHOR
Peter Skouhus
A Danish entrepreneur who owns 1902 Software Development, an IT company in the Philippines where he has lived since 1998. Peter has extensive experience in the business side of IT development, strategic IT management, and sales.