Web development

Taming the beast: Managing your organization’s technical debt

TL;DR: To keep your organization flexible and secure, avoid short-term thinking that may create technical debt.  

If you manage a website or application, you may have heard the phrase “technical debt.” (No, it doesn’t mean you’ve overdrawn your Bitcoin account.) Technical debt is like financial debt for the software that powers your organization. 

What is technical debt?

You accrue financial debt when you choose to pay a lower price upfront, knowing that you will pay a greater cost in the long run. You accrue technical debt the same way: by making short-term decisions that appear cheaper or faster. Both types are similar in that the more debt you accrue, the harder it gets to make long-term decisions to pay it off—thus continuing the cycle.

The Vicious Cycle of Technical Debt

You don’t have to be using enterprise software to experience technical debt. Here are a few real-world examples that may sound familiar:

  • You can’t get the newest features of iOS because you have an older iPhone.
  • You can’t get your old vacation photos off Picasa because Google abandoned it in favor of Google Photos.
  • You get little black rectangles instead of the hottest new emojis in text messages from your friends who have newer phones.

How does technical debt present?

Well-built web infrastructure should look like a pyramid, where each tier is evenly supported by those below it. Unfortunately, over time, technical debt can leave organizations’ infrastructure looking more like a Jenga tower. Short-term decisions remove stability from the lower tiers in order to add functionality to the top of the stack. Unlike in Jenga, in the real world, we can choose to improve our foundations. This requires careful planning, a broad perspective, and sometimes delayed gratification.

Here are some examples of accruing technical debt:

  • Running versions of software that are no longer supported. Old versions of PHP, old operating systems, old versions of WordPress or Drupal, and their plugins and modules are all examples of software that organizations rely on to do business. It might seem difficult and expensive to update, but waiting longer is just letting the interest pile up. In the meantime, your users’ experience, your search rankings, and the digital safety of your product all suffer.
  • Using custom code for common tasks. For instance, writing a custom legacy payment processor, instead of using a community standard for payments. Donations are often the backbone of a nonprofit’s web presence, so technical debt here can be extra painful.
  • Not practicing proper data hygiene when you have the opportunity. For instance, it may seem costly to clean up poor-quality data before migrating it into a new Salesforce instance. But if you don’t, processes and workflows in Salesforce will be less useful, and worse, your staff may not trust the data, leading to costly adoption struggles.
  • Not following established best practices. Most website themes use a SASS or LESS compiler to make it easier to update the styling instructions of the website. Developers in a hurry might update the CSS directly. But then, the next developer has to update the CSS directly too. Going down this road just a few times makes it almost impossible to go back to the precompiler that made life so easy. It also makes troubleshooting any future styling issues significantly more difficult.
  • Hard-coding content. Content pasted into your website (such as from Word) is more difficult to edit with the site’s tools. The next editor will need to be careful not to break your markup. Hard-coded styles can’t be overridden by your stylesheets if you change your styling. And if you migrate to a new website, the formatting you put inside your content is stuck there like a rock in your shoe.

Should you worry about technical debt?

When in financial debt, you might only be able to afford to pay interest each month without ever attacking the principal. With a website, you might have to spend precious staff time or developer costs fixing broken features or dealing with outdated services and plugins. Technical debt may also cause you to lose business because you don’t have the features that customers expect.

Sometimes, debt is necessary. It would be hard for most people to buy a house with cash. Similarly, organizations have to make difficult choices to prioritize their budgets. Sometimes the fast and cheap solution is the prudent decision. But it’s important to know what you’re setting yourself up for down the road. If you have a pyramid with a broad base, it’s a lot easier to take out a piece and stack it on top. If you have a leaning tower, it might be more prudent to wait on that shiny new feature and reinvest in your foundation instead.

Nine ways you can manage technical debt

Here are some ways an experienced technology partner can help you understand, manage, and pay down your technical debt:

  1. Take stock of your debts and assets. Just like with financial debt, the first step is to get a left-to-right view of your situation. A good vendor can help you identify areas of concern. A few common pain points are outdated or unsupported software, insecure code, and brittle infrastructure.
  2. Hunt down root causes. If possible, make institutional changes to stop causing further debt in these areas. Talking with your staff can identify areas of improvement, like being more careful about how data is entered. Sometimes an ounce of prevention is worth a pound of cure.
  3. Look for ways to aggressively cut down your debt. It might be cheaper to migrate your website to a new server rather than trying to upgrade the operating system on your current server. A managed host like Pantheon insulates you from operating system and software security holes, automates backups, and expedites maintenance updates. Declaring technical bankruptcy and changing platforms can be a prudent choice that helps get you back on track.
  4. Know your whole stack. If you run WordPress or Drupal, you have probably dealt with upgrading your PHP version. And Ubuntu 14, a popular open-source operating system, stopped receiving security updates last year. On the CRM side, some Salesforce apps are slow to become compatible with Salesforce’s Lightning interface, which will eventually lead to upgrade challenges. Remember, all software has a “stack” of dependencies. If one layer in your stack is deprecated or insecure, the rest of the tower is less balanced.
  5. Watch the crowd. More popular isn’t necessarily better, and you should always choose software that fits your needs instead of picking a default. But, with open-source software, the most widely-used platforms and plugins generally have stronger communities. This can be helpful for combating security problems, avoiding new debt, and coming up with ways to pay down your existing debt. Using software that others use is like having a bigger team behind you.
  6. Be predictable—follow the best practices of your platform. Writing “cowboy” code is tempting, because it gets a product to market faster. But it’s the digital equivalent of a high variable interest rate. It’s hard to foresee when it will break, and how much it might cost you when it does. Using predictable community-tested methods can help insulate you from staff or vendor turnover, avoid regressions, and mitigate security risks. When you do deviate from best practices, document, document, document. Ask yourself: if key staff members left, or if you changed vendors, would you be able to pick up where they left off? 
  7. Know when to let someone do it for you. For instance, you might be better off integrating an external payment service like Stripe rather than building a full-fledged e-commerce site. Many organizations use YouTube or Vimeo for their videos rather than managing the files and video player themselves. Some businesses may not need their own platform and can get by with a combination of social media tools. Choose organizations and tools that give you the most control of your data, so that you have the flexibility to grow if needed.
  8. Know when to do it yourself. Sometimes, an out-of-the-box solution will actually create more technical debt. As your business grows, being reliant on a platform that doesn’t do everything you need can be a headache. An experienced technology vendor is the best way to help you choose between out-of-the-box and DIY.
  9. Treat your CRM or web infrastructure like a nice car. A “dealership maintenance schedule” mindset will go a long way towards avoiding the pitfalls of technical debt. All technology has an operating cost. You can pay the minimum upfront, or you can pay more later.

Technical debt can seem like a harsh reality, and many organizations have to make difficult choices to stay ahead of it. But awareness of the hidden costs of your software can help you make choices that make your organization more versatile and durable.

Technical debt in a nutshell:

  • Organizations create CRM and web-related technical debt when they choose to prioritize lower-cost approaches or fancy features in the short term. This may not be in the best long-term interests of the organization or its mission/goals.
  • All digital functionality has a cost. It’s just like with consumer goods: paying less upfront or getting a deal that seems too good to be true are signs that you’ll pay for it later.
  • Mitigating the risks of technical debt starts with clearly understanding your current debts and assets, making a plan with best practices in mind, and keeping up with preventative maintenance.

Learn more about Fíonta’s ongoing support and maintenance.