
I’ve always been interested in the economic impact of software development. While it can be extraordinarily expensive to build out a commercial software application, successful software products can achieve a scale that is simply staggering.
Think about the original code base for Google’s search service or Apple’s iTunes store, for example. Few could have envisaged the explosive growth that would accompany the development of these software services.
Both examples testify that a pure idea, disruptive in its nature and well executed in software, can go a long way indeed.
Technical debt
But it’s far too tempting to believe that you can build the “Next Great App”, ship it, and kick back to watch the revenue rolling in. As we know, the reality of maintaining, fixing, and updating software to support its lifetime value is a massive undertaking.
But is it possible to quantify this burden of “technical debt” — the cost to fix structural flaws that remain in the code when an application is released?
Software quality study
That’s why I was particularly interested in the 2010 CAST Worldwide Application Software Quality Study (link opens a PDF). CAST Research Labs specialize in the study of custom software development and they have compiled a dataset from over 500 applications.
I was really impressed by the range and depth of this study, involving 75 organizations across 8 industry segments. Data were collected over a period of 3 years and drawn from 288 applications built in North America, Europe, and India — it’s fair to say the results are broadly representative of the software industry as a whole.
For a good summary of the CAST report, I’d recommend the following SD Times article titled CAST puts a number on the cost of fixing code quality. The estimated cost to fix problems in an application once it is operational is particularly revealing, and it puts the cost of ownership for software applications into perspective:
If your organization has an application with approximately 374,000 lines of code, you can expect a technical debt of about US$1 million.
Security scores
I was not surprised to read that COBOL scored highest in security and robustness, given the demands of financial services systems where mainframes dominate the picture. Clearly, mainframe systems are less open and exposed to the myriad of security threats that face web applications.
Perhaps more worrying was the abysmal security score attributed to .NET, with Java not far behind. Far more work needs to be done educating developers in the best practices of building secure applications — it’s no surprise that our web application security training generates plenty of demand from InnerWorkings clients:
Mainframe-based applications are less exposed to the security challenges posed to Web-facing applications. Nevertheless, the lower security scores for other types of applications is surprising. .NET applications received some of the lowest security scores.
Are developers too reactive?
Another key finding of the CAST report is the prevalence of performance concerns in developers’ minds:
It is not uncommon for end-users to complain vociferously to the development team about slow performance, prioritizing the remediation of performance problems over other quality problems such as poor maintainability.
This reactive approach from developers, while perfectly understandable, can lead to increasing technical debt over an application’s lifetime, as less attention is paid to software maintenance problems.
Perhaps the most telling recommendation from the CAST report is for developers to tackle structural flaws and maintenance problems in the development phase:
Time needs to be built in for remediation and refactoring prior to shipping. If you don’t do something about it now and continue to write code, you’re going to continue to build technical debt.
Consider your software legacy
So this CAST report encourages everyone involved in the software industry to consider the legacy of software applications. Don’t overlook the burdens of maintenance that an operational application must bear in order to be successful over its extended lifecycle.
Lastly, the CAST report cautions that software organizations are often unwilling to tackle cost of ownership or code complexity, particularly when an application appears to be running correctly:
In some cases organizations do not want to reduce the complexity of code that appears to be running correctly, even if cost of ownership and time to deliver enhancements could be reduced by refactoring the code. These observations may also identify the need for continued developer training in best design and coding practices.
Training really matters
So let’s not overlook the central take away from this last part of the CAST report — training in application design and best practices have a measurable impact on an application’s lifetime value and total cost of ownership.
I would argue that software executives reading this report should give serious consideration to setting up formal training programs on object oriented development, application security, and design patterns at a minimum.
Now that recommendation is really music to our ears at InnerWorkings!