A2DAM (Agile Alliance Debt Analysis Model), 130
abstract concept (Principle 1), technical debt reifies, 14, 16
accidental database debt, 90
accruing
additional technical debt versus repaying debt, 25–26
interest on technical debt, 25, 27–29
ACM Turing Award Lecture (1972), software crisis, 10
action, taking (technical debt toolbox/process), 196, 200–201
actual technical debt
potential technical debt versus, 32, 33, 138, 140
servicing technical debt, 138, 140
adapters and architectural debt, 97
additional technical debt, accruing versus repaying debt, 25–26
age of system (context of software development), 38
agile practices, managing technical debt at scale, 190–193
all code matters (Principle 7), 107, 206
all systems have technical debt (Principle 3), 45, 152, 158, 180, 206
amnesty of debt (write offs), 141
analytic models, architectural debt analysis, 89
analyzing architectural debt, 89, 90
analytic models, 89
checklists, 89
prototypes/simulations, 89
scenario-based analysis, 89
thought experiments/reflective questions, 89
analyzing source code
Automated Technical Debt Measure specification, 74–75
business goals, 68
identifying questions about source code, 70–72
mapping, 69
code inspections, 74
code smells, 66
documenting technical debt items, 76–78
driving analysis questions, 70–72
observable measurement criteria, 72–74
pain points
business goals and pain points, 68–69, 70–72
identifying questions about source code, 70–72
peer reviews, 74
documenting technical debt items, 76–78
identifying questions about source code, 70–72
observable measurement criteria, 72–74
questions about source code, identifying, 70–72
refactoring source code, 79–80
SonarQube static analyzer, 75–76
static analyzers, 65–66, 74–75
Technical Debt Credit Checks, 66, 68–70
Tricorder static analyzer, 75
Angular, opportunities and risk, 47
AngularJS, opportunities and risk, 47
architectural debt. See also database debt
adapters and, 97
analysis tools/techniques, 84, 89, 90
analytic models, 89
checklists, 89
prototypes/simulations, 89
scenario-based analysis, 89
thought experiments/reflective questions, 89
architectural technical debt has the highest cost of ownership (Principle 6), 86, 180
conventions (design), 84
gateways and, 97
intentional versus unintentional debt, 84
measurement criteria, defining, 96–97
modifiability and, 96
modularity and, 83
analysis tools/techniques, 97–98
defining measurement criteria, 96–97
quality attributes/requirements, 84–85
remediating technical debt, 121–122
symptoms of technical debt, 84–85
architectural technical debt has the highest cost of ownership (Principle 6), 86, 180
architectures
architectural runways, 186
assessing technical debt, 61
context of software development, 38
lack of, example, 7
landscape of technical debt, 21
software engineering practices, managing technical debt, 185
production infrastructure/architecture alignment, 187
quality attributes/requirements, 185–186
software/system architecture documents, 188
Technical Debt Credit Check, 171
artifacts
system artifacts, causes of technical debt versus, 152
technical debt items, 22
assessing
information (technical debt toolbox/process), 195, 197–198
technical debt
architectures, 61
assignees/reporters (writing technical debt descriptions), source code analysis, 57, 58, 77
build and integration debt, 111
causes of technical debt, identifying, 156, 163
chain of causes/effects, 52–53
comparing case studies, 44
contrasting case studies, 40–41
costing technical debt, 117–119
feature delivery versus servicing technical debt, 139–140
investment, technical debt as, 143–145
production debt, 105
refactoring code, 184
servicing technical debt, 139–140
technical debt as investment, 143–145
technical debt toolbox/process, 202
testing debt, 112
Automated Technical Debt Measure specification, 74–75
automation
build and integration debt, 107
test automation, development process-related causes of technical debt, 160–162
awareness (technical debt toolbox/process), 195, 196–197
awareness (timeline of technical debt), 33, 53–54
awareness levels of technical debt, 11–12
balance and database performance, 91
bankruptcy, declaring, 141
becoming aware (technical debt toolbox/process), 195, 196–197
benefit/cost comparisons
costing technical debt, 123
servicing technical debt, 131–132, 139–140
Booch, Grady, 3
build and integration debt, 106
automation, 107
build times, improving, 111
continuous integration, 107
building technical debt registries, 195, 198–199
business context
assessing technical debt, 58–60
changes to (causes of technical debt), 157
business goals
architectural debt analysis, 95–96
source code analysis, 68
examples of business goals, 68–69
identifying questions about source code, 70–72
business models (context of software development), 38
business vision (Technical Debt Credit Check), 170
business-related causes of technical debt, 155
misaligned business goals, 156
requirements shortfall, 156–157
calculating recurring debt, 122–123
causes of technical debt, identifying, 156, 163
chain of causes/effects, 52–53
comparing case studies, 44
contrasting case studies, 40–41
costing technical debt, 117–119
feature delivery versus servicing technical debt, 139–140
production debt, 105
refactoring code, 184
servicing technical debt, 139–141, 143–145
technical debt as investment, 143–145
technical debt toolbox/process, 202
building technical debt registries, 135–136
causes of technical debt, diagnosing with Technical Debt Credit Check, 172–173
causes of technical debt, identifying, 156, 157–158
code quality/standards, 181–183
comparing case studies, 44
contrasting case studies, 40–41
costing technical debt, 119–120, 124–125
duplicate code, handling, 78
mitigating risk, 143
release pipeline, 143
servicing technical debt, 143
source code analysis, 65–69, 77, 78–79
technical debt toolbox/process, 202–203
causes of technical debt, diagnosing with Technical Debt Credit Check, 174–177
causes of technical debt, identifying, 156–157, 160, 164
comparing case studies, 44
contrasting case studies, 40–41
costing technical debt, 127
production debt, 105
technical debt toolbox/process, 203–204
causes of technical debt, 22–23, 151–153
business-related causes, 155
misaligned business goals, 156
requirements shortfall, 156–157
changes in context, 157
business context, 157
development process-related causes, 159
ineffective documentation, 159–160
misaligned processes, 162
diagnosing with Technical Debt Credit Check
main causes of technical debt, 154–155
software development, 152
system artifacts versus causes, 152
team/personnel-related causes, 162–163
distributed teams/personnel, 164
inexperienced teams/personnel, 163–164
undedicated teams/personnel, 164–165
unintentional debt, 153
chain of causes/effects, recognizing technical debt, 51–54
change (context of software development), rate of, 38
changes in context, causes of technical debt, 157
business context, 157
checklists, architectural debt analysis, 89
code. See also source code
code inspections (source code analysis), 74
code smells, 20
Phoebe case study, 66
servicing technical debt, 137
dirty code and technical debt, 125–126
quality/standards, avoiding unintentional debt, 180–183
refactoring code, 184
spaghetti code, 65–66, 69, 71, 76, 78–79, 91
collective management of technical debt items, 127–129
conformance/lightweight analysis (software engineering practices), managing technical debt, 189–190
consequences (writing technical debt descriptions), 57, 58
build and integration debt, 111
source code analysis, 77
testing debt, 112
consequences of technical debt, 23, 51, 52, 53, 54–55
Consortium for IT Quality, Automated Technical Debt Measure specification, 74–75
context (business) and assessing technical debt, 58–60, 157
context, changes in (causes of technical debt), 157
business context, 157
context of software development, 37
age of system, 38
architectures, 38
business models, 38
case studies
comparing, 44
criticality, 39
governance, 39
rate of change, 38
size, 38
MSLOC, 41
team distribution, 38
continuous deployment, 104–105
continuous integration, 104–105, 107
contractors, collective management of technical debt items, 127
conventions (design) and architectural debt, 84
cost/time pressure, causes of technical debt, 155–156
costing technical debt, 27
A2DAM, 130
benefit/cost comparisons, 123
collective management of technical debt items, 127–129
current principal, 118
function points, 130
object points, 130
Phoebe case study, 119–120, 124–125
post facto measurements, 130
recurring interest, calculating, 122–123
refining technical debt descriptions, 119–120
remediating technical debt, 121–122
story points, 130
technical debt has no absolute measure—neither for principal nor interest (Principle 8), 124
Tethys case study, 127
tipping points, 118
tool-supported analysis, 123, 130
total effort, 118
use-case points, 130
costs of opportunity, 133, 134–135
Credit Checks, 167, 177, 197, 204
architectures, 171
business vision, 170
causes of technical debt, diagnosing, 172–177
conducting
process of, 169
development processes, 171–172
inputs, 169
organizational culture/processes, 172
output from (scorecards), 170
Phoebe case study, 66, 172–173
purpose of, 168
scorecards, 170
team/personnel, 168
criticality (context of software development), 39
current principal, costing technical debt, 118
CVE (Common Vulnerabilities and Exposures) database, secure coding, 183
CWE (Common Weakness Enumeration) database, secure coding, 183
database debt. See also architectural debt, 90
accidental database debt, 90
database models and, 92
database performance and balance, 91
intentional database debt, 90
NoSQL databases, 92
query performance, 91
relational databases and, 91–92
schema structure duplication, 90–91
spaghetti code, 91
strings, 91
debt amnesty (write offs), 141
deciding what to fix (technical debt toolbox/process), 196, 199–200
decision-making process, treating technical debt, 25–26
defects and technical debt, 21–22
delivering features versus servicing technical debt, 139–140
dependencies (hidden), costing technical debt, 127–128
deployment (continuous), 104–105
descriptions of technical debt, writing, 55–58, 63–64
name field, 57
remediation approaches, 57, 58, 77
reporters/assignees, 57, 58, 77
designers and architectural debt, 84
analysis tools/techniques, 89, 90
analytic models, 89
checklists, 89
prototypes/simulations, 89
scenario-based analysis, 89
thought experiments/reflective questions, 89
interviewing designers to determine debt, 86–88
development processes
causes of technical debt, 159
ineffective documentation, 159–160
misaligned processes, 162
Technical Debt Credit Check, 171–172
development teams, collective management of technical debt items, 127
diagnosing causes of technical debt with Technical Debt Credit Check
Dijkstra, Edsger, 10
dirty code and technical debt, 125–126
distributed teams/personnel
causes of technical debt, 164
context of software development, 38
documenting
build and integration debt, 111
ineffective documentation, development process-related causes of technical debt, 159–160
software engineering practices, managing technical debt, 188
software/system architecture documents, 188
technical debt items (source code analysis), 76–78
version control, 188
write-only documents, 188
driving analysis questions, 70–72
duplicate code, handling, 78
effects/causes (recognizing technical debt), chain of, 51–54
effort (total), costing technical debt, 118
evolution, causes of technical debt, 158–159
exposure to risk, 133–134, 135
external quality (low), technical debt and, 21–22
FBCB2 (Force XXI Battle Command Brigade and Below), opportunities and risk, 46–47
feature delivery versus servicing technical debt, 139–140
fixes, deciding on (technical debt toolbox/process), 196, 199–200
forecasting, value of technical debt, 29
Fortify security scanning tool, 182–183
function points, costing technical debt, 130
gateways and architectural debt, 97
Gibbs, Wayt, 10
governance (context of software development), 39
grooming product backlogs (costing technical debt), 127–129
hidden dependencies, costing technical debt, 127–128
IEEE 830–1998: Recommended Practice for Software Requirements Specifications,185
incurring technical debt (Principle 2), 32, 206
inexperienced teams/personnel, causes of technical debt, 163–164
infrastructure as code, 61–62, 105
infrastructure debt, 110, 121–122
initial technical debt, incurring, 24–25
inspecting code (source code analysis), 74
installment plans, repaying technical debt, 30–31
integration (continuous), 104–105, 107
interest on technical debt, 24
defined, 27
costing technical debt, 122–123
defined, 27
technical debt has no absolute measure—neither for principal nor interest (Principle 8), 124
interns, collective management of technical debt items, 127
interviewing designers to determine architectural debt, 86–88
investment
ROI, costing technical debt, 118, 123–125
invisibility, landscape of technical debt, 21
ISO/IEC 25000 standard, maintainable coding, 183–184
iterations of source code analysis, 78–79
landscape of technical debt, 20
architectures, 21
invisibility, 21
production infrastructures, 21
source code, 20
levels of technical debt awareness, 11–12
lightweight analysis/conformance (software engineering practices), managing technical debt, 189–190
low external quality and technical debt, 21–22
maintenance, single points of, 188
managing technical debt
causes of technical debt, identifying, 151–153
business-related causes, 155–157
development process-related causes, 159–162
main causes of technical debt, 154–155
software development, 152
system artifacts versus causes, 152
team/personnel-related causes, 162–165
unintentional debt, 153
software engineering practices, 179–180, 193
agile practices, managing technical debt at scale, 190–193
architectural development/design, 185–190
code quality/standards, 180–183
documentation, 188
lightweight analysis/conformance, 189–190
refactoring code, 184
Technical Debt Credit Check, 167, 177
architectures, 171
business vision, 170
causes of technical debt, diagnosing, 172–177
conducting, process of, 169
conducting, when to conduct, 168–169
development processes, 171–172
inputs, 169
organizational culture/processes, 172
output from (scorecards), 170
purpose of, 168
scorecards, 170
team/personnel, 168
technical debt toolbox/process, 195, 196
assessing information, 195, 197–198
Atlas case study, 202
building technical debt registries, 195, 198–199
deciding what to fix, 196, 199–200
mandatory updates, 188
mapping, technical debt items, 22
misaligned business goals, causes of technical debt, 156
misaligned processes, development process-related causes of technical debt, 162
mitigating risk, servicing technical debt, 140–141, 143
MITRE Corporation, secure coding, 183
modifiability and architectural debt, 96
modularity and architectural debt, 83
monitoring (self), production infrastructure/architecture alignment, 187
MSLOC, 41
name field (writing technical debt descriptions), 57
naming, technical debt, 16
NATO Software Engineering Conference (1969), software crisis, 10
negative values (risk mitigation), 140–141
NoSQL databases and technical debt, 92
NPV (Net Present Values), technical debt as investment, 143–145
object points, costing technical debt, 130
observable measurement criteria (source code analysis), 72–74
occurrence (timeline of technical debt), 33
OMG (Object Management Group), Automated Technical Debt Measure specification, 74–75
Open Web Application Security, 183
opportunity costs, 133, 134–135
optimizing value of technical debt, 29
organizational culture/processes (Technical Debt Credit Check), 8–9, 172
pain points, source code analysis, 68–72
parameterization, production infrastructure/architecture alignment, 187
peer reviews (source code analysis), 74
performance
database performance and balance, 91
query performance and database debt, 91
personnel/teams
causes of technical debt, 162–163
distributed teams/personnel, 164
inexperienced teams/personnel, 163–165
contractors, collective management of technical debt items, 127
interns, collective management of technical debt items, 127
Technical Debt Credit Check, 168–169
analysis tools/techniques, 97–98
defining measurement criteria, 96–97
causes of technical debt
diagnosing with Technical Debt Credit Check, 172–173
code quality/standards, 181–183
comparing case studies, 44
contrasting case studies, 40–41
costing technical debt, 119–120, 124–125
servicing technical debt
mitigating risk, 143
release pipeline, 143
documenting technical debt items, 76–78
duplicate code, handling, 78
identifying questions about source code, 70–72
observable measurement criteria, 72–74
technical debt registries, building, 135–136
technical debt toolbox/process, 202–203
planning releases, servicing technical debt, 142–143
Poort, Eltjo R., 133
post facto costing of technical debt, 130
potential technical debt
actual technical debt versus, 32, 33, 138, 140
misaligned business goals, 156
requirements shortfall, 156
servicing technical debt, 138, 140
time/cost pressure, 155
principal on technical debt
current principal, costing technical debt, 118
principles of technical debt, 13
Principle 1: Technical debt reifies an abstract concept, 14, 16, 206
Principle 2: If you do not incur any form of interest, then you probably do not have actual technical debt, 32, 206
Principle 3: All systems have technical debt, 45, 152, 158, 180, 206
Principle 4: Technical debt must trace to the system, 55, 152, 206
Principle 5: Technical debt is not synonymous with bad quality, 67, 180, 206
Principle 6: Architecture technical debt has the highest cost of ownership, 86, 180
Principle 7: All code matters, 107, 206
Principle 8: Technical debt has no absolute measure—neither for principal nor interest, 124, 206
Principle 9: Technical debt depends on the future evolution of the system, 139, 206
process misalignment, development process-related causes of technical debt, 162
product backlogs, grooming (costing technical debt), 127–129
production
assessing technical debt, 61–62
production infrastructures
architecture alignment, 187
landscape of technical debt, 21
production debt
Atlas case study, 105
automation, 107
build and integration debt, 106–107, 111
continuous deployment, 104–105
continuous integration, 104–105, 107
DevOps, 104
infrastructure as code, 105
infrastructure debt, 110
Phoebe case study, 105, 110–113
scripts, 105
servicing debt, 113
testing debt, 109–110, 111–112
Tethys case study, 105
prototypes/simulations, architectural debt analysis, 89
quality of code, 67
Consortium for IT Quality, 74–75
unintentional debt, avoiding, 180–183
queries, database debt and query performance, 91
questions about source code (source code analysis), identifying, 70–72
rate of change (context of software development), 38
recognizing technical debt, 51
chain of causes/effects, 51–54
visible consequences of technical debt, 54–55
writing technical debt descriptions, 55–58, 63–64
name field, 57
remediation approaches, 57, 58
recurring interest
calculating, costing technical debt, 122–123
defined, 27
refining technical debt descriptions, costing technical debt, 119–120
reflective questions/thought experiments, architectural debt analysis, 89
registries (technical debt), building, 195, 198–199
relational databases and technical debt, 91–92
release pipeline, 104–105, 142–143
release planning, architectural development/design, 186–187
remediation
costing technical debt, 121–122
timeline of technical debt, 34
remediation approaches
ROI, building technical debt registries, 135–136
writing technical debt descriptions, 57, 58
build and integration debt, 111
ROI, calculating (costing technical debt), 123–125
source code analysis, 77
testing debt, 112
remediation points, servicing technical debt, 132
repaying
interest on technical debt, 26–27
principal on technical debt, 25–26
technical debt
accruing additional debt versus repaying debt, 25–26
reporters/assignees (writing technical debt descriptions), 57, 58
build and integration debt, 111
source code analysis, 77
testing debt, 112
requirements
requirements shortfall, causes of technical debt, 156–157
unimplemented requirements and technical debt, 21–22
reviews (peer), source code analysis, 74
risk
mitigation, servicing technical debt, 140–141, 143
ROI (Return Of Investment)
costing technical debt, 118, 123
servicing technical debt, building technical debt registries, 135–136
runways (architectural), 186
SaaS (Software as a Service), 103–104
SAFe (Scaled Agile Framework), architectural runways, 186
scenario-based analysis, architectural debt analysis, 89
schema structure duplication, 90–91
Scientific American, software crisis, 10
scorecards (Technical Debt Credit Check), 170
scripts, 105
security and architectural debt, 96–97
SEI CERT Secure Coding Standards, 183
self-initiated version updating, production infrastructure/architecture alignment, 187
self-monitoring, production infrastructure/architecture alignment, 187
servicing technical debt
actual technical debt versus potential technical debt, 138, 140
bankruptcy, declaring, 141
costs/benefits of, 131–132, 139–140
debt amnesty (write offs), 141
decision points, 138
feature delivery versus, 139–140
investment, technical debt as, 143–145
opportunity costs, 133, 134–135
technical debt as investment, 143–145
potential technical debt versus actual technical debt, 138, 140
remediation points, 132
technical debt registries, building, 135–136
technical debt depends on the future evolution of the system (Principle 9), 139
tipping points, 132
simulations/prototypes, architectural debt analysis, 89
single points of maintenance, 188
size (context of software development), 38
MSLOC, 41
software
automation, 107
build and integration debt, 106–107
continuous deployment, 104–105
continuous integration, 104–105, 107
DevOps, 104
infrastructure debt, 110
scripts, 105
software development
causes of technical debt, identifying, 152
context of software development, 37
age of system, 38
architectures, 38
business models, 38
comparing case studies, 44
contrasting case studies, 40–41
criticality, 39
governance, 39
rate of change, 38
size, 38
size, MSLOC, 41
team distribution, 38
software engineering practices, managing technical debt, 179–180, 193
agile practices, managing technical debt at scale, 190–193
architectural development/design, 185
production infrastructure/architecture alignment, 187
quality attributes/requirements, 185–186
code quality/standards, 180–183
documentation, 188
lightweight analysis/conformance, 189–190
refactoring code, 184
software-intensive systems, technical debt, 5
software/system architecture documents, 188
SonarQube static analyzer, 75–76
source code. See also code
all code matters (Principle 7), 107
analysis
Automated Technical Debt Measure specification, 74–75
code inspections, 74
code smells, 66
documenting technical debt items, 76–78
driving analysis questions, 70–72
identifying questions about source code, 70–72
observable measurement criteria, 72–74
pain points, identifying questions about source code, 70–72
peer reviews, 74
Phoebe case study, 65–69, 75–78
refactoring source code, 79–80
SonarQube static analyzer, 75–76
static analyzers, 65–66, 74–76
Technical Debt Credit Checks, 66, 68–70
Tricorder static analyzer, 75
assessing technical debt, 60–61
duplicate code, handling, 78
landscape of technical debt, 20
pain points
business goals and pain points, 68–69, 70–72
identifying questions about source code, 70–72
quality of code, 67
remediating technical debt, 121–122
spaghetti code, 65–66, 69, 71, 76, 78–79
technical debt is not synonymous with bad quality (Principle 5), 67
spaghetti code, 65–66, 69, 71, 76, 78–79, 91
static analyzers (source code analysis), 74–75
SonarQube static analyzer, 75–76
Tricorder static analyzer, 75
story points, costing technical debt, 130
strings and database debt, 91
structures, schema structure duplication, 90–91
summaries (writing technical debt descriptions), 57, 58
build and integration debt, production debt, 111
source code analysis, 77
testing debt, 112
symptom measures (source code analysis), 72–73
symptoms of technical debt, 51, 52, 53, 84–85
system (context of software development), age of, 38
system artifacts, causes of technical debt versus, 152
tactical investment, 9
taking action (technical debt toolbox/process), 196, 200–201
team distribution (context of software development), 38
teams/personnel
causes of technical debt, 162–163
distributed teams/personnel, 164
inexperienced teams/personnel, 163–164
undedicated teams/personnel, 164–165
contractors, collective management of technical debt items, 127
interns, collective management of technical debt items, 127
Technical Debt Credit Check, 168–169
technical debt registries, building, 135–136
accruing additional debt versus repaying debt, 25–26
actual technical debt versus
potential technical debt versus, 32, 33, 138, 140
servicing technical debt, 138, 140
amnesty of debt (write offs), 140–141
assessing
architectures, 61
business-related causes, 155
misaligned business goals, 156
requirements shortfall, 156–157
causes of technical debt, diagnosing with Technical Debt Credit Check
causes of technical debt, identifying, 151–153
business-related causes, 155–157
development process-related causes, 159–162
main causes of technical debt, 154–155
software development, 152
system artifacts versus causes, 152
team/personnel-related causes, 162–165
unintentional debt, 153
changes in context, causes of technical debt, 157
business context, 157
context of software development, 44–45, 48
cost of, 27
costing
A2DAM, 130
benefit/cost comparisons, 123
calculating recurring debt, 122–123
collective management of technical debt items, 127–129
current principal, 118
function points, 130
grooming product backlogs, 127–129
object points, 130
Phoebe case study, 119–120, 124–125
post facto measurements, 130
refining technical debt descriptions, 119–120
remediating technical debt, 121–122
story points, 130
technical debt has no absolute measure—neither for principal nor interest (Principle 8), 124
Tethys case study, 127
tipping points, 118
tool-supported analysis, 123, 130
total effort, 118
use-case points, 130
debt amnesty (write offs), 140–141
development process-related causes, 159
ineffective documentation, 159–160
misaligned processes, 162
diagnosing with Technical Debt Credit Check
friction analogy, 4
initial debt, incurring, 24–25
interest
accruing, 25
investment, technical debt as, 143–145
landscape of, 20
architectures, 21
invisibility, 21
production infrastructures, 21
source code, 20
low external quality and, 21–22
major concepts of, 15
naming, 16
occurrence, 33
pervasiveness of, 4
potential technical debt
actual technical debt versus, 32, 33, 138, 140
misaligned business goals, 156
requirements shortfall, 156
servicing technical debt, 138, 140
time/cost pressure, 155
principal
defined, 27
principles of, 13
all code matters (Principle 7), 107, 206
all systems have technical debt (Principle 3), 45, 152, 158, 180, 206
architectural technical debt has the highest cost of ownership (Principle 6), 86, 180
incurring technical debt (Principle 2), 32, 206
technical debt depends on the future evolution of the system (Principle 9), 139, 206
technical debt has no absolute measure—neither for principal nor interest (Principle 8), 124, 206
technical debt is not synonymous with bad quality (Principle 5), 67, 180, 206
technical debt must trace to the system (Principle 4), 55, 152, 206
technical debt reifies an abstract concept (Principle 1), 14, 16, 206
recognizing, 51
chain of causes/effects, 51–54
visible consequences of technical debt, 54–55
writing technical debt descriptions, 55–58, 63–64
remediation, 34
repaying
accruing additional debt versus repaying debt, 25–26
interest on technical debt, 26–27
scope of, 4
servicing
actual technical debt versus potential technical debt, 138, 140
building technical debt registries, 135–136
costs/benefits of, 131–132, 139–140
debt amnesty (write offs), 141
decision points, 138
declaring bankruptcy, 141
feature delivery versus, 139–140
opportunity costs, 133, 134–135
potential technical debt versus actual technical debt, 138, 140
remediation points, 132
technical debt as investment, 143–145
technical debt depends on the future evolution of the system (Principle 9), 139
tipping points, 132
software development and, 204–205
software-intensive systems, 5
symptoms of, 51, 52, 53, 84–85
teams/personnel-related causes, 162–163
distributed teams/personnel, 164
inexperienced teams/personnel, 163–164
undedicated teams/personnel, 164–165
tipping point, 34
treating debt, decision-making process, 25–26
unimplemented requirements and, 21–22
unintentional debt, timeline of technical debt, 196
defined, 29
forecasting, 29
optimizing, 29
visible consequences of technical debt, 54–55
writing technical debt descriptions, 55–58, 63–64
name field, 57
remediation approaches, 57, 58
Technical Debt Credit Check, 167, 177, 197, 204
architectures, 171
business vision, 170
causes of technical debt, diagnosing, 172–177
conducting
process of, 169
development processes, 171–172
inputs, 169
organizational culture/processes, 172
output from (scorecards), 170
Phoebe case study, 66, 172–173
purpose of, 168
scorecards, 170
team/personnel, 168
technical debt depends on the future evolution of the system (Principle 9), 139, 206
technical debt has no absolute measure—neither for principal nor interest (Principle 8), 124, 206
technical debt is not synonymous with bad quality (Principle 5), 67, 180, 206
technical debt items, 53
artifacts, 22
consequences, 23
defined, 22
interest of, defined, 24
managing collectively, 127–129
mapping, 22
principle of, defined, 24
technical debt must trace to the system (Principle 4), 55, 152, 206
technical debt registries, building, 195, 198–199
technical debt reifies an abstract concept (Principle 1), 206
technical debt toolbox/process, 195, 196
assessing information, 195, 197–198
Atlas case study, 202
building technical debt registries, 195, 198–199
deciding what to fix, 196, 199–200
technology changes, causes of technical debt, 157–158
test automation, development process-related causes of technical debt, 160–162
testing debt, 109–110, 111–112
causes of technical debt
diagnosing with Technical Debt Credit Check, 174–177
identifying, 156–157, 160, 164
comparing case studies, 44
contrasting case studies, 40–41
costing technical debt, 127
production debt, 105
technical debt toolbox/process, 203–204
thought experiments/reflective questions, architectural debt analysis, 89
time/cost pressure, causes of technical debt, 155–156
timeline of technical debt, 33, 205
costing technical debt, 118–119
occurrence, 33
remediation, 34
source code analysis, business goals and pain points, 68–69
tipping point, 34
unintentional debt, 196
tipping points, 34
costing technical debt, 118
servicing technical debt, 131–132
total effort, costing technical debt, 118
treating technical debt, decision-making process, 25–26
Tricorder static analyzer, 75
undedicated teams/personnel, causes of technical debt, 164–165
unimplemented requirements, technical debt and, 21–22
unintentional debt, 153
avoiding with software engineering practices, 179–180, 193
agile practices, managing technical debt at scale, 190–193
architectural development/design, 185–190
code quality/standards, 180–183
documentation, 188
lightweight analysis/conformance, 189–190
refactoring code, 184
timeline of technical debt, 196
updating
mandatory updates, 188
self-initiated version updating, production infrastructure/architecture alignment, 187
use-case points, costing technical debt, 130
value of technical debt, 27, 29
defined, 29
forecasting, 29
optimizing, 29
version control, documenting, 188
version updating (self-initiated), production infrastructure/architecture alignment, 187
visible consequences of technical debt, 54–55
WIRE team, dirty code and technical debt, 125–126
write-only documents, 188
writing off technical debt (debt amnesty), 141
writing technical debt descriptions, 55–58, 63–64
build and integration debt, 111
build and integration debt, 111
source code analysis, 77
testing debt, 112
name field, 57
remediation approaches, 57, 58
build and integration debt, 111
source code analysis, 77
testing debt, 112
reporters/assignees, 57, 58, 77
build and integration debt, 111
source code analysis, 77
testing debt, 112
testing debt, 112
Y2K, opportunities and risk, 46