Technical debt is a metaphor used to describe the additional rework, bugs, security issues and costs that result from taking shortcuts or choosing expedient solutions during software development. If not managed properly, technical debt can accumulate over time and make software more costly and difficult to change. The document discusses various types of technical debt, symptoms that indicate high levels of debt, and stakeholders impacted by debt. It suggests technical debt should be managed strategically like financial debt to balance short-term gains with long-term costs and risks.
Digital Transformation Solution Powerpoint Presentation Slides
Report
Share
1 of 134
Download to read offline
More Related Content
Technical Debt: Do Not Underestimate The Danger
1. Do not underestimate
the danger
technical
Lemİ Orhan ERGİN
Principal Software Engineer @ Sony
@lemiorhanagilistanbul.com
debt
@lemiorhan
2. Lemİ Orhan Ergİn
Principal Software Engineer at Sony
has worked in Tüsside, BYM, GittiGidiyor/eBay
and Sony as lead developer, team leader,
technical coordinator and scrum master
got CSM certificate from Jim Coplien
year as Scrum Master
sprints in 4 years as team member and
scrum master
experienced in agile transformation and
building agile culture in teams & organizations
2001
2013
2009
1
56
agile
CSM, PSM1
11. technical debtis a metaphor developed by
Ward Cunningham in 1992
to communicate problems
due to“developing not in the right way”
with non-technical stakeholders.
met·a·phor noun ˈme-tə-ˌfȯr also -fər
a word or phrase for one thing that is used to refer to another thing in order to
show or suggest that they are similar
12. deficit
Enron financing
paying the principal debt
Interest on the debt
bankruptcy
borrowing money
Intertest on the loan Inflation
financial burden
very similar
technical debt is
to financial debt
15. technical debt costs money, time and effort to
stakeholders, developers, companies, even to economies
16. most companies have to spend 80% of their
software development budget maintaining code
Aaron Erickson, Informit.com
“
”
17. U.S. Air Force pulls plug on ERP project
after blowing through $1 billion
chris kanaracus, CIO.com
“
”
18. we don’t know how much technical
debt is really costing us
Jim bird, Agile.dzone.com
“
”
19. Technical debt is like smoking addiction. Once you
start hacking your code, the code asks for more.
you never know what that will cost in the future.
Lemİ Orhan ERGİN, Agilistanbul.com
“
”
20. High amount of Technical Debt is
#1 impediment to teams being agile
Dan Rawsthorne
“
”
21. Sufficient amount of messy code may bring
whole Engineering department to a stand-still
Sven Johann & Eberhard Wolff, Infoq
“
”
36. ... if you have strategic design decisions. It allow rapid delivery to elicit
quick feedback and correct design. However, clean code is required to
pay back debt therefore the code sould be refactored
ıncurring technical debt is a good idea
37. ... if principal amount and interest is smaller than the yield of
investment. Sometimes, you don't have to pay back the debt, it
is pointless if the code won't be touched again
ıncurring technical debt is a good idea
38. ... because having messy code and cutting quality slows you down in
reality. And you must generate more mess to keep up.
Do you ask permission to do your job correctly????
ıncurring technical debt is a bad idea
41. similarities with financial debt
Every minute spent on not-quite-write code counts as
interest on the debt
Interest
Image by Martin Schoeller from “Identical: Portraits of Twins” book
42. similarities with financial debt
Refactoring is like paying off the principal debt
paying the principal debt
Image by Martin Schoeller from “Identical: Portraits of Twins” book
43. similarities with financial debt
Neglecting the design is like borrowing money
borrowing money
Image by Martin Schoeller from “Identical: Portraits of Twins” book
44. similarities with financial debt
Bankruptcy refers to a situation of overwhelming debt
interest, whereby progress is halted and a complete
rewrite is necessary
bankruptcy
Image by Martin Schoeller from “Identical: Portraits of Twins” book
45. similarities with financial debt
It occurs when the current level of technology is old
enough to lose compatibility with the industry
technical Inflation
Image by Martin Schoeller from “Identical: Portraits of Twins” book
46. similarities with financial debt
It represents technical frauds undermine ROIs
Enron Financing
Image by Martin Schoeller from “Identical: Portraits of Twins” book
47. similarities with financial debt
Throw away prototypes, retired products and
complete failures on will-not-be-used components
does not have to be repaid
amnesty
Image by Martin Schoeller from “Identical: Portraits of Twins” book
50. the loss of
productivity
We cannot measure
productivity, that's why
we can't really see real
the true effect of
technical debt
and losing motivation and morale
51. Increase in
testing
If the team does the
same tests again and
again on every release or
testing takes too much
time, the debt seems to
be in critical level.
the death by manual testing
52. Postponed stories in releases
Postponed
releases
It becomes harder to catch
the deadlines. An increase
on the postponed releases
rate is an indicator.
being not ready to go
57. being scared
of changing
anything
Software is so brittle that
developers are scared of
changing anything in the
code not to break. Adding
new features starts to cost
more and more.
58. Evil hacks
wrong design
It’s hard to detect the debt
in advance, but any hacks
and workarounds could
cause issues in the future
59. wrong choice
of technology
Not the most mature, not
the newest, not the
simplest... Choosing the
cheapest-to-adapt is the key
to pay the debt.
60. unreadable
code
Developers spend 80% of
development time for reading
code. You cannot build if you
cannot understand.
hard to understand what happens
64. bad smells
The indicator of
weaknesses in design that
may be slowing down
development or increasing
the risk of bugs or failures
in the future
“Only he knows can change this part”
“Lets copy & paste this code”
“If I touch, everything will break”
“Too many TODOs or FIXMEs in the code”
65. 36 classic
mistakes
Making mistakes is
inevitable. Only
experienced software
developers realize when
they're making mistakes.
outlined in McConnell's
Rapid Development
http://www.construx.com/10x_Software_Development/Classic_Mistakes_Updated
68. unavoidable debt
Usually unpredictable and unpreventable
and the team has no fault on that
Due to legal issues, we have to rewrite
some of the components
“
”
69. Strategic debt
Long term debt, usually incurred proactively
I want to be the first in the market“
”
70. tactical debt
It’s different that strategic by the reactive
manner for the short term
We don't have time to implement in the right
way, just a hack. We'll fix later.
“
”
71. Incremental debt
Hundreds or thousands of small shortcuts,
like credit card debt
We have to do quick hacks and
dirty solutions to catch the deadline
“
”
72. INADVERTENT (naive) debt
It occurs due to irresponsible behavior or immature
practices on the part of the people involved
We have to build the software product
with inexperienced newbies
“
”
75. Design & architectural Debt
Shortcuts and shortcommings
Long and detailed upfront designs
Sub-optimal solutions
76. code quality Debt
Short time between failures
Severe defect count
Every hack, work around, bad piece of code builds
Unnecessary code duplication and complexity
79. Environmental Debt
Problems in development related processes
Issues in hardware, infrastructure, supporting apps
Having too many manual operational tasks
80. Monetary cost
Developer’s time is expensive
No developer enjoys to work on brittle and complicated code
That leads turnovers and it is one of the real economic costs of
technical debt
90. A system can't have the same
high level of quality
throughout the system
strategic
design
The team can choose which
parts will have high quality or
kept as low quality
Consumer understands quick &
dirty solutions lead to debt
Understanding Strategic Design
leads to better decisions from
stakeholders
99. key engineering practices
Pair Programming
Test Driven Development
Continuous Integration
10 min Builds
Refactoring
Automated unit tests
etc.
these should always directly
associated with a requirement
100. test driven development
Pre-release defect density decreased 40-90%
relative to similar products that do not use TDD
Initial development time increased 15-35% after TDD
104. Monitor your debt
Code coverage: Monitor trends, not points
Cyclomatic complexity: Number of branches in code
Coupling: Interconnectedness of systems
114. just pay the interest
Live with the code
Refactoring is more expensive than the work with bad code
End-of-life software or will-be-retired software
118. Technical Backlog
Debt is made visible and clear for everbody
Cost per task is trackable
No mixture between technical and feature tasks
adv.disadv.
2 backlogs and hard to prioritize
Customers may not understand the real benefits of a tech task
Very expensive changes must always a business reason
127. formulas to guess the debt
There are many formulas proposed and used
128. Estimate the cost of a failure and then
multiply by the probability it will occur
Technical debt is the cost
of implementing the
required redundancy