Several years ago we received a call from Sarah, a client of ours. Sara works for a school administration organization that TroyWeb worked closely with to build an online portal to help her easily manage a large database of school vendors. Sarah explained that a file upload feature needed to be added to a registration form in order to comply with a new NY state regulation. She assumed that adding such a feature should be easy (and we thought she was probably right). But, when we fired up the project, we discovered that despite the relative simplicity of the new feature request, our client had a different problem: Technical Debt.
The term "technical debt" is used to emphasize the trade-off between short-term gains and long-term costs in software development. It is a reminder that every time a team chooses to pass on a new software version, server update or code change that they are incurring a debt that will need to be paid off eventually. When technical debt is not managed properly, it can lead to increased costs and massive long-term declines in productivity.
Our Project Manager immediately called Sarah to discuss her options. Their conversation was rooted in a description of how modern software development has changed vs. legacy development practices. Specifically, when using today’s automation and dependency management tools, software development has become as much a skill associated with assembling existing code libraries as it is creating new custom code.
Combined with cloud services like Amazon Web Services (AWS), today’s software can be assembled fast and quickly do powerful things. But with that power comes great responsibility - the added dependencies require a level of diligent maintenance that most software owners underestimate.
At the heart of the issue is that the code libraries used during development and assembly get constant updates. Old versions of those libraries lose support over time and backward-incompatible changes are introduced that make "rebuilding" an app impossible without upgrading the libraries.
When these updates are ignored, even a simple new feature request can require a massive update to the base code, just to enable simple changes or enhancements to the code. To provide context, today’s simple software will rely on hundreds, sometimes thousands, of externally managed code libraries. The trouble introduced with a simple "update" to one of these libraries can be like pulling a thread on a sweater - everything unravels quickly.
In many cases, updates aren't particularly problematic. But as the size of the upgrade increases, the level of effort grows exponentially. As if software dependencies aren't complicated enough, without routine maintenance, upgrades often involve multiple version "jumps" with no clear migration path. Such upgrades introduce considerably more bugs and an enormous amount of regression testing. In Sarah's case, her software was built on Laravel 5 and we needed to upgrade to Laravel 8. But Laravel 8 required a jump in PhP versions; and the upgrade of Php was going to require a change to the AWS EC2 Server.
Sarah quickly realized that not keeping up with updates had become a problem and asked our team to help take on the heavier lift of upgrading all the system components so that file upload enhancement could be completed. She knew that not complying with NYS ED Law 2-D was simply not an option. In addition to the immediate need, Sarah also signed up for TroyWeb’s Maintenance and Service Plan offering to avoid the negative impact of technical debt in the future.
A year later, Sarah had another feature change that was needed to adapt to remote learning environments setup during the global Covid-19 pandemic. We were able to implement the enhancements in just a few days because the code base was routinely being kept up to date. After some minor software updates, the rest of the effort was all about the new features. Testing was a breeze because much less code was affected by the upgrades. Crisis averted.
There are many other benefits to a Service Plan beyond helping ease future development efforts. The security, reliability and performance of your system depends on frequent updates. Mobile apps can very quickly become non-compliant with app store rules and get removed without notice. The regular maintenance provided under a software service plan helps keep a steady flow of smaller upgrades moving along, preventing the need for fire drills or monumental shifts in a code base that can trigger exponentially larger efforts and wreak havoc on your business.