SlideShare a Scribd company logo
1 of 3
Download to read offline
For U & Me Book Extract 
Why Care About Technical Debt? 
Quick fix solutions in software design, if not corrected, can lead to ‘technical debt’, which if not 
addressed in time, can lead to ‘technical bankruptcy’. This article, which is an extract from the 
first chapter of the book, ‘Refactoring for Software Design Smells: Managing Technical Debt’, 
looks into the causes and impact of technical debt, and gives a few tips on how to manage it. 
cases, the accumulated technical debt is too big to ever 
be paid off and the product has to be abandoned. Such a 
situation is called technical bankruptcy. 
What constitutes technical debt? 
There are multiple sources of technical debt (see Figure 1). 
Some of its well-known dimensions include (with examples): 
ƒƒ Code debt: Static analysis tool violations and inconsistent 
coding style. 
ƒƒ Design debt: Design smells and violations of design rules. 
ƒƒ Test debt: Lack of tests, inadequate test coverage, and 
improper test design. 
ƒƒ Documentation debt: No documentation for 
important concerns, poor documentation and outdated 
documentation. 
This book is primarily concerned with the design 
aspects of technical debt, i.e., design debt. In other words, 
when the author refers to technical debt in this book, he 
implies design debt. 
To better understand design debt, let us take the case 
of a medium-sized organisation that develops software 
products. To be able to compete with other organisations 
in the market, the former obviously needs to release newer 
products into the market faster and at reduced costs. But 
how does this impact its software development process? 
Technical debt is the debt that accrues when you 
knowingly or unknowingly make wrong or non-optimal 
design decisions. 
Technical debt is a term coined by Ward Cunningham in a 
1992 report. It is analogous to financial debt. When a person 
takes a loan (or uses his credit card), he incurs debt. If he 
regularly pays the installments (or the credit card bill) then the 
created debt is repaid and does not lead to further problems. 
However, if the person does not pay his installments (or bills), 
a penalty in the form of interest is applicable and this mounts 
every time he misses making a payment. In case the person is 
not able to pay the installments (or bills) for a long time, the 
accrued interest can make the total debt so ominously large 
that the person may have to declare bankruptcy. 
Along the same lines, when software developers opt 
for a quick fix rather than a proper well-designed solution, 
they introduce technical debt. It is okay if the developers 
pay back the debt on time. However, if they choose not to 
or forget about the debt created, the accrued interest on 
the technical debt piles up, just like financial debt. The 
debt keeps increasing over time with each change to the 
software; thus, the later the developers pay off the debt, 
the more expensive it is to pay off. If the debt is not paid at 
all, then eventually, the pile-up is so huge that it becomes 
immensely difficult to change the software. In extreme 
90 | DecemBER 2014 | OPEN SOURCE For You | www.OpenSourceForU.com
Book Extract For U & Me 
Figure 1: Dimensions of technical debt 
As one can imagine, its software developers are expected 
to implement features faster. In such a case, the developers 
may not have the opportunity or time to properly assess the 
impact of their design decisions. As a result, over time, such 
a collection of individual localised design decisions starts 
to degrade the structural quality of the software products, 
thereby contributing to the accumulation of design debt. 
If such a product were to be developed just once and 
then no longer maintained, the structural quality would 
not matter. However, most products are in the market 
for a long time period and therefore have an extended 
development and maintenance life cycle. In such cases, the 
poor structural quality of the software will significantly 
increase the effort and time required to understand and 
maintain the software. This will eventually hurt the 
organisation’s interests. Thus, it is extremely important for 
organisations to monitor and address the structural quality 
of the software. The work that needs to be invested in the 
future, to address the current structural quality issues in the 
software, is design debt. 
An interesting question in the context of what constitutes 
technical debt is whether defects/bugs are a part of this debt. 
Some argue that defects (at least some of them) originate due 
to technical debt, and thus are part of technical debt. Their 
view is that if managers decide to release a software version 
despite it having many known yet-to-be-fixed defects, these 
are a part of the technical debt that has been incurred. 
However, there are others in the community who argue 
that defects do not constitute technical debt. Their view is that 
the main difference between defects and technical debt is that 
defects are visible to the users while technical debt is largely 
invisible. We support this stance. In our experience, defects 
are rarely ignored by the organisation and receive much 
attention from the development teams. On the other hand, 
issues leading to technical debt are mostly invisible and tend 
to receive little or no attention from the development teams. 
Why does this happen? 
This happens because defects directly impact the 
external quality attributes of the software that are directly 
visible to the end users. Technical debt, on the other hand, 
impacts the internal quality of the software system, and is 
not directly perceivable by the end users of the software. 
Organisations value their end users and cannot afford to 
lose them; thus, defects get the utmost attention while 
issues related to ‘invisible’ technical debt are usually 
deferred or ignored. Thus, from a practical viewpoint, it is 
better to leave defects out of the umbrella term ‘technical 
debt’, so that they can be dealt with separately; otherwise, 
one would fix defects and mistakenly think that the 
technical debt has been addressed. 
What is the impact of technical debt? 
Why is it important for a software practitioner to be 
aware of technical debt and keep it under control? To 
understand this, let us first understand the components 
of technical debt, which is a result of the ‘principal’ 
(the original hack or shortcut), and the accumulated 
interest incurred when the principal is not fixed. The 
interest component is compounding in nature; the more 
you ignore or postpone it, the bigger the debt becomes 
over time. Thus, it is the interest component that makes 
technical debt a significant problem. 
Why is the interest compounding in nature for technical 
debt? One major reason is that often, new changes introduced 
in the software become interwoven with the debt-ridden 
design structure, further increasing the debt. Then, going 
forward, when the original debt remains unpaid, it encourages 
or even forces developers to use ‘hacks’ while making 
changes, which further compounds the debt. 
Jim Highsmith describes how the ‘Cost of Change’ 
(CoC) varies with technical debt. A well-maintained 
software system’s actual CoC is close to the optimal CoC; 
however, with the increase in technical debt, the actual 
CoC also increases. As previously mentioned, in extreme 
cases, the CoC can become prohibitively high leading to 
technical bankruptcy. 
Apart from technical challenges, technical debt also 
impacts the morale and motivation of the development 
team. As technical debt mounts, it becomes difficult to 
introduce changes and the team involved with development 
starts to feel frustrated and annoyed. The frustration is 
further compounded because the alternative—i.e., repaying 
the whole technical debt—is not a trivial task that can be 
accomplished overnight. 
It is believed that technical debt is the reason behind 
software faults in a number of applications across domains, 
including financing. In fact, a BBC report clearly mentions 
technical debt as the main reason behind the computer 
controlled trading error that decimated the balance sheet of 
Knight Capital, an American global financial services firm 
in 2012. 
What causes technical debt? 
The previous section discussed the impact of technical debt 
in a software system. To pay off the technical debt or to 
prevent a software system from accruing technical debt, it is 
www.OpenSourceForU.com | OPEN SOURCE For You | DecemBER 2014 | 91
For U & Me Book Extract 
important to first think about why technical debt happens in 
the first place. 
Ultimately, the decisions made by a manager, architect, 
or developer introduce technical debt in a software system. 
For instance, when managers create or modify a project 
plan, they can decide whether to squeeze in more features 
in a given time span or to allocate time for tasks such as 
design reviews and refactoring that can ensure high design 
quality. Similarly, an architect and a developer have to 
make numerous technical decisions when designing or 
implementing the system. These design or code-level 
decisions may introduce technical debt. 
Now, the question is: Why do managers, architects or 
developers make the decisions that introduce technical debt 
in the software system? In addition to lack of awareness 
about technical debt, the software engineering community 
has identified several common causes that lead to technical 
debt, such as: 
ƒƒ Schedule pressure: Often, while working under 
deadline pressures to ‘get-the-work-done’ as soon as 
possible, programmers resort to hasty changes. For 
example, they embrace ‘copy-paste programming’, 
which helps get the work done. They think that as long 
as there is nothing wrong syntactically and the solution 
implements the desired functionality, it is an acceptable 
approach. However, when such code duplication 
accumulates, the design becomes incomprehensible 
and brittle. Thus, a tight schedule for the release of 
a product with new features can result in a product 
that has all the desired features but has incurred huge 
technical debt. 
ƒƒ Lack of good/skilled designers: Fred Brooks, in his 
classic book ‘The Mythical Man Month’, stressed the 
importance of good designers for a successful project. 
If designers lack understanding of the fundamentals of 
software design and principles, their designs will lack 
quality. They will also do a poor job while reviewing their 
team’s designs and end up mentoring their teams into 
following the wrong practices. 
ƒƒ Not adequately applying design principles: Developers 
without the awareness or experience of actually applying 
sound design principles often end up writing code that is 
difficult to extend or modify. 
ƒƒ Lack of awareness about design smells and refactoring: 
Many developers are unaware of design smells that may 
creep into the design over time. These are indicative of 
poor structural quality and contribute to technical debt. 
Design smells can be addressed by timely refactoring. 
However, when developers lack awareness of refactoring 
and do not perform it, the technical debt accumulates 
over time. Often, given the different cost and schedule 
constraints of a project, it may be acceptable to temporarily 
incur some technical debt. However, it is critical to pay off 
the debt as early as possible. 
How to manage technical debt 
It is impossible to avoid technical debt in a software system; 
however, it is possible to manage it. This section provides a brief 
overview of high-level steps required to manage technical debt. 
Increasing awareness of technical debt: Awareness is 
the first step toward managing technical debt. This includes 
awareness of the concept of technical debt, its different forms, 
the impact of technical debt, and the factors that contribute 
to it. Awareness of these concepts will help your organisation 
take well-informed decisions to achieve both project goals 
and quality goals. 
Detecting and repaying technical debt: The next step 
is to determine the extent of technical debt in the software 
product. Identifying specific instances of debt and their 
impact helps prepare a systematic plan to recover from the 
debt. These two practical aspects of managing technical debt 
are addressed in detail in Chapter 8 of the book. 
Prevent accumulation of technical debt: Once technical 
debt is under control, all concerned stakeholders must take 
steps to ensure that the technical debt does not increase 
and remains manageable in the future. To achieve this, the 
stakeholders must collectively track and monitor the debt and 
periodically repay it to keep it under control. 
Note: ‘Refactoring for Software Design Smells: 
Managing Technical Debt’, published by Morgan 
Kaufmann/Elsevier, is available worldwide from November 
2014 (URL: http://amzn.com/0128013974). This extract 
is published with permission from Morgan Kaufmann/ 
Elsevier, MA, USA. 
References 
[1] Cunningham W, ‘The WyCash portfolio management 
system’. In: Addendum to the proceedings on object-oriented 
programming systems, languages, and applications. 
OOPSLA ‘92; 1992. 
[2] Highsmith J, ‘Zen and the art of software quality’. In: 
Agile2009 conference; 2009. 
[3] Kelion L, ‘Why banks are likely to face more software 
glitches in 2013’. Available at: http://www.bbc.co.uk/news/ 
technology-21280943. 
[4] Brooks Jr F P, ‘The Mythical Man-month’. Anniversary ed. 
Boston, MA, USA: Addison-Wesley Longman Publishing Co 
Inc; 1995./ 
By: Girish Suryanarayana 
Ganesh Samarthyam and Tushar Sharma 
Girish Suryanarayana is a senior research scientist at Research 
and Technology Centre, Siemens Technologies and Services Pvt 
Ltd, Bengaluru. 
Ganesh Samarthyam is an independent consultant and corporate 
trainer based in Bengaluru. He has contributed numerous articles 
to LFY/OSFY since 2006. 
Tushar Sharma is a technical expert at Research and Technology 
Centre, Siemens Technologies and Services Pvt Ltd, Bengaluru. 
92 | DecemBER 2014 | OPEN SOURCE For You | www.OpenSourceForU.com

More Related Content

What's hot

Technical Debt Management
Technical Debt ManagementTechnical Debt Management
Technical Debt ManagementMark Niebergall
 
Software craftsmanshippresentation
Software craftsmanshippresentationSoftware craftsmanshippresentation
Software craftsmanshippresentationMeagan Waller
 
Technical Debt - PHPBenelux
Technical Debt - PHPBeneluxTechnical Debt - PHPBenelux
Technical Debt - PHPBeneluxenaramore
 
Understanding and Managing Technical Debt
Understanding and Managing Technical DebtUnderstanding and Managing Technical Debt
Understanding and Managing Technical DebtDr. Syed Hassan Amin
 
Software Development in 21st Century
Software Development in 21st CenturySoftware Development in 21st Century
Software Development in 21st CenturyHenry Jacob
 
Software Outsourcing: Pitfalls and Best Practices
Software Outsourcing: Pitfalls and Best PracticesSoftware Outsourcing: Pitfalls and Best Practices
Software Outsourcing: Pitfalls and Best PracticesAMC Bridge
 
We need to talk about tech debt
We need to talk about tech debtWe need to talk about tech debt
We need to talk about tech debtMatthew Whetton
 
Reducing Time Spent On Requirements
Reducing Time Spent On RequirementsReducing Time Spent On Requirements
Reducing Time Spent On RequirementsByron Workman
 
Software Life Cylce Model
Software Life Cylce ModelSoftware Life Cylce Model
Software Life Cylce ModelJegadeesh Sam
 
The Technical Debt Trap
The Technical Debt TrapThe Technical Debt Trap
The Technical Debt TrapDoc Norton
 
Applying Design Principles in Practice
Applying Design Principles in PracticeApplying Design Principles in Practice
Applying Design Principles in PracticeTushar Sharma
 
Who is an architect and Why care about Architecture
Who is an architect and Why care about ArchitectureWho is an architect and Why care about Architecture
Who is an architect and Why care about ArchitectureQuovantis
 
Improving software economics - Top 10 principles of achieving agility at scale
Improving software economics - Top 10 principles of achieving agility at scaleImproving software economics - Top 10 principles of achieving agility at scale
Improving software economics - Top 10 principles of achieving agility at scaleIBM Rational software
 
JDD 2016 - Marcin Zajaczkowski - Cd for open source
JDD 2016 - Marcin Zajaczkowski - Cd for open sourceJDD 2016 - Marcin Zajaczkowski - Cd for open source
JDD 2016 - Marcin Zajaczkowski - Cd for open sourcePROIDEA
 
Secrets of going codeless - How to build enterprise apps without coding
Secrets of going codeless - How to build enterprise apps without codingSecrets of going codeless - How to build enterprise apps without coding
Secrets of going codeless - How to build enterprise apps without codingNewton Day Uploads
 
Sioux Hot-or-Not: Essential Unified Process (Ivar Jacobson)
Sioux Hot-or-Not: Essential Unified Process (Ivar  Jacobson)Sioux Hot-or-Not: Essential Unified Process (Ivar  Jacobson)
Sioux Hot-or-Not: Essential Unified Process (Ivar Jacobson)siouxhotornot
 
Challenging The Role Of The Architect
Challenging The Role Of The ArchitectChallenging The Role Of The Architect
Challenging The Role Of The ArchitectKevin Francis
 
Software Engineering Past Papers Notes
Software Engineering Past Papers Notes Software Engineering Past Papers Notes
Software Engineering Past Papers Notes MuhammadTalha436
 
Where an Architect stands in society.
Where an Architect stands in society.Where an Architect stands in society.
Where an Architect stands in society.Rahul Bajaj
 

What's hot (20)

Managing Technical Debt
Managing Technical DebtManaging Technical Debt
Managing Technical Debt
 
Technical Debt Management
Technical Debt ManagementTechnical Debt Management
Technical Debt Management
 
Software craftsmanshippresentation
Software craftsmanshippresentationSoftware craftsmanshippresentation
Software craftsmanshippresentation
 
Technical Debt - PHPBenelux
Technical Debt - PHPBeneluxTechnical Debt - PHPBenelux
Technical Debt - PHPBenelux
 
Understanding and Managing Technical Debt
Understanding and Managing Technical DebtUnderstanding and Managing Technical Debt
Understanding and Managing Technical Debt
 
Software Development in 21st Century
Software Development in 21st CenturySoftware Development in 21st Century
Software Development in 21st Century
 
Software Outsourcing: Pitfalls and Best Practices
Software Outsourcing: Pitfalls and Best PracticesSoftware Outsourcing: Pitfalls and Best Practices
Software Outsourcing: Pitfalls and Best Practices
 
We need to talk about tech debt
We need to talk about tech debtWe need to talk about tech debt
We need to talk about tech debt
 
Reducing Time Spent On Requirements
Reducing Time Spent On RequirementsReducing Time Spent On Requirements
Reducing Time Spent On Requirements
 
Software Life Cylce Model
Software Life Cylce ModelSoftware Life Cylce Model
Software Life Cylce Model
 
The Technical Debt Trap
The Technical Debt TrapThe Technical Debt Trap
The Technical Debt Trap
 
Applying Design Principles in Practice
Applying Design Principles in PracticeApplying Design Principles in Practice
Applying Design Principles in Practice
 
Who is an architect and Why care about Architecture
Who is an architect and Why care about ArchitectureWho is an architect and Why care about Architecture
Who is an architect and Why care about Architecture
 
Improving software economics - Top 10 principles of achieving agility at scale
Improving software economics - Top 10 principles of achieving agility at scaleImproving software economics - Top 10 principles of achieving agility at scale
Improving software economics - Top 10 principles of achieving agility at scale
 
JDD 2016 - Marcin Zajaczkowski - Cd for open source
JDD 2016 - Marcin Zajaczkowski - Cd for open sourceJDD 2016 - Marcin Zajaczkowski - Cd for open source
JDD 2016 - Marcin Zajaczkowski - Cd for open source
 
Secrets of going codeless - How to build enterprise apps without coding
Secrets of going codeless - How to build enterprise apps without codingSecrets of going codeless - How to build enterprise apps without coding
Secrets of going codeless - How to build enterprise apps without coding
 
Sioux Hot-or-Not: Essential Unified Process (Ivar Jacobson)
Sioux Hot-or-Not: Essential Unified Process (Ivar  Jacobson)Sioux Hot-or-Not: Essential Unified Process (Ivar  Jacobson)
Sioux Hot-or-Not: Essential Unified Process (Ivar Jacobson)
 
Challenging The Role Of The Architect
Challenging The Role Of The ArchitectChallenging The Role Of The Architect
Challenging The Role Of The Architect
 
Software Engineering Past Papers Notes
Software Engineering Past Papers Notes Software Engineering Past Papers Notes
Software Engineering Past Papers Notes
 
Where an Architect stands in society.
Where an Architect stands in society.Where an Architect stands in society.
Where an Architect stands in society.
 

Viewers also liked

Refactoring for Software Design Smells: Managing Technical Debt
Refactoring for Software Design Smells: Managing Technical DebtRefactoring for Software Design Smells: Managing Technical Debt
Refactoring for Software Design Smells: Managing Technical DebtTushar Sharma
 
A Checklist for Design Reviews
A Checklist for Design ReviewsA Checklist for Design Reviews
A Checklist for Design ReviewsTushar Sharma
 
PHAME: Principles of Hierarchy Abstraction Modularization and Encapsulation
PHAME: Principles of Hierarchy Abstraction Modularization and EncapsulationPHAME: Principles of Hierarchy Abstraction Modularization and Encapsulation
PHAME: Principles of Hierarchy Abstraction Modularization and EncapsulationTushar Sharma
 
Tools for Identifying and Addressing Technical Debt
Tools for Identifying and Addressing Technical DebtTools for Identifying and Addressing Technical Debt
Tools for Identifying and Addressing Technical DebtTushar Sharma
 
Pragmatic Technical Debt Management
Pragmatic Technical Debt ManagementPragmatic Technical Debt Management
Pragmatic Technical Debt ManagementTushar Sharma
 
Working Effectively With Legacy Code
Working Effectively With Legacy CodeWorking Effectively With Legacy Code
Working Effectively With Legacy CodeNaresh Jain
 

Viewers also liked (6)

Refactoring for Software Design Smells: Managing Technical Debt
Refactoring for Software Design Smells: Managing Technical DebtRefactoring for Software Design Smells: Managing Technical Debt
Refactoring for Software Design Smells: Managing Technical Debt
 
A Checklist for Design Reviews
A Checklist for Design ReviewsA Checklist for Design Reviews
A Checklist for Design Reviews
 
PHAME: Principles of Hierarchy Abstraction Modularization and Encapsulation
PHAME: Principles of Hierarchy Abstraction Modularization and EncapsulationPHAME: Principles of Hierarchy Abstraction Modularization and Encapsulation
PHAME: Principles of Hierarchy Abstraction Modularization and Encapsulation
 
Tools for Identifying and Addressing Technical Debt
Tools for Identifying and Addressing Technical DebtTools for Identifying and Addressing Technical Debt
Tools for Identifying and Addressing Technical Debt
 
Pragmatic Technical Debt Management
Pragmatic Technical Debt ManagementPragmatic Technical Debt Management
Pragmatic Technical Debt Management
 
Working Effectively With Legacy Code
Working Effectively With Legacy CodeWorking Effectively With Legacy Code
Working Effectively With Legacy Code
 

Similar to Why care about technical debt?

Managing Technical Debt
Managing Technical DebtManaging Technical Debt
Managing Technical DebtAndre Perkins
 
calculate-business-costs-of-technical-debt.pdf
calculate-business-costs-of-technical-debt.pdfcalculate-business-costs-of-technical-debt.pdf
calculate-business-costs-of-technical-debt.pdfNicanor Sachahuaman
 
Deloitte Tech Trends 2014 Technical Debt
Deloitte Tech Trends 2014 Technical DebtDeloitte Tech Trends 2014 Technical Debt
Deloitte Tech Trends 2014 Technical DebtCAST
 
TechnicalDebtandOpenSourceDevelopment_Whitepaper_062220.pdf
TechnicalDebtandOpenSourceDevelopment_Whitepaper_062220.pdfTechnicalDebtandOpenSourceDevelopment_Whitepaper_062220.pdf
TechnicalDebtandOpenSourceDevelopment_Whitepaper_062220.pdfXIAOZEJIN1
 
How to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software EngineeringHow to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software EngineeringAndré Agostinho
 
Mini-Case Study Closing Projects at Global Green Books Pu.docx
Mini-Case Study Closing Projects at Global Green Books Pu.docxMini-Case Study Closing Projects at Global Green Books Pu.docx
Mini-Case Study Closing Projects at Global Green Books Pu.docxaltheaboyer
 
Restructuring Technical Debt - A Software and System Quality Approach
Restructuring Technical Debt - A Software and System Quality ApproachRestructuring Technical Debt - A Software and System Quality Approach
Restructuring Technical Debt - A Software and System Quality ApproachAdnan Masood
 
Slowing down to Speed up: Agile & Technical Debt - SGPRG 2015
Slowing down to Speed up: Agile & Technical Debt - SGPRG 2015Slowing down to Speed up: Agile & Technical Debt - SGPRG 2015
Slowing down to Speed up: Agile & Technical Debt - SGPRG 2015Taghi Paksima
 
Working with Technical Debt
Working with Technical DebtWorking with Technical Debt
Working with Technical DebtSteve Green
 
Technical Debt for Product Managers by Square Sr PM
Technical Debt for Product Managers by Square Sr PMTechnical Debt for Product Managers by Square Sr PM
Technical Debt for Product Managers by Square Sr PMProduct School
 
Chapter 01 - Introduction.pdf
Chapter 01 - Introduction.pdfChapter 01 - Introduction.pdf
Chapter 01 - Introduction.pdfAnas Nakash
 
From Technical Debt to Technical Health
From Technical Debt to Technical HealthFrom Technical Debt to Technical Health
From Technical Debt to Technical HealthMikael Vesavuori
 
What scrum masters and product owners should know about software quality and ...
What scrum masters and product owners should know about software quality and ...What scrum masters and product owners should know about software quality and ...
What scrum masters and product owners should know about software quality and ...STX Next
 
Project Planning, Execution And Closure Essay
Project Planning, Execution And Closure EssayProject Planning, Execution And Closure Essay
Project Planning, Execution And Closure EssayJennifer Letterman
 
Scalable light weight processes
Scalable light weight processesScalable light weight processes
Scalable light weight processesGlen Alleman
 
Introduction To Software Engineering
 Introduction To Software Engineering Introduction To Software Engineering
Introduction To Software EngineeringMohsinAli773
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality AssurancePramod Parajuli
 

Similar to Why care about technical debt? (20)

Managing Technical Debt
Managing Technical DebtManaging Technical Debt
Managing Technical Debt
 
calculate-business-costs-of-technical-debt.pdf
calculate-business-costs-of-technical-debt.pdfcalculate-business-costs-of-technical-debt.pdf
calculate-business-costs-of-technical-debt.pdf
 
Deloitte Tech Trends 2014 Technical Debt
Deloitte Tech Trends 2014 Technical DebtDeloitte Tech Trends 2014 Technical Debt
Deloitte Tech Trends 2014 Technical Debt
 
TechnicalDebtandOpenSourceDevelopment_Whitepaper_062220.pdf
TechnicalDebtandOpenSourceDevelopment_Whitepaper_062220.pdfTechnicalDebtandOpenSourceDevelopment_Whitepaper_062220.pdf
TechnicalDebtandOpenSourceDevelopment_Whitepaper_062220.pdf
 
Software modernization
Software modernizationSoftware modernization
Software modernization
 
How to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software EngineeringHow to justify technical debt mitigations in Software Engineering
How to justify technical debt mitigations in Software Engineering
 
Mini-Case Study Closing Projects at Global Green Books Pu.docx
Mini-Case Study Closing Projects at Global Green Books Pu.docxMini-Case Study Closing Projects at Global Green Books Pu.docx
Mini-Case Study Closing Projects at Global Green Books Pu.docx
 
Restructuring Technical Debt - A Software and System Quality Approach
Restructuring Technical Debt - A Software and System Quality ApproachRestructuring Technical Debt - A Software and System Quality Approach
Restructuring Technical Debt - A Software and System Quality Approach
 
Slowing down to Speed up: Agile & Technical Debt - SGPRG 2015
Slowing down to Speed up: Agile & Technical Debt - SGPRG 2015Slowing down to Speed up: Agile & Technical Debt - SGPRG 2015
Slowing down to Speed up: Agile & Technical Debt - SGPRG 2015
 
Working with Technical Debt
Working with Technical DebtWorking with Technical Debt
Working with Technical Debt
 
Technical Debt for Product Managers by Square Sr PM
Technical Debt for Product Managers by Square Sr PMTechnical Debt for Product Managers by Square Sr PM
Technical Debt for Product Managers by Square Sr PM
 
Chapter 01 - Introduction.pdf
Chapter 01 - Introduction.pdfChapter 01 - Introduction.pdf
Chapter 01 - Introduction.pdf
 
From Technical Debt to Technical Health
From Technical Debt to Technical HealthFrom Technical Debt to Technical Health
From Technical Debt to Technical Health
 
Technical debt
Technical debtTechnical debt
Technical debt
 
What scrum masters and product owners should know about software quality and ...
What scrum masters and product owners should know about software quality and ...What scrum masters and product owners should know about software quality and ...
What scrum masters and product owners should know about software quality and ...
 
Project Planning, Execution And Closure Essay
Project Planning, Execution And Closure EssayProject Planning, Execution And Closure Essay
Project Planning, Execution And Closure Essay
 
Technical debt
Technical debtTechnical debt
Technical debt
 
Scalable light weight processes
Scalable light weight processesScalable light weight processes
Scalable light weight processes
 
Introduction To Software Engineering
 Introduction To Software Engineering Introduction To Software Engineering
Introduction To Software Engineering
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurance
 

More from Tushar Sharma

House of Cards: Code Smells in Open-source C# Repositories
House of Cards: Code Smells in Open-source C# RepositoriesHouse of Cards: Code Smells in Open-source C# Repositories
House of Cards: Code Smells in Open-source C# RepositoriesTushar Sharma
 
The tail of two source-code analysis tools - Learning and experiences
The tail of two source-code analysis tools - Learning and experiencesThe tail of two source-code analysis tools - Learning and experiences
The tail of two source-code analysis tools - Learning and experiencesTushar Sharma
 
Designite: A Customizable Tool for Smell Mining in C# Repositories
Designite: A Customizable Tool for Smell Mining in C# RepositoriesDesignite: A Customizable Tool for Smell Mining in C# Repositories
Designite: A Customizable Tool for Smell Mining in C# RepositoriesTushar Sharma
 
Writing Maintainable Code
Writing Maintainable Code Writing Maintainable Code
Writing Maintainable Code Tushar Sharma
 
FOSDEM - Does your configuration code smell?
FOSDEM - Does your configuration code smell?FOSDEM - Does your configuration code smell?
FOSDEM - Does your configuration code smell?Tushar Sharma
 
Achieving Design Agility by Refactoring Design Smells
Achieving Design Agility by Refactoring Design SmellsAchieving Design Agility by Refactoring Design Smells
Achieving Design Agility by Refactoring Design SmellsTushar Sharma
 
Does your configuration code smell?
Does your configuration code smell?Does your configuration code smell?
Does your configuration code smell?Tushar Sharma
 
Designite – Software Design Quality Assessment Tool
Designite – Software Design Quality Assessment ToolDesignite – Software Design Quality Assessment Tool
Designite – Software Design Quality Assessment ToolTushar Sharma
 
Does Your Configuration Code Smell?
Does Your Configuration Code Smell?Does Your Configuration Code Smell?
Does Your Configuration Code Smell?Tushar Sharma
 
Technical debt - The elephant in the room
Technical debt - The elephant in the roomTechnical debt - The elephant in the room
Technical debt - The elephant in the roomTushar Sharma
 
Understanding software metrics
Understanding software metricsUnderstanding software metrics
Understanding software metricsTushar Sharma
 
Does your design smell?
Does your design smell?Does your design smell?
Does your design smell?Tushar Sharma
 
Refactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 TutorialRefactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 TutorialTushar Sharma
 

More from Tushar Sharma (13)

House of Cards: Code Smells in Open-source C# Repositories
House of Cards: Code Smells in Open-source C# RepositoriesHouse of Cards: Code Smells in Open-source C# Repositories
House of Cards: Code Smells in Open-source C# Repositories
 
The tail of two source-code analysis tools - Learning and experiences
The tail of two source-code analysis tools - Learning and experiencesThe tail of two source-code analysis tools - Learning and experiences
The tail of two source-code analysis tools - Learning and experiences
 
Designite: A Customizable Tool for Smell Mining in C# Repositories
Designite: A Customizable Tool for Smell Mining in C# RepositoriesDesignite: A Customizable Tool for Smell Mining in C# Repositories
Designite: A Customizable Tool for Smell Mining in C# Repositories
 
Writing Maintainable Code
Writing Maintainable Code Writing Maintainable Code
Writing Maintainable Code
 
FOSDEM - Does your configuration code smell?
FOSDEM - Does your configuration code smell?FOSDEM - Does your configuration code smell?
FOSDEM - Does your configuration code smell?
 
Achieving Design Agility by Refactoring Design Smells
Achieving Design Agility by Refactoring Design SmellsAchieving Design Agility by Refactoring Design Smells
Achieving Design Agility by Refactoring Design Smells
 
Does your configuration code smell?
Does your configuration code smell?Does your configuration code smell?
Does your configuration code smell?
 
Designite – Software Design Quality Assessment Tool
Designite – Software Design Quality Assessment ToolDesignite – Software Design Quality Assessment Tool
Designite – Software Design Quality Assessment Tool
 
Does Your Configuration Code Smell?
Does Your Configuration Code Smell?Does Your Configuration Code Smell?
Does Your Configuration Code Smell?
 
Technical debt - The elephant in the room
Technical debt - The elephant in the roomTechnical debt - The elephant in the room
Technical debt - The elephant in the room
 
Understanding software metrics
Understanding software metricsUnderstanding software metrics
Understanding software metrics
 
Does your design smell?
Does your design smell?Does your design smell?
Does your design smell?
 
Refactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 TutorialRefactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 Tutorial
 

Recently uploaded

Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencessuser9e7c64
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesKrzysztofKkol1
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...OnePlan Solutions
 
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...Bert Jan Schrijver
 

Recently uploaded (20)

Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Patterns for automating API delivery. API conference
Patterns for automating API delivery. API conferencePatterns for automating API delivery. API conference
Patterns for automating API delivery. API conference
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
 
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
 

Why care about technical debt?

  • 1. For U & Me Book Extract Why Care About Technical Debt? Quick fix solutions in software design, if not corrected, can lead to ‘technical debt’, which if not addressed in time, can lead to ‘technical bankruptcy’. This article, which is an extract from the first chapter of the book, ‘Refactoring for Software Design Smells: Managing Technical Debt’, looks into the causes and impact of technical debt, and gives a few tips on how to manage it. cases, the accumulated technical debt is too big to ever be paid off and the product has to be abandoned. Such a situation is called technical bankruptcy. What constitutes technical debt? There are multiple sources of technical debt (see Figure 1). Some of its well-known dimensions include (with examples): ƒƒ Code debt: Static analysis tool violations and inconsistent coding style. ƒƒ Design debt: Design smells and violations of design rules. ƒƒ Test debt: Lack of tests, inadequate test coverage, and improper test design. ƒƒ Documentation debt: No documentation for important concerns, poor documentation and outdated documentation. This book is primarily concerned with the design aspects of technical debt, i.e., design debt. In other words, when the author refers to technical debt in this book, he implies design debt. To better understand design debt, let us take the case of a medium-sized organisation that develops software products. To be able to compete with other organisations in the market, the former obviously needs to release newer products into the market faster and at reduced costs. But how does this impact its software development process? Technical debt is the debt that accrues when you knowingly or unknowingly make wrong or non-optimal design decisions. Technical debt is a term coined by Ward Cunningham in a 1992 report. It is analogous to financial debt. When a person takes a loan (or uses his credit card), he incurs debt. If he regularly pays the installments (or the credit card bill) then the created debt is repaid and does not lead to further problems. However, if the person does not pay his installments (or bills), a penalty in the form of interest is applicable and this mounts every time he misses making a payment. In case the person is not able to pay the installments (or bills) for a long time, the accrued interest can make the total debt so ominously large that the person may have to declare bankruptcy. Along the same lines, when software developers opt for a quick fix rather than a proper well-designed solution, they introduce technical debt. It is okay if the developers pay back the debt on time. However, if they choose not to or forget about the debt created, the accrued interest on the technical debt piles up, just like financial debt. The debt keeps increasing over time with each change to the software; thus, the later the developers pay off the debt, the more expensive it is to pay off. If the debt is not paid at all, then eventually, the pile-up is so huge that it becomes immensely difficult to change the software. In extreme 90 | DecemBER 2014 | OPEN SOURCE For You | www.OpenSourceForU.com
  • 2. Book Extract For U & Me Figure 1: Dimensions of technical debt As one can imagine, its software developers are expected to implement features faster. In such a case, the developers may not have the opportunity or time to properly assess the impact of their design decisions. As a result, over time, such a collection of individual localised design decisions starts to degrade the structural quality of the software products, thereby contributing to the accumulation of design debt. If such a product were to be developed just once and then no longer maintained, the structural quality would not matter. However, most products are in the market for a long time period and therefore have an extended development and maintenance life cycle. In such cases, the poor structural quality of the software will significantly increase the effort and time required to understand and maintain the software. This will eventually hurt the organisation’s interests. Thus, it is extremely important for organisations to monitor and address the structural quality of the software. The work that needs to be invested in the future, to address the current structural quality issues in the software, is design debt. An interesting question in the context of what constitutes technical debt is whether defects/bugs are a part of this debt. Some argue that defects (at least some of them) originate due to technical debt, and thus are part of technical debt. Their view is that if managers decide to release a software version despite it having many known yet-to-be-fixed defects, these are a part of the technical debt that has been incurred. However, there are others in the community who argue that defects do not constitute technical debt. Their view is that the main difference between defects and technical debt is that defects are visible to the users while technical debt is largely invisible. We support this stance. In our experience, defects are rarely ignored by the organisation and receive much attention from the development teams. On the other hand, issues leading to technical debt are mostly invisible and tend to receive little or no attention from the development teams. Why does this happen? This happens because defects directly impact the external quality attributes of the software that are directly visible to the end users. Technical debt, on the other hand, impacts the internal quality of the software system, and is not directly perceivable by the end users of the software. Organisations value their end users and cannot afford to lose them; thus, defects get the utmost attention while issues related to ‘invisible’ technical debt are usually deferred or ignored. Thus, from a practical viewpoint, it is better to leave defects out of the umbrella term ‘technical debt’, so that they can be dealt with separately; otherwise, one would fix defects and mistakenly think that the technical debt has been addressed. What is the impact of technical debt? Why is it important for a software practitioner to be aware of technical debt and keep it under control? To understand this, let us first understand the components of technical debt, which is a result of the ‘principal’ (the original hack or shortcut), and the accumulated interest incurred when the principal is not fixed. The interest component is compounding in nature; the more you ignore or postpone it, the bigger the debt becomes over time. Thus, it is the interest component that makes technical debt a significant problem. Why is the interest compounding in nature for technical debt? One major reason is that often, new changes introduced in the software become interwoven with the debt-ridden design structure, further increasing the debt. Then, going forward, when the original debt remains unpaid, it encourages or even forces developers to use ‘hacks’ while making changes, which further compounds the debt. Jim Highsmith describes how the ‘Cost of Change’ (CoC) varies with technical debt. A well-maintained software system’s actual CoC is close to the optimal CoC; however, with the increase in technical debt, the actual CoC also increases. As previously mentioned, in extreme cases, the CoC can become prohibitively high leading to technical bankruptcy. Apart from technical challenges, technical debt also impacts the morale and motivation of the development team. As technical debt mounts, it becomes difficult to introduce changes and the team involved with development starts to feel frustrated and annoyed. The frustration is further compounded because the alternative—i.e., repaying the whole technical debt—is not a trivial task that can be accomplished overnight. It is believed that technical debt is the reason behind software faults in a number of applications across domains, including financing. In fact, a BBC report clearly mentions technical debt as the main reason behind the computer controlled trading error that decimated the balance sheet of Knight Capital, an American global financial services firm in 2012. What causes technical debt? The previous section discussed the impact of technical debt in a software system. To pay off the technical debt or to prevent a software system from accruing technical debt, it is www.OpenSourceForU.com | OPEN SOURCE For You | DecemBER 2014 | 91
  • 3. For U & Me Book Extract important to first think about why technical debt happens in the first place. Ultimately, the decisions made by a manager, architect, or developer introduce technical debt in a software system. For instance, when managers create or modify a project plan, they can decide whether to squeeze in more features in a given time span or to allocate time for tasks such as design reviews and refactoring that can ensure high design quality. Similarly, an architect and a developer have to make numerous technical decisions when designing or implementing the system. These design or code-level decisions may introduce technical debt. Now, the question is: Why do managers, architects or developers make the decisions that introduce technical debt in the software system? In addition to lack of awareness about technical debt, the software engineering community has identified several common causes that lead to technical debt, such as: ƒƒ Schedule pressure: Often, while working under deadline pressures to ‘get-the-work-done’ as soon as possible, programmers resort to hasty changes. For example, they embrace ‘copy-paste programming’, which helps get the work done. They think that as long as there is nothing wrong syntactically and the solution implements the desired functionality, it is an acceptable approach. However, when such code duplication accumulates, the design becomes incomprehensible and brittle. Thus, a tight schedule for the release of a product with new features can result in a product that has all the desired features but has incurred huge technical debt. ƒƒ Lack of good/skilled designers: Fred Brooks, in his classic book ‘The Mythical Man Month’, stressed the importance of good designers for a successful project. If designers lack understanding of the fundamentals of software design and principles, their designs will lack quality. They will also do a poor job while reviewing their team’s designs and end up mentoring their teams into following the wrong practices. ƒƒ Not adequately applying design principles: Developers without the awareness or experience of actually applying sound design principles often end up writing code that is difficult to extend or modify. ƒƒ Lack of awareness about design smells and refactoring: Many developers are unaware of design smells that may creep into the design over time. These are indicative of poor structural quality and contribute to technical debt. Design smells can be addressed by timely refactoring. However, when developers lack awareness of refactoring and do not perform it, the technical debt accumulates over time. Often, given the different cost and schedule constraints of a project, it may be acceptable to temporarily incur some technical debt. However, it is critical to pay off the debt as early as possible. How to manage technical debt It is impossible to avoid technical debt in a software system; however, it is possible to manage it. This section provides a brief overview of high-level steps required to manage technical debt. Increasing awareness of technical debt: Awareness is the first step toward managing technical debt. This includes awareness of the concept of technical debt, its different forms, the impact of technical debt, and the factors that contribute to it. Awareness of these concepts will help your organisation take well-informed decisions to achieve both project goals and quality goals. Detecting and repaying technical debt: The next step is to determine the extent of technical debt in the software product. Identifying specific instances of debt and their impact helps prepare a systematic plan to recover from the debt. These two practical aspects of managing technical debt are addressed in detail in Chapter 8 of the book. Prevent accumulation of technical debt: Once technical debt is under control, all concerned stakeholders must take steps to ensure that the technical debt does not increase and remains manageable in the future. To achieve this, the stakeholders must collectively track and monitor the debt and periodically repay it to keep it under control. Note: ‘Refactoring for Software Design Smells: Managing Technical Debt’, published by Morgan Kaufmann/Elsevier, is available worldwide from November 2014 (URL: http://amzn.com/0128013974). This extract is published with permission from Morgan Kaufmann/ Elsevier, MA, USA. References [1] Cunningham W, ‘The WyCash portfolio management system’. In: Addendum to the proceedings on object-oriented programming systems, languages, and applications. OOPSLA ‘92; 1992. [2] Highsmith J, ‘Zen and the art of software quality’. In: Agile2009 conference; 2009. [3] Kelion L, ‘Why banks are likely to face more software glitches in 2013’. Available at: http://www.bbc.co.uk/news/ technology-21280943. [4] Brooks Jr F P, ‘The Mythical Man-month’. Anniversary ed. Boston, MA, USA: Addison-Wesley Longman Publishing Co Inc; 1995./ By: Girish Suryanarayana Ganesh Samarthyam and Tushar Sharma Girish Suryanarayana is a senior research scientist at Research and Technology Centre, Siemens Technologies and Services Pvt Ltd, Bengaluru. Ganesh Samarthyam is an independent consultant and corporate trainer based in Bengaluru. He has contributed numerous articles to LFY/OSFY since 2006. Tushar Sharma is a technical expert at Research and Technology Centre, Siemens Technologies and Services Pvt Ltd, Bengaluru. 92 | DecemBER 2014 | OPEN SOURCE For You | www.OpenSourceForU.com