The True Meaning of Technical Debt

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • SaaSHub - Software Alternatives and Reviews
  • RVS_Spinner

    A Fancy "Popup Prize-Wheel Spinner" UIControl

  • It's an interesting article, and I appreciate the readability (good formatting, images, etc.).

    Personally, I am absolutely against any kind of debt. It has served me well, but has also given me a personally humble lifestyle. I also worked for a 100-year-old Japanese corporation that was (and still is) ferociously debt-averse. Personally, I feel that my debt-aversion has been a great asset. I'm not so sure that debt-aversion was as good for the corporation I worked for.

    But then, "good" is relative. They are 100 years old. That's pretty badass. They got to be 100 by being risk-averse, and building on a robust foundation. But they are also relatively small. Their aversion to debt meant that competitors passed them by, in Ferraris, while they were chugging along in their trusty Volvo.

    Often passing flaming, expensive wrecks...

    But I digress. It also made it a huge pain to develop software for these folks. I feel as if there was so much design (that yellow curve), that the software suitability suffered.

    I consider tech debt to be anything that we say "We'll deal with that down the road." It's really that simple. It may be high issue counts, inflexible design, usability issues, resource usage, cost to maintain, etc.

    The word "debt" has a lot of shame attached to it. When I first got married, we needed to use a significant portion of our wedding presents to pay off the credit card debt that I brought into the relationship. That was something that caused me great shame, and was a principal motivator for my "live humble and debt-free" philosophy, thereafter. I have never carried a balance on credit cards, since. So I have a ridiculously high credit score, but I probably would have a hard time actually borrowing money (so I'm told. I haven't actually tried -the mortgage for my house, and leasing cars has never been an issue).

    "Tech debt," as the author states, is also often assumed to be the result of "poor code." There's a lot of really badly-written code out there, but much of it is relatively debt-free, due to being tested, encapsulated, and well-maintained. It wasn't allowed past the velvet rope, until it had cleaned up its act.

    I've also shitcanned dependencies that had well-written code, unit tests, eye-candy Web sites, and great presentation, but suffered serious bugs.

    Usability and localization are the things that have resulted in a couple of bent-nose guys telling me how it would be a shame if anything would happen to my kneecaps. Usability, in particular, is a killer. I have designed, implemented, then removed, some pretty fancy widgets, because they proved to be nice on paper, but unsuitable to my needs in practice. An example is my RVS_Spinner widget[0]. My RVS_Checkbox widget[1], on the other hand, has proven to be marvelously useful.

    When it comes to usability, in my experience, there's absolutely no substitute for actually putting the code out there, and letting people play with it. Early beta-testing is crucial, and I have found that it's also important that the code be full ship-quality; not lash-up-test quality. That's because, if Management likes the demo, it becomes ship code; whether or not I want it to be so. It also means that, if rejected, I toss out ship-quality code. Sometimes, I may keep the code, and polish it up for future use (that's one reason that I have so many small module packages out there).

    Localization and security, in my experience, are things that are easy to manage, if baked in from the start, and a fang-toothed nightmare, if added after the fact. So not dealing with those from the start, is an example of "I'll deal with that down the road," that I can live to regret.

    Since leaving my last employer, I have been experimenting with what I term "ultra-agile" development techniques. I despise tech debt, so I am trying to figure out how to get "the best of both worlds." The results, so far, have been promising, but my scale is, by necessity, fairly small.

    But that's just my experience. YMMV.

    [0] https://github.com/RiftValleySoftware/RVS_Spinner

    [1] https://github.com/RiftValleySoftware/RVS_Checkbox

  • RVS_Checkbox

    A simple, UIKit "three-state" checkbox, written in Swift.

  • It's an interesting article, and I appreciate the readability (good formatting, images, etc.).

    Personally, I am absolutely against any kind of debt. It has served me well, but has also given me a personally humble lifestyle. I also worked for a 100-year-old Japanese corporation that was (and still is) ferociously debt-averse. Personally, I feel that my debt-aversion has been a great asset. I'm not so sure that debt-aversion was as good for the corporation I worked for.

    But then, "good" is relative. They are 100 years old. That's pretty badass. They got to be 100 by being risk-averse, and building on a robust foundation. But they are also relatively small. Their aversion to debt meant that competitors passed them by, in Ferraris, while they were chugging along in their trusty Volvo.

    Often passing flaming, expensive wrecks...

    But I digress. It also made it a huge pain to develop software for these folks. I feel as if there was so much design (that yellow curve), that the software suitability suffered.

    I consider tech debt to be anything that we say "We'll deal with that down the road." It's really that simple. It may be high issue counts, inflexible design, usability issues, resource usage, cost to maintain, etc.

    The word "debt" has a lot of shame attached to it. When I first got married, we needed to use a significant portion of our wedding presents to pay off the credit card debt that I brought into the relationship. That was something that caused me great shame, and was a principal motivator for my "live humble and debt-free" philosophy, thereafter. I have never carried a balance on credit cards, since. So I have a ridiculously high credit score, but I probably would have a hard time actually borrowing money (so I'm told. I haven't actually tried -the mortgage for my house, and leasing cars has never been an issue).

    "Tech debt," as the author states, is also often assumed to be the result of "poor code." There's a lot of really badly-written code out there, but much of it is relatively debt-free, due to being tested, encapsulated, and well-maintained. It wasn't allowed past the velvet rope, until it had cleaned up its act.

    I've also shitcanned dependencies that had well-written code, unit tests, eye-candy Web sites, and great presentation, but suffered serious bugs.

    Usability and localization are the things that have resulted in a couple of bent-nose guys telling me how it would be a shame if anything would happen to my kneecaps. Usability, in particular, is a killer. I have designed, implemented, then removed, some pretty fancy widgets, because they proved to be nice on paper, but unsuitable to my needs in practice. An example is my RVS_Spinner widget[0]. My RVS_Checkbox widget[1], on the other hand, has proven to be marvelously useful.

    When it comes to usability, in my experience, there's absolutely no substitute for actually putting the code out there, and letting people play with it. Early beta-testing is crucial, and I have found that it's also important that the code be full ship-quality; not lash-up-test quality. That's because, if Management likes the demo, it becomes ship code; whether or not I want it to be so. It also means that, if rejected, I toss out ship-quality code. Sometimes, I may keep the code, and polish it up for future use (that's one reason that I have so many small module packages out there).

    Localization and security, in my experience, are things that are easy to manage, if baked in from the start, and a fang-toothed nightmare, if added after the fact. So not dealing with those from the start, is an example of "I'll deal with that down the road," that I can live to regret.

    Since leaving my last employer, I have been experimenting with what I term "ultra-agile" development techniques. I despise tech debt, so I am trying to figure out how to get "the best of both worlds." The results, so far, have been promising, but my scale is, by necessity, fairly small.

    But that's just my experience. YMMV.

    [0] https://github.com/RiftValleySoftware/RVS_Spinner

    [1] https://github.com/RiftValleySoftware/RVS_Checkbox

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • tech-debt

    Technical debt happens when low code quality slows new developments : you have to pay time interests. TechDebt allows you to quantify and track your technical debt.

  • One problem with technical tech is that it often talked about abstractly : "there is technical debt", "There are code smells", etc.

    But if we want to use technical tech as a tool practically, we should be able to quantify the technical debt precisely.

    We should be able to say I have 10 000 € per day or 100 000 € of technical debt.

    I have developed (very early stage) a tool to quantify technical debt : I appreciate any feedback (if stated kindly :p)

    https://github.com/lcetinsoy/tech-debt

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts