{"id":3726,"date":"2020-01-01T02:17:23","date_gmt":"2020-01-01T02:17:23","guid":{"rendered":"http:\/\/nayrb.org\/~blog\/?p=3726"},"modified":"2020-01-01T02:17:23","modified_gmt":"2020-01-01T02:17:23","slug":"on-the-importance-of-technical-debt","status":"publish","type":"post","link":"http:\/\/nayrb.org\/~blog\/2020\/01\/01\/on-the-importance-of-technical-debt\/","title":{"rendered":"On the Importance of &#8216;Technical Debt&#8217;"},"content":{"rendered":"<p>A couple of years ago, I was talking with a good friend of mine, we were talking about the difficulties of prioritizing the maintainability of software in a large organization development context.<\/p>\n<p>And so, logically, the concept of &#8216;Technical Debt&#8217; came up.  Interestingly, he had never heard the term before[1], although as soon as he heard it, he grasped the importance.<\/p>\n<p>(I remember it as being a really inspiring conversation, but sadly, my notes from that day don&#8217;t well capture what I found so inspiring about it. \ud83d\ude41 )<\/p>\n<p>Although the concepts of &#8216;clean up after yourself&#8217; and &#8216;do it the right way&#8217; are likely as old as human civilization, it was likely only after systems reached a certain level of complexity that the concept of &#8216;Technical Debt&#8217; was really useful.  There is a limit to how complex a mechanical system can get[2], and most other systems are amenable to human factors and psychological safety solutions.<\/p>\n<p>It&#8217;s also interesting to think about what is different about software, that makes it: A) possible to make a working product with large (including conceptual) defects, B) Useful to &#8216;go into debt&#8217; to get a product out the door faster (or more cheaply).<\/p>\n<p>One wonders how much it is the sheer complexity of software systems, the number of interacting modules, or perhaps the number of layers involved, from OS to dev_tools, to language, to standard libraries, to 3rd party libraries, to user-made helper functions.  Perhaps it is just that one can &#8216;go into debt&#8217; in the uppermost layer, because there exists a good foundation.<\/p>\n<p>It could also simply be that software is an automation of so many smaller tasks, that any human system as complex would have similar useful concepts of debt[3].<\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Technical_debt\" target=\"_blank\">Doing a little bit of digging<\/a>, it seems that the concept was first termed &#8216;debt&#8217; sometime in 1992[4], but it was not until later that it was termed &#8216;Technical Debt&#8217;.<\/p>\n<p>Articulating the concept of &#8216;Technical Debt&#8217; has a number of important benefits:<\/p>\n<p>1) It puts a name on the category of &#8216;things we want to clean up in our code&#8217;, adds an urgency, and calls out more precisely why this is important.<\/p>\n<p>2) It links the concept of &#8216;do things the right way&#8217; with &#8216;Business&#8217; concepts of money.  This enables much better CTO-CFO conversations, allows better and more informed project funding decision making, and (hopefully) enables better and more structured funding for Technical Debt reduction[5].<\/p>\n<p>3) It enables conversations in the moment, during architecture conversations and code reviews (and everything in between), where the parties involved can directly weigh\/balance the time\/resource costs of proper implementation with the opportunity costs of delaying time to market (or MVI\/MVP[6]).<\/p>\n<p>It will be interesting to see how organizations (and organizational decision-making) change as this concept spreads from &#8216;pure&#8217; software companies.<\/p>\n<p>[1] We theorized that this was because he had grown up in Hardware companies.<\/p>\n<p>[2] I am not a Mechanical Engineer, and I&#8217;m happy to hear counterexamples, as well the conceptual frameworks used to address this&#8230; \ud83d\ude42<\/p>\n<p>[3] Such as &#8216;<a href=\"https:\/\/boats.gitlab.io\/blog\/post\/rust-2019\/\" target=\"_blank\">Organizational Debt<\/a>&#8216;.<\/p>\n<p>[4] <a href=\"https:\/\/www.martinfowler.com\/bliki\/TechnicalDebt.html\" target=\"_blank\">https:\/\/www.martinfowler.com\/bliki\/TechnicalDebt.html<\/a> &#8220;As far as I can tell, Ward first introduced this concept in an experience report for OOPSLA 1992. It has also been discussed on the wiki <a href=\"http:\/\/wiki.c2.com\/?ComplexityAsDebt\" target=\"_blank\">http:\/\/wiki.c2.com\/?ComplexityAsDebt<\/a>.&#8221;<\/p>\n<p>[5] My favourite label for this is the &#8216;FBI&#8217; list[7], as in &#8216;Can you F****** Believe It?&#8217;, passed down to me by an executive from a famous Canadian software company.<\/p>\n<p>[6] &#8216;Minimum Viable Increment\/<a href=\"https:\/\/en.wikipedia.org\/wiki\/Minimum_viable_product\" target=\"_blank\">Minimum Viable Product<\/a>&#8216;, from various implementations of Agile theory.<\/p>\n<p>[7] Things that might linger on a list like this include things filed &#8216;Too Dangerous to Fix&#8217;, which are often interesting memoir fodder.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A couple of years ago, I was talking with a good friend of mine, we were talking about the difficulties of prioritizing the maintainability of software in a large organization development context. And so, logically, the concept of &#8216;Technical Debt&#8217; came up. Interestingly, he had never heard the term before[1], although as soon as he &hellip; <a href=\"http:\/\/nayrb.org\/~blog\/2020\/01\/01\/on-the-importance-of-technical-debt\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">On the Importance of &#8216;Technical Debt&#8217;<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[33,12,26,37,30,8],"tags":[],"_links":{"self":[{"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/posts\/3726"}],"collection":[{"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/comments?post=3726"}],"version-history":[{"count":7,"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/posts\/3726\/revisions"}],"predecessor-version":[{"id":3750,"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/posts\/3726\/revisions\/3750"}],"wp:attachment":[{"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/media?parent=3726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/categories?post=3726"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/nayrb.org\/~blog\/wp-json\/wp\/v2\/tags?post=3726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}