The lifespan of software
Today’s software has an average lifespan of 6-8 years. Software with a million or more lines of code have lifespans averaging 12-14 years. Most software is managed under some form of continuous development (integration, delivery, etc.). It’s less expensive to maintain existing software than develop new software from scratch. Everyone has an interest in either keeping their legacy systems operating or updating older software functionality to remain competitive with the market.
That’s not easy. The first issue to bear in mind is long-term turnover. It’s an entrenched practice for software developers to find a new job after two years with a project. This coincides with their potential for up to 20% more pay, a better title, new challenges, and opportunities to learn new skills. This considered, it is likely that every member of your development team will rotate 3-7 times over the lifetime of your software project.
Other changes are taking place, too. Operating systems, like Android and iOS, are changing yearly. The lifetime of electronic devices ranges wildly, between 1.5 and 14 years, averaging about 4.5 years. Some programming languages can come and go out of fashion. Third-party solutions continuously enter and leave the market. New software and devices can give old software a new lease on life with new features.
The cost of poor quality code
Stripe’s Developer Coefficient indicates developer inefficiency (from all sources) to be as high as 31.6%. They also indicate developers spend about 4 hours per week dealing with bad code.
Let’s quantify that:
(# of developers 261 workdays # of wasted minutes per day / 60 minutes) Avg Hourly Wage = Cost
This equation can be used to quantify any type of code-related waste. The fully-loaded cost of the average US in-house developer equates to about $67 per hour (1.3 base wage of $51.25). Plugging everything in brings us to a total of $14k per developer per year in dealing with “bad code.” By some standards that’s fairly trivial.
Compounded across 8 in-house developers over 7 years, brings the cost of bad code to over $783,000.
Conversely, outsourcing the maintenance through Ukrainian developers, based on an average of $24 per hour, drops the compounded cost to roughly $280,000.
Establish and maintain a coding standard
A coding standard is very important for every software project. Many different developers are likely to work on it over its lifetime. The standard helps assure that everyone who works on it follows the same conventions. The project owner or perhaps the software engineering manager should define a coding standard. Any changes to it should also be documented over time. A coding standard includes issues like:
- Using a style guide for each language you use.
- Lists of frameworks, libraries, tools, and resources you want to encourage developers to use.
- Limiting the use of global variables.
- Using consistent and intuitive naming conventions.
- Maintaining consistent indentation and spacing.
- Writing code that speaks for itself – and if it doesn’t, add comments.
A coding standard should also address two key points:
- When is software code “good enough” with the goal of deterring developers from “perfectionist code.” Perfectionism wastes time on minor changes having little or no impact on readability or performance to create code that is eventually going to change anyways.
- Promote resources and re-use of code so that your team members avoid recreating the wheel. Existing solutions are more mature and have been tested more. Creating new solutions takes longer, requires more testing, and bug fixes.
Why use coding standards?
Code is read more often than it is written. For any developer to manage or upgrade code, they need to read it and understand it. Some software can exceed a million lines of code – which would take a developer four months to read. Of course, developers aren’t going to read through it all line by line. But, they will need to read and become familiar with substantial chunks of code to maintain with continuous bug fixes, rewrites, and code refactoring.
Maintaining and enforcing coding standards (in code reviews) makes it easier for everyone to read and understand the code even if they didn’t write it. Not maintaining a coding standard can let a little bit of dirty code snowball into spaghetti code increasing the cost and difficulty to maintain while increasing vulnerability for bugs to creep in. Applying to a coding standard makes it:
- Faster for all developers to read and understand.
- Easier to find bugs.
- Simpler to upgrade and add new features.
- Helps developers avoid wasting time on perfect code and reinventing the wheel.
Some companies only care that their software works as intended. But, software code is property – and it can be sold or licensed to others to use. Poor quality code can impact the marketability and market value of your software.
Outsourcing software maintenance
Every business has its own unique situation, long-term strategy, and product vision. Many startup founders are stressing enough over the next six months to worry about the next six years. Established businesses may be looking at how they can expand their product portfolio while maintaining their existing software products. Everyone is likely to want to keep their software commercially competitive as long as possible.
You are paying a premium if you maintain an in-house development team as full-time employees (in Israel, North America, and Western Europe). For each in-house employee, you could have 2-4 highly-skilled outsourced developers from Ukraine on your team. The cost differential for 8 developers over 7 years for handling bad code could amount to $500,000 alone.
Established companies want to maximize the competitive lifespan of their existing software while expanding their product portfolio. Here, it makes strategic sense to keep your in-house developers focused on new projects. This provides you a chance to develop a retention, continued education, and career development program to keep your specialized talent around longer. Outsourcing the long-term maintenance of your existing software is far more economical.