Solutions to Old and Bad Software
Software quality is something that affects everyone—not just those who are developing software. James Kwak points out in an article in the Atlantic that software is behind many systems we rely on, and not all of the software is as robust and well written as we might hope.
Kwak’s analysis of the problems and possible solutions raises a number of issues that are often discussed in software development circles.
Kwak suggests that when organizations don’t value quality, they end up developing “not very good” software, with a lot of accumulated technical debt in the best case or a lot of just bad code in the worst case. The errors resulting from this debt can have consequences that range from affecting the quality of life in a minor way, such as a bad customer service experience, to more serious disturbances, such as some of the recent problems related to computerized trading. A central premise of software patterns is that the quality of software is related to quality of life.
Many of the systems Kwak describes involve old legacy code, but some incidents in recent memory involve newer systems. Maybe defining legacy code as being “code without tests” is the operable definition.
The solution, Kwak writes, involves people more than technology. He suggests that “good, motivated developers” using “processes that are oriented towards quality” in a culture where honest and frequent feedback is encouraged is necessary to improve software. In addition to the cultural aspects, automated testing can also help to improve the situation. Taken together, these items share many of the themes expressed in the Agile Manifesto and the values embraced by agile software development methods.
As entertaining as it is to think that what we need to worry is about our software causing a Skynet scenario (think Terminator), the real risk is not that we wrote our software to be too smart or too good. The risk is that is was written without enough thought about quality.
It’s worth revisiting agile concepts and values to see what value they can add to your systems. While agile values and techniques may not be the whole solution, they can help you improve the quality of your software—whether it is “legacy code” that someone wrote years ago or the soon to be “legacy code” that you wrote last week.