Upholding software quality can be difficult. Just when you think you have it mastered, it can crumble in an instant. One company currently dealing with this is Apple. The Wall Street Journal recently examined Apple’s software quality woes:
“No one, it seems, not even Apple Inc., can escape the challenges that come with the scale and complexity of modern networks. Apple is selling 40 different devices this year—one-third more than it did five years ago—increasing the amount of code the engineering team must write to make sure each functions properly. With more high-end features…Apple’s engineering team is facing more challenging software [quality] problems.”
I learned a similar lesson when I was in grade school.
One summer, I started a small car washing business with little more than some soap, sponges and a bucket borrowed from my father. While I was starting this business as a means to buy some new toys (it began with an R/C car, escalated to planes, and eventually guitars), my father saw entrepreneurship as a means to teach two things: work ethic, and the value of a dollar.
What sticks in my mind still to this day however, was his constant insistence on quality. He knew that our neighbors could either hire me, or simply drive a mile down the road to the industrial car wash. If I didn’t differentiate my services, I wouldn’t have any business. Quality would be that differentiator.
In today’s software development market, we’re confronted with similar competition, but loss of customer satisfaction/business is not the only cost associated with bad software quality and poorly written code.
Software Quality’s Impact on Complexity
When an organization allows poor development practices to take hold, software complexity and technical debt can cascade across entire software portfolios. For starters, software complexity has a direct negative effect on the productivity of the engineers working in that code base. If (hypothetically) you were to move a set of engineers from the least complex region of the codebase to the most complex region of the codebase, their productivity would decline (conservatively) by 50%.
This decline in productivity doubles the cost of the engineers working on this region of code! This is of course before you look at the increased levels of defects resulting from dealing with increased software complexity.
Looking at Dan Sturtevant’s MIT Dissertation, we see that high scores of cyclomatic complexity result in a 2.1x increase in defects found within the code base. Recalling that defects increase exponentially in cost depending on the environment (what is $100 to fix in development will be $10,000 or more to fix by the time it makes it to production) the costs can really begin to add up.
Software Quality’s Impact on Talent
As if this wasn’t enough reason to seriously consider the real costs of technical debt, it continues to escalate. Software engineers working in the most complex regions of code can be expected to have a turnover rate of ten times greater than engineers working on less complex code. Employee turnover costs differ per organization, but recruiting costs, relocation fees, vacation pay-outs etc. While those costs are easier to quantify at a given organization, what’s often not being considered is the decrease in productivity between new hires and experiences engineers. You have to weigh in potential training costs, as well as an uptick in bugs, and decrease in overall productivity when comparing an engineer with more experience in the organization to new hires.
While often we think of technical debt as the cost associated with refactoring code, that doesn’t take into consideration the full cost of lingering software complexity. We can see time and time again the negative effects of allowing software development to become a feature factory, in fact we’ve even written about it here. Much like my carwash business, it’s easy to see the impact of poor software quality on your top-line revenue, but you’d be remiss if you didn’t consider the hidden costs poor software quality has within your organization.
We’ll be talking more about software quality and agile software development in our upcoming webinar Beginning your Agile Transformation: A Rountable Discussion on Common Pitfalls and Challenges.
Note, this article references the following: Sturtevant, Daniel J. “System Design and the Cost of Architectural Complexity” PhD Diss., Massachusetts Institute of Technology 2013. Retrieved from https://dspace.mit.edu/handle/1721.1/79551