With many organisations migrating from on-premise to cloud solutions these days, more and more of them are stumbling upon mountains of technical debt. But what is technical debt and how can DevOps help you deal with it?
What is technical debt?
This academic definition of technical debt comes from the Information and Software Technology Journal who define it in very specific terms:
“Technical debt describes the consequences of software development actions that intentionally or unintentionally prioritise client value and/or project constraints such as delivery deadlines, over more technical implementation, and design considerations…”
They go on to say: “Conceptually, technical debt is an analogue of financial debt, with associated concepts such as levels of debt, debt accrual over time and its likely consequences, and the pressure to pay back the debt at some point.”
To put it in a nutshell, technical debt is what happens when your company or IT department makes poor technical decisions over the lifetime of an application. As time passes, it gets harder and harder to change things, and IT initiatives will slowly grind to a halt.
Many people believe that technical debt only occurs in development, stating things such as poor state management as an example. However, the reality is that it can also occur in operations, such as running outmoded operating systems that are no longer supported or running servers that are not patched and up to date.
One thing to point out is that technical debt is not always deliberate, a lot of the time it is inadvertent. In 2009, Martin Fowler, Chief Scientist at ThoughtWorks, published an article entitled “Technical Debt Quadrant” which sorts technical debt into four categories:
He went on to make the point that sometimes the only way for you to decide whether you have a viable product or not is to get it in the hands of customers – which may mean you have to cut corners, which will mean you incur technical debt.
So, how can DevOps help you deal with technical debt?
#1 Create DevOps product teams
One of the main principles that underlie successful DevOps is the creation of small, multi-disciplinary teams who own the entire lifecycle of the development of a product or service. These teams have to deal with the impact of technical debt on a daily basis, meaning they are highly motivated to solve it, in order to make their day to day tasks much easier.
There are simple things they can do to tackle technical debt including:
- Start by assessing and tracking the level of technical debt in products
- Then assess each level of technical debt and decide which are the unacceptable levels – i.e. things that are blocking the potential for the team to achieve your product goals
- Avoid creating more technical debt in new product development by using the technical debt quadrant above to determine whether the technical debt is prudent and deliberate or not. If it is, then track it and make sure you have a plan to solve it in the future.
#2 Build shared self-service platforms
Self-service platforms are a great way to support product teams as they help avoid the technical debt which occurs when building and maintaining toolchains. Platform teams can build self-service platforms to meet the exact needs of the product teams by using internal or third-party software-as-a-service (SaaS0) solutions. The beauty of this approach is that they can include best practice templates, reference architectures and other building blocks as needed.
Developing software internally like this helps to involve all employees in making and implementing decisions through the business – empowering them and also increasing collaboration between teams – which is always a good thing. Building self-service platforms can keep technical debt to a minimum, while also encouraging an open and collaborative mindset for all employees.
#3 Use DevOps automation to help you repay technical debt
Automation is key to a DevOps approach, as it is the most common DevOps model – CALMS (Culture Automation Lean Measurement Sharing). Automation can also be used to help you repay technical debt.
Let’s say if your application works in the development stages, but not in pre-production or production stages – then inconsistency will probably be the root cause. This could be down to application dependencies, communication between different services, configuration settings or even the operating system configuration. The time you spend checking what is causing the application to fail is your technical debt – as it will have a cost impact.
Automation, such as configuration-as-a-code and infrastructure-as-a-code enable your product team to express their intent for how they want the environment to be and then make it happen consistently in every instance. As you won’t then be spending time troubleshooting deployments your product team can spend more time paying back other technical debt.
#4 Using containers to simplify application deployment & management
Containers allow product teams to hold the application, its configuration and operating system (OS) dependencies in one bundle – which makes it easier and faster to deploy.
The use of containers simplifies everything, and you can even use container orchestration tools to automate the container lifecycle in production, leaving your DevOps team free to focus on other tasks that potentially have a higher value.
#5 Build an API-centric model using DevOps
A lot of the time, technical debt is caused by different systems accessing data and services in a way that other teams did not expect. Encouraging your DevOps team to build and consume API-centric applications with well-defined interfaces is a great way to reduce the amount of technical debt in your business.
APIs make hidden dependencies more visible and less fragile, so products will have clear roadmaps which are supported by semantic versioning. This reduced amount of fragility means there will also be a reduced amount of technical debt as well.
If you want to get your technical debt under control through the use of a highly skilled Lead DevOps Engineer, or you want to be the DevOps engineer who implements the resolutions to companies’ technical debt, then please contact our team of expert recruitment consultants.