When I first heard of the term “technical debt”, I was
thrilled. I thought finally I could use the term to explain to my management,
who had either little or out-of-dated technical understanding and had little
patience to anything other than resources (yep, software engineers are just one
of the resources) and budget, why smelly code was bad. I could say to them, “look,
it is like a financial debt, if we don’t pay off, it will become larger and
larger, and in the end, we will only be paying off the interest, there is no
hope that we can every pay back the principle”.
The management listened politely and nodded – so obviously,
this was a metaphor that they understood. But they were not galvanized, they
didn’t jump up in shock and immediately rolled up sleeves to assemble “resources”
to do refactoring.
I later realized that I was asking too much with this
metaphor. It is simply human nature to be optimistic and reckless. You know
this when you see in news that someone has multiple credit cards and uses one
credit card to pay off the other. There is this sweetness in human nature that
keeps us going on, thinking that “just let me go through this week, this month,
and everything then will come out ok.”
Comparing technical debt to financial debt has the same
effect. When things get tough in a project (which always happen), it is
tempting to just borrow some more and get through this release – we will definitely
pay back the debt in the next release.
So I think we need a better metaphor. Since everyone knows
smelly code, how about comparing it to rotten food in a refrigerator? If the
rotten food is not thrown away, it will contaminate other food in the
refrigerator, and things can get so bad that the whole refrigerator might have
to be thrown away – the whole project has to be cancelled or the system be
abandoned.
It is ok to keep some food that is beyond its shelf life --
if we are really hungry and if there is no other food, we just need to keep in
mind the consequence of neglecting it for too long; and also some smelly food
can also be quite delicious, for example, the smelly Tofu, so we should make
intelligent decisions depending on the context.
Some management might be creative and try to work around the
rotten food by throwing it into the freeze compartment, which actually is a
good way to handle smelly code: if we can’t refactor it cost-effectively, let
us isolate it so that it won’t affect other parts. The worst thing we can do
with smelly code is to mix it with new code, and thus contaminate the whole
system.
I just hope that there is way to measure how smelly the refrigerator is. We have a way to measure how hot a pepper is, can't we have a measure how smelly some food is? We can say, it is 10 unit smelly, we can tolerate it; it is 1000 unit smelly and it makes people sick, we have to do something about it.
I just hope that there is way to measure how smelly the refrigerator is. We have a way to measure how hot a pepper is, can't we have a measure how smelly some food is? We can say, it is 10 unit smelly, we can tolerate it; it is 1000 unit smelly and it makes people sick, we have to do something about it.
Here is how rotten food in a refrigerator looks like:
With this, I hope I have ruined your appetite :-)
No comments:
Post a Comment