Management of Technical Debts
Management of Technical Debts
Management of Technical Debts
Date:
This is where technical debt comes into play. The concept recognizes a
trade-off between perfect products and the short timelines often
required for product delivery. While it can be useful to incur some debt,
as with money matters, there’s a limit to how much debt you want to
carry.
In this article, we’ll take a look at how technical debt is affecting your IT
team’s workload, and ways to manage the debt.
Date:
The easier route – made up of messier code or design, will get you
there faster.
The harder route – made up of cleaner code and design that takes
a lot more time.
(It is like cleaning by hiding everything under the couch – it’s tidy for
now, but nothing is in its correct spot. You’ll eventually have to spend
time properly cleaning and organizing it down the road in order to find
something you’re seeking.)
Date:
Code smells are much more subtle than logic errors and indicate
problems that are more likely to impact overall performance quality
than cause a crash.
Higher levels of complexity — when technologies overlap each
other.
Product bugs that will cause an entire system crash.
Issues with coding style. Developing a coding style guide and
sticking to it, will help to overcome this issue.
The key thing to note at this stage is that, if left unaddressed, these red
flags can result in higher total cost of ownership, longer time to market
and reduced agility. They can also negatively impact customer
experience and security.
Date:
Planned Technical Debt – This type of technical debt occurs when the
organization makes an informed decision to generate some technical
debt with the full understanding of the consequences (risks and costs).
In the case of planned technical debt, it is critical to be as precise as
possible in terms of defining the compromises the organization intends
to make. An example could be: “In order to meet the new release
deadline of November, we have decided to forego writing unit tests in
the final three weeks of the project. We will write these tests after the
release.”
Because these decisions can accumulate quickly over time, it is
imperative to maintain a record of them. Doing so will increase the
likelihood that technical debt will get addressed and paid down quicker.
Otherwise, it will quickly be forgotten, potentially costing the
organization big time in the long run.
Date:
A bad reason for incurring technical debt is because the team chose to
focus on other areas that are more innovative or interesting but less
important.
Even if you have a good reason for incurring debt, choosing the messier
option that ensures a quicker delivery isn’t the end of this design
choice. Instead, the team must return – at some point – to this piece of
design to add more functionality or revise it. The longer the team waits
to deal with an issue, the more likely it can cause more issues or get
buried in code. This is the interest: the time in the future you’ll have to
spend cleaning it up to get it to jive with new changes you have to
make.
Date:
Date:
In identifying technical debt you might have come across some key
signals. For example, your product’s performance ratings could be on
the decline or your developers may be taking much longer to iterate.
But how do you measure this? What is the true cost of technical debt?
One way to come up with this measure is to look at the number of days
developers would need to spend reducing technical debt by performing
activities such as refactoring or replacing the application. Once you
attached a dollar amount to these functions, you could then compare
this data to other milestones, like number of remaining days before the
release date. This will provide an excellent cost/benefit analysis and aid
in communicating more effectively with the rest of the organization.
Communication
Implementation
Date:
Date:
No Time to
“Do Things Right”
Developers prefer releasing well designed, well crafted software solutions. Clean
code allows for easy maintenance, extension and modification. In reality, this is
often not possible, due to tight schedules, limited resources and a push to meet
Document title goes here Author Name:
Date:
Poor Software
Quality
Technical debt is one of the major causes of poor software quality. With the
growing complexity of software systems, it’s impossible to test everything.
Whether you focus on comprehensive unit test coverage, integration tests between
major components, or UI test automation, you are bound to miss some components
or integrations which are critical for functionality, stability or performance.
Long-Term Software
Viability
Technical debt negatively impacts the long-term viability of software solutions,
resulting in application outages, security vulnerabilities, and increased maintenance
costs. Eventually, technical debt will make it very expensive to upgrade or
continue supporting the solution. Software products can become a legacy monolith
which developers are afraid to touch or modify because any change can have
unexpected results.
Untested code in production results in failures, poor user experience, and time
wasted on carrying out hotfixes. SeaLights analyzes modifications to your code
Document title goes here Author Name:
Date:
and lets you know whenever an untested code change has gone through production
unnoticed. Prevent risky code prior to shipment and address critical issues before
they affect your users.
Learn more
Learn more
Learn more
Date:
If you’ve been in the software industry for any period of time, chances are you’ve
heard the term “technical debt”. Also known as design debt or code debt, the
phrase (or more accurately, the metaphor) is widely used in the technology space.
It is referred to as a catchall that covers everything from bugs to legacy code, to
missing documentation. But what exactly is technical debt anyway? And why do
we call it that?
Date:
He didn’t realize at the time, but he had coined a new buzzword in the software
community. Later, it would become the subject of countless academic studies,
debates, and panel discussions.
“With borrowed money, you can do something sooner than you might otherwise,
but then until you pay back that money you’ll be paying interest. I thought
borrowing money was a good idea, I thought that rushing software out the door to
get some experience with it was a good idea, but that of course, you would
eventually go back and as you learned things about that software you would repay
that loan by refactoring the program to reflect your experience as you acquired it.”
It is a Tool
Much like someone may take out a loan on a property as a means of getting into a
booming real estate market before being priced out, technical debt is often used as
a tool for “getting ahead.” Trey Huffine, founder of gitconnected explains the role
Document title goes here Author Name:
Date:
It Has Consequences
It is NOT a Mess
Date:
By his definition, taking on technical debt is always intentional and strategic. His
explanation supports McCormick’s claim that bad code does not qualify as
technical debt. Later, when we address the various ways to classify technical debt,
you’ll see that not every instance of technical debt falls into this category.
With the wide array of opinionated definitions for technical debt, several academic
works have attempted to present an unbiased, concrete definition for this abstract
concept. For example, an article in the Information and Software Technology
Journal defines technical debt in very specific terms:
The same article expands on the metaphor for technical debt, “Conceptually,
technical debt is an analog 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 in time.”
Date:
A few years later, Martin Fowler took McConnell’s concept a step further and
published what he calls the “Technical Debt Quadrant.” This quadrant attempts to
categorize technical debt into 4 categories based on both intent and context. Fowler
says technical debt can be classified based first on intent: is it deliberate or
inadvertent? And then even further distinguished by whether it is prudent or
reckless debt.
Date:
Architecture Debt
Build Debt
Code Debt
Defect Debt
Design Debt
Documentation Debt
Infrastructure Debt
People Debt
Process Debt
Requirement Debt
Service Debt
Test Debt
Most software companies today are under pressure from the market and
competitive forces to develop and ship fast. Startups especially feel this “ship or
Document title goes here Author Name:
Date:
sink” pressure. This need for speed leads many product and software development
teams to make the trade-off between taking on technical debt or launching later.
This is why the general consensus from most agile teams is that technical debt is
not inherently bad. In fact, most, if not all software products have some degree of
technical debt. When you consider how much code teams ship every day
(especially in agile environments where working software is the primary measure
of progress) this is not a surprising claim.
On the other hand, many software development teams working strictly within the
Waterfall software development methodology and other documentation-driven
frameworks do not share this perspective.
“I’ve found that business staff generally seems to have a higher tolerance for
technical debt than technical staff does. Business executives tend to want to
understand the tradeoffs involved, whereas some technical staff seems to believe
that the only correct amount of technical debt is zero.” McConnell writes,
explaining that he attributes this aversion to technical debt to the communication
challenges it will inevitably create down the line.
Technical staff, he says, often are tasked with trying to explain technical debt to
business staff, who may not immediately see the implications. “The main issue
seems to be that, unlike financial debt, technical debt is much less visible, and so
people have an easier time ignoring it,” he suggests.
Document title goes here Author Name:
Date:
So the takeaway here is, context matters when determining whether technical debt
is good or bad. In general, you can think of technical debt in the same way you do
financial debt: it’s not problematic until it is.
It comes in very technical terms and sits mostly within the code, infrastructure or
third-party services of your product.
Most of your technical debt will have 1 thing in common: lifetime. Even in
software, code has a certain amount of lifetime to it. It doesn’t live forever and
needs to be changed or replaced somewhere down the line.
Date:
It comes in many shapes and/or forms. I’ll just run through the most common
categories I encountered in most projects:
1. Shortcuts
No product manager can deny they never allowed shortcuts. Taking shortcuts
means you use code that’s only reaching bare minimum for product
requirements, usually not the best quality and will probably fail somewhere
down the line. Due to pressure on delivery, shortcuts can be tempting to take
without knowing the true consequences.
Every developer uses code they haven’t written themselves (thanks to the global
open-source community). We use libraries and frameworks to make building
software easier, faster and more cost-efficient. It also creates a challenge:
maintaining third-party code. Developers can have several types of issues with a
library as a survey revealed:
Document title goes here Author Name:
Date:
source: opensourcesurvey.org
Project can be poorly maintained overtime and create issues with maintaining or
expanding own functionality. Support can be a big issue when the owner of the
project doesn’t go in the direction your developer wants them to go. What
seemed efficient at first can create road blocks longer term. Replacing or
overhauling such components can take months and create a backlash in your
product development.
Document title goes here Author Name:
Date:
You eager to get that new killer feature build. Your developers point out your
current data layer or application stack isn’t really ready for such magic.
And to be honest to your stakeholders, you’re actually not sure if that feature
is actually killer. In most cases, we tend to go for shortcuts (see initial point) or
code hacks to get it done without large upfront development investments. You
promise everyone those shortcuts will be managed later when that feature can
pay its bills.
Oh and your developers probably need more hardware resources. Those bar
metal servers don’t scale, so you need to go cloud with Amazon AWS or
something similar. Creating new deployment challenges and migrations.
4. Third-party services
We live in an interconnected world and so is your product. All those partner API’s
need to communicate with your system and vice-versa.
Somewhere down the line your partner will send you an e-mail saying: “We’re
improving our system and we’ll deprecate these API’s or endpoints. We will stop
supporting these from date X”.
You’ll have no other choice then put this in your backlog and plan on-time
accordingly.
Date:
In order to create visibility, you create an epic for technical debt. Put every story
concerning debt in here. If it applies to a specific feature, you also just attach the
specific debt stories to the feature epic. Attaching a story to multiple epics
makes sure you can see total debt and debt on feature level at any time.
Note: In Jira you can’t apply multiple epics to a story in the default setup.
You can use Components instead of that. It shouldn’t affect your
burndown chart if you have assigned stories to the current release
version.
Because technical debt is within your system and mostly on a deeper technical
level, you’ll need to define/clarify the actual debt in order to create stories.
Stories which aren’t 100% clear to your team, should never pass into a sprint.
So what do you do what do? The answer: create Spikes. They look like stories but
without story points. Instead of that, they have a time-frame (ex. 5 hours to
investigate X) allocated and their main purpose is to investigate to clarify what
needs to be done. The result of a Spike is a story.
It’s important to get rid of all spikes as early as possible. You and your team
need to clarify the full scale of debt and estimate them in the first upcoming
Document title goes here Author Name:
Date:
planning session. All story estimated points combined will give you the total
number of debt.
The next step is to plan debt for short-term execution and incorporate technical
debt in the longer-term roadmap. Basically it will look like if you’re paying off
your loan debt to the bank.
Don’t be fooled, you’ll always create debt. Monitoring your debt is not a one-time
exercise, more like within the DNA of your operation.
The last step is communication. Now all technical debt incorporates within your
operation, it’s time to communicate to your stakeholders. The most important
group will be higher management, as they’re paying the bill for this debt. The
most important thing is to explain is how this will affect the organization and
more importantly, your customers. A second would be how this will impact the
speed of product development.
You don’t have to bore them with the whole ‘what is technical debt’ story. Just
explain key parts so they know what you’re referring to in future
communications.