ways and is ongoing. It can come from
the design or implementation phases, of course, but can also occur in
the operational phase. For example,
a computer system may have had a
UPS (uninterruptible power supply)
designed and installed, but deferred
maintenance—in the form of failing
to test those units and replace batteries—can render them useless. Disk arrays may be adequate when specified,
but as the system grows they must be
upgraded. This can be especially hard
when attempting to extract dollars
from a cash-strapped management to
upgrade something that, from their
perspective, works fine.
Management all too often aids and
abets this problem. The current business mantra of “shareholder value”
would be fine if shareholders were
patient enough to reward long-term
value creation. Instead the tendency
is to think quarter to quarter rather
than decade to decade, which puts immense pressure on everyone in the organization to produce as much as possible as quickly as possible, regardless
of the longer-term costs (as indicated
by the old lament, “there’s never time
to do it right, but there’s always time
to do it over”). Pushing costs into the
future is considered a good strategy.
This strongly encourages assumption
of technical debt. An indicator of this
is when engineering is perpetually
in “crunch mode” rather than using
crunches sparingly. How many companies advertise being “family friendly”
on their Web sites and in their corporate values statement while encouraging their employees to work 60-hour
weeks, penalizing “slackers” who work
40-hour weeks and then go home to
their families? In these environments,
the assumption of inappropriate technical debt is nearly impossible to avoid.
This is not to say that management
is always wrong. There are appropriate times to accrue debt. If my child
needed a critical medical treatment I
wouldn’t refuse just because it meant
taking on debt, even if it would be expensive to pay back. Likewise, management has a responsibility to customers, employees, and (yes) investors
that can sometimes impose uncomfortable requirements. Debt taken on
with eyes open and in a responsible
way is not a bad thing. U.C. Berkeley’s
technical debt is
inevitable. the issue
is not eliminating
debt, but rather
managing it.
When a project
starts, the team
almost never
has a full grasp
on the totality
of the problem.
CIO made a bet that turned out wrong,
but it could have been a winning bet.
He knew he was making it, and he
took responsibility for the problem
when the roof did cave in. The difficulty is when management doesn’t
understand the debt they are taking
on or takes it on too easily and too often, without a plan for paying it back.
In a past job I argued that we needed
more time to build a system, only to
be blamed by management when we
had a high defect rate that was directly
attributable to the artificially short
schedule that was imposed against my
better judgment. In this case, management didn’t understand the debt,
ignored warnings to the contrary, and
then didn’t take responsibility when
the problems manifested.
Cost of Debt from
Various Perspectives
Technical debt affects everyone, but
in different ways. This is part of the
problem of managing the debt—even
if you understand it from your perspective, there are other legitimate
ways to view it.
Customers. It may seem that the
customers are the ultimate villains
(and victims) in this affair. After all,
if they were more patient, if they demanded less from the products and
gave the company more time to do the
job right the first time, none of this
would happen (or maybe not). True,
customers can sometimes focus more
on features (and sadly, sometimes on
marketing fluff) than long-term maintainability, security, and reliability,
yet they are the ones who are most
badly injured. When the mobile network goes out, when they cannot get
their work submitted on time, when
their company loses business because they are fighting the software,
they pay. Ultimately, it’s all about
doing what the customers need, and
customers need software that works,
that they can understand, that can be
maintained and extended, that can
be supported, and (ultimately) that
they like using. This cannot happen
without managing the technical debt
at every level through the process, but
customers seldom have any control
over how that debt is managed. It is
worth noting that customers who are
paying for bespoke solutions general-