This post by Jeffrey Hanby originally appeared on the LookFar blog.
Every piece of software needs maintenance. Plain and simple.
The more complex the software, the more maintenance it will likely need to ensure continued use. The obvious questions are why and how much. This varies and is a bit of a loaded question because every software product is different. It’s possible to minimize maintenance costs through intelligent planning and execution, but it’s also possible to wind up paying more to maintain your product than it did to develop it if you’re not careful.
Why is Software Maintenace so Important?
Engineers explaining the role of maintenance will often tell you to compare your software product to your car. Just as your car needs oil changes, tire alignments, or possibly even an engine rebuild, your software product will need similar fixes performed to ensure optimal performance.
But let’s imagine that every single component of your car had thousands of different manufacturers and each one was updated every month. In this scenario, your spark plugs could stop sparking at any given moment because of a change to your timing belt, or your brakes could wear because your gas cap was upgraded to a cool new version that reminds you to tighten it.
Mechanics in the above scenario might empathize with a developer tasked with maintaining a complex software product.
The concept of car maintenance makes sense to us, though. The more you drive your car, the more things wear down and need to be replaced because they are physical. But why would a digital product like software need to be maintained, so long as it’s well-structured from the outset? The code doesn’t wear down over time, right?
Well, not physically, but things do happen that require certain actions be taken to preserve the intended use of the software. Equating physical maintenance to software maintenance gets the point across, but the analogy needs further explanation to help us understand how to properly plan (and budget) for the necessary costs of keeping your technology running.
What Exactly is Software Maintenance?
Before we can start estimating the cost of software maintenance, we first need to understand what maintenance actually encompasses. Software maintenance is defined by the IEEE as:
“Modification of a software product after delivery to correct faults, to improve performance or other attributes, or to adapt the product to a modified environment.”
There are many software maintenance cost factors. Maintenance isn’t just about fixing bugs; it entails any effort to keep things running the way your users expect it to run. And more times than not, that means something other than simply fixing defects in your code.
To illustrate this, let’s say you’re running a hypothetical tech company. You’ve successfully built the first version of your product, and you’re releasing it into the wild. Over the course of the next several weeks, you encounter several issues that need to be addressed to keep your users onboard.
You just launched last night, but you receive word that users are unable to login with their Facebook credentials. You contact your developer and discover the authentication code that talks to Facebook has a small defect and needs to be updated to restore login functionality.
This is a type of software maintenance called corrective maintenance, defined as reactive modification of a software product performed after delivery to correct discovered problems.
Users have been successfully logging into the system for several days now and things are going great, but you discover the issue is back and users can no longer get into their account. After several hours of investigation by your developer, you learn that Facebook changed the way you authenticate with their API, so your site needs to be updated to support the new method. While Issue #2 looks an awful lot like Issue #1 on the surface, it’s actually being caused by a change to a 3rd party system that you rely on – a totally different root cause. Your developer spends a few more hours updating the site to support Facebook’s new authentication method and everything is back to normal.
This issue requires adaptive maintenance, which is modification of a software product performed after delivery to keep a software product usable in a changed or changing environment.
Facebook has calmed down and stopped breaking your site, but you start to get some feedback from your users after a few more days. It turns out that instead of being sent to their profile after logging in it makes more sense to see the recent activity dashboard. A reasonable request; you work with your developer and after a quick update to the system, users are now greeted with the latest action in the product so they can always stay current.
Perfective maintenance, which typically results from user feedback, is modification of a software product after delivery to improve performance or maintainability. The goal is to ensure your users are satisfied with the experience and will continue to use your product as a result of the added value perfective maintenance contributes. New features and enhancements to existing features are not considered perfective maintenance. If the recent activity dashboard didn’t exist, this would be a new feature rather than perfective maintenance.
And with that one change to your system (we’re talking very hypothetically here), you garner massive interest from your user base and need to prepare for a high traffic event in the coming days. You’re not sure if your server can handle that kind of load, but you do know if the site goes down with that much attention, you will have a lot of angry users who may abandon your product. So you task your developer with safeguarding against that disaster, and she spends considerable time upgrading the hosting environment to be more scalable. When a lot of traffic hits one server, her upgrades ensure new servers automatically come online to handle the extra traffic. This auto-scaling infrastructure didn’t make sense to set up during development, but now that you need it, it’s critical to your product’s success.
This effort is categorized as preventive maintenance, or modification of a software product after delivery to detect and correct potential faults in the software product before they take effect.
Software Maintenance Cost vs. Development Cost
Now that we know what software maintenance entails, you would assume we could then perform cost estimation. Unfortunately, it’s not that easy. There is no industry standard calculation or baseline to determine a proper software maintenance budget. Industry experts have tried putting a number on it based on a representative sampling of projects of varied scope and complexity, but no one can agree even at a macro level what a typical maintenance budget looks like.
Below are some order of magnitude attempts that various writers in the industry have used to ballpark what the maintenance costs are going to be.
|Author||Maintenance as a % of Build Cost|
|Daniel D. Galorath||75%|
|Stephen R. Schach||67%|
|Thomas M. Pigoski||>80%|
|Robert L. Glass||40% – 80%|
These findings differ for a number of reasons, but the main one is because the projects used to calculate them were all different. That is the point – no 2 software projects are the same. Additionally, the articles above all define maintenance as the end of product development and the start of a support phase. With the advent of Agile and Lean UX, product development never really stops; maintenance just kicks in concurrently when people start using your product. This requires a delicate balance of budgeting for new features as they are requested while also budgeting for any of the 4 types of maintenance (corrective, adaptive, perfective, preventive).
Building and supporting software products involves many variables that are often at odds with each other, so setting your budget by using a number that describes the average can set you up for failure. As business-minded individuals, we understand the necessity and value in coming up with a budget for maintenance, but at the end of the day, this budget will be nothing more than an estimate that can change drastically.
Factors Affecting Software Maintenance Effort and Cost
Let’s take a look at 2 products, both of which have been in use for a year and have over 20,000 users each.
Product 1, which we’ll call Taco Bout It, is a geolocation enabled social networking mobile app that lets people who love tacos connect with other taco loving folks. Taco Bout It was built exceptionally fast by using a lot of 3rd party integrations that do all the heavy lifting, which was critical to its success as they were the first to launch in a rapidly expanding taco lover market. There are a ton of features in the app (some of which get very little use) that result in a very rich user experience. What are the maintenance costs for a mobile application like Taco Bout It? Well, to keep it running, its developers have to constantly battle updates to each integration that occasionally break seemingly straightforward functionality in the app. An update to the push notification service prevented users from discovering nearby fiestas. On top of that, new versions of iOS and Android bring with them several rounds of regression testing (which is when you go back and make sure you didn’t break your software by updating it). This can sometimes uncover broken functionality that needs to be made compatible with the latest update from Apple and Google.
Product 2, called Pointastic, is an employee reward tracking web app that let’s managers reward their teams by giving them points to spend on fun prizes. Pointastic was created specifically for a company participating in a pilot program, relies on very little 3rd party dependencies and is hosted internally by the pilot company. The functionality is straightforward; managers can login to award points to a team member for a job well done, and team members can claim qualifying prizes from the prize pool. Since Pointastic doesn’t have to worry about Apple, Google, or any other 3rd party service from crashing the party (pun intended), and the hosting environment is already maintained by the company’s IT team, Pointastic’s maintenance effort is very low.
While 3rd party services allow for faster, cheaper development, their dependency adds considerable expense to the maintenance effort especially as your product’s complexity grows. So a question like “how much does it cost to maintain a mobile app?” does not have a straightforward answer. It really depends on many variables, including the app’s initial architecture.
Best Practices for Budgeting Maintenance
The fact is each budget needs to be carefully crafted with your product’s history, goals, and team in mind and should be as detailed as possible.
Before we discuss everything that can impact maintenance, you first need to identify any constraints that will affect the maintenance plan. Did you guarantee an aggressive Service Level Agreement (SLA) for your users? Do you have limited funds to devote to maintenance? Constraints happen, but they need to be known up front before a maintenance plan is discussed.
Consider how mature your product is and what it needs to retain a high satisfaction among users. If your product has or is about to be newly launched, more emphasis should be placed on corrective and perfective maintenance. Your product has not lived long enough to resolve all defects nor has it been used enough to set its behavior in stone. If your product is mature, adaptive and preventative maintenance should be higher priorities. Whatever state your product is in, just be aware that product volatility requires more effort to keep it running as expected. The more workarounds, hacks, and shortcuts that were taken during development, the more your maintenance budget will be affected. A way to combat product volatility is to use a lean approach during product development to guarantee the exact amount of complexity that needs to be maintained in the future…nothing more, nothing less.
Next, ask yourself what you are trying to accomplish with your maintenance budget. Do you want to place more emphasis on perfecting your product by listening to user feedback? Perhaps you’re happy with your product, and you would rather focus on system stability. For instance, a startup would want to perfect their signup process, while a back office system would rather monitor its database for potential optimization. Once you know the priorities, you can start to identify specific items that need to happen and those that you can worry about later – this is the most important exercise to determine your maintenance budget, so get detailed.
Who is performing the maintenance is a factor that has not been paid the attention it deserves in the various articles I’ve come across. If you are somewhat technical, there could be some ways to save on maintenance costs by tackling some of the tasks yourself. Regardless, you need to work with a Subject Matter Expert (SME), be it the original developer of the system or the current development team when identifying the specific maintenance items. Being an SME implies a solid understanding of the product’s technical architecture, business logic, and product goals. This familiarity will ensure a sound maintenance plan and a more accurate estimate. If you don’t have anyone with that familiarity with your product, you need to find someone capable and let them get familiar with it.
Maintenance Budget Checklist
Everything up to this point has been conceptual and not particularly concrete info that can be used to inform your particular maintenance plan. This post is really about grasping the concepts at play while planning your maintenance, but knowing how to estimate specific types of maintenance is important. Check out this explanation on that topic, broken down by the different types of software maintenance. Then, use the following budget checklist to make sure you don’t forget anything in your maintenance plan.
- Hosting fees (infrastructure, storage, bandwidth, SSL and domain renewals)
- Perpetual software licenses
- SaaS account fees
- Developer account fees (iOS/Android)
- Defect resolution (# of bugs times average cost per bug)
- Perfective UI/UX updates
- 3rd party dependency adaptive support
- Anticipated business logic or rule changes (perhaps mandated by law)
- Preventative maintenance (periodic updates to plugins, security patches, etc)
- Code refactoring (to improve maintainability)
Things to Remember
Creating a maintenance budget is a very similar task to estimating your project at its inception, but with a lot more variables to consider. As with all estimates, they are as much an art form as they are a science, and the more discrete and comprehensive they are, the more accurate they tend to be when compared to actuals incurred.
Here are some tips to remember when estimating your own maintenance costs.
- Work with your software partner/team to create a maintenance budget custom-tailored to your product.
- The best way to reduce maintenance costs is to anticipate and plan for them during product development.
- Find a balance between investing in new features and unexpected maintenance.
- A sound maintenance plan strives to identify specific tasks to be performed
- Always be cognizant of your product’s volatility and consider its goals when planning your maintenance budget.
I want to end this by saying: do not let the looming cost of eventual maintenance deter you from building a product. Smart developers will know how to structure the early build to keep maintenance costs manageable. Just be aware that your software or mobile application will need a little TLC throughout its lifespan to keep it working the way you intended.