Every developer with a project under their belt understands that technical debt is a bad thing. But since it is an abstract concept — like love, or the reasons for Pitbull's career — it can be hard to conceptualize. You may not realize how bad a situation has gotten until your new development is stymied because of the seemingly innocent decisions made a week, month, or year ago.
That decision making process was sharply illustrated while moving from my current house. I rarely see our kitchen counter tops since I'm married with three kids. Flat surfaces in communal areas have a knack for accumulating the detritus of life: graded homework, mail that should probably be filed but not immediately important, random toys, my passive-aggressive crayon artwork, etc. A scene like this is a pretty common occurrence:
This causes problems. Sometimes family will pass through Denver and want to stop. Or we'll host a kid's birthday party. OR we may really get our bindle in a fix and decide to clean something fierce. When that happens do we carefully proceed like seasoned archaeologists, peeling back the layers of our own history, making careful notes and cataloging the relevant items to their long-term homes?
Nope. Not even close. When rushed, a developer will copy and paste code in multiple places. They will leave out error and edge case handling. They will introduce high coupling and low cohesion throughout modules. In our case, we put everything in a box.
In either case the immediate problem gets solved. A developer ships their code to production. We ship that box to the crawlspace. The next time something happens we do it again, because it worked so well the first time. And again, and again, and again because we're busy people. But each time things get more difficult. Maybe maintenance time increases. Or things are starting to mysteriously fail. Or the server load is becoming uncomfortably high.
Or maybe the crawl space is filling up.
And then comes the hushed discussions of the Epic Rewrite™; that silver bullet that will magically fix everything. It's that moment when we have to get our house in order. It's that moment when I go down into my crawlspace and I find... this:
All those decisions made for the sake of expediency have now come due. Instead of having everything neatly in its place the boxes, once a means of convenience, are a hinderance. Things are at a standstill because instead of taking the five minutes when a problem arose I have to take the five days to deal with the problems all at once.
Technical debt is a tradeoff. Perhaps if we had a massive visual reminder of the ramifications we wouldn't be so willing to agree to the faustian bargain in the moment. It certainly would have saved me some backbreaking labor to spend the time up front.