Mark Reha’s passion has always been teaching and working with engineering students. He taught in college for two years as a TA in 1982 while he was going to college and fell in love with teaching! This past year at GCU, he taught Database Application Programming I, Database Application Programming II, Database Application Programming III in PHP/MySQL, Enterprise Application Programming in .NET/C#, Operating System Concepts and C++ Object-Orientated Programming.
In my first blog post, Do We Need to Teach Code Maintenance?, I discussed the importance of teaching our students the required skills they will need to perform their first job of maintaining software. In this follow up article, I will discuss the ramifications of not testing code, the time and money the industry spends on maintaining code, the potential high cost of fixing software defects and how program curriculum design could have a positive impact on reducing the cost of maintaining software in the industry.
This article further validates the need to teach our students the important skills required to maintain software and offers a number of suggestions on how to better prepare our students to enter the workforce as well as how to better prepare them for their first programming position.
The High Cost of Defects and Software Maintenance
It is estimated that up to 90% of the cost of software development is in software maintenance. This alarming trend was predicted as early as 1972 when McKinsey suggested that CIOs should spend no more than 40% to 60% on maintenance. Gartner’s IT Spending and Demand Survey (2002) reports that CIOs are actually spending 80% of their budgets on maintenance (Blane, 2007). The general rule of thumb in software development is that for every $1 spent to develop the original software an additional $3 is spent to maintain the software. “A 2003 study commissioned by NIST found that software defects cost the U.S. economy $59.5 billion annually” (Leon, 2015).
When do software developers start maintaining code?
“All programming is maintenance programming because you are rarely writing original code. If you look at the actual time you spend programming, you write a bit here and then you go back and make a change. Or you go back and fix a bug. Or you rip it out altogether and replace it with something else. But you are very quickly maintaining code even if it’s a brand new project with a fresh source file. You spend most of your time in maintenance mode. So you may as well just bite the bullet and say, ‘I’m maintaining from day one.’” (Dave Thomas, 2003)
“It’s only the first 10 minutes that the code’s original, when you type it in the first time. That’s it.” (Andy Hunt, 2003)
I personally define software maintenance as the software coding activities that take place after the first major version (i.e. v1.0) of a software product has shipped or is generally made available to all customers.
The cost of maintaining software is impacted by the quality of the code and the number of defects in the code. The cost of maintaining software also varies depending on when defects are found in the SDLC process. The later a defect is found in the SDLC process, the more it costs to fix the defect. The Systems Sciences Institute at IBM reported that “the cost to fix an error found after product release was four to five times as much as one uncovered during design, and up to 100 times more than one identified in the maintenance phase” (Leon, 2015).
Consider the following:
- If a defect is found in the requirements phase, it may cost $1 to fix.
- If a defect is discovered later in the development process, then the same defect will cost:
- $10 during design
- $100 during coding
- $1,000 during testing (Boehm, 2001)
What Can We Do About It?
At a minimum, to properly prepare our students to perform their first job duty of maintaining software, we need to teach out students the following:
- The full SDLC process.
- The role they play in the SDLC process.
- The role others play in the SDLC process.
- How to write and execute unit and functional test plans.
- How to navigate through unfamiliar code.
- How to be proficient at using a debugger.
- How to use a defect tracking system.
- How to properly use a version control system.
- How to leverage various branching strategies that are used when maintaining software.
Reducing the cost of software maintenance requires software developers to find defects as early as possible in the SDLC process. We must stress and reinforce the following with our students:
- We must ensure software developers do not inject regression issues into the code which further increases the cost to maintain the software. Therefore, we need to stress and reinforce the importance of test-driven development, regression testing and test automation with our students.
- We must ensure that software developers do not make the code harder to maintain than what they started with. Therefore, we need to stress and reinforce the importance of coding standards and code documentation with our students.
We must ensure our students understand and practice agile delivery methodologies, such as XP, kanban or scrum, and stress the importance of leveraging test automation tools whenever possible in their software development practices.
In summary, we need to teach the students the importance (and value) of spending an adequate amount of time working on agile designs, performing peer code reviews, writing unit tests, utilizing static code analysis tools, ensuring software is documented via comments, adhering to coding standards and adopting software development industry best practices.
Grand Canyon University’s College of Science, Engineering and Technology provides students with degree programs that help them prepare for their career after graduation with relevant curriculum, job-ready skills and applicable soft skills. To learn more, visit our website or contact us using the Request More Information button.
- Arima Developer. (2003). A Conversation with Andy Hunt and Dave Thomas. Retrieved March 28, 2017 from artima.com/intv/dry.html
- Blane, Tyler. (2007). Agile Development and Software Maintenance Costs. Retrieved March 28, 2017 from tynerblain.com/blog/2007/02/28/agiledevelopment-roi-2/
- Boehm, Barry W. and Philip N. Papaccio. ‘Understanding and Controlling Software Costs,’ Reference v. 14, no. 10, October 1988, pp. 1462-1477
- Leon, Janet. (2015). The True Cost of a Software Bug. Part One. Retrieved April 21, 2017 from blog.celerity.com/the-true-cost-of-a-software-bug