1. Most Technical Debt Is Just Bullshit

    Fri 25 September 2020

    Introduction

    I made an offhand remark about technical debt to a friend and he interrupted me, saying: "technical debt is just bullshit". In his experience, people talking about technical debt were mostly trying to:

    • cover up bad code
    • cover up unfinished work

    mess

    source1

    Calling these issues 'technical debt' seems to be a tactic of distancing oneself from these problems. A nice way of avoiding responsibility. To sweep things under the rug.

    Intrigued, I decided to take a better look at the metaphor of techical debt, to better understand what is actually meant.

    Tip: this article on Medium by David Vandegrift also tackles this topic.

    A definition of technical debt

    Right off the bat, I realised that my own understanding of technical debt was wrong. Most people seem to understand technical debt as:

    "cut a corner now, to capture short-term business value (taking on debt), and clean up later (repaying the debt)".

    I think that's wrong.

    Ward Cunningham, who coined the metaphor of technical debt, wrote:

    You know, if you want to be able to go into debt that way by developing software that you don't completely understand, you are wise to make that software reflect your understanding as best as you can, so that when it does come time to refactor, it's clear what you were thinking when you wrote it, making it easier to refactor it into what your current thinking is now.

    In some sense, this reads to me as a form of prototyping. To try out and test design/architecture to see if it fits the problem space at hand. But it also incorporates the willingness to spend extra time in the future to change the code to better reflect the current understanding of the problem at hand.

    ... if we failed to make our program align with what we then understood to be the proper way to think about our financial objects, then we were gonna continually stumble over that disagreement and that would slow us down which was like paying interest on a loan.

    The misalignment of the design/architecture and the problem domain creates a bottleneck, slowing down future development.

    So I think it's clearly not about taking shortcuts for a short-term business gain.

    It is more a constant reinvestment in the future. It may temporary halt feature work, but it should result in more functionality and features in the long run. It doesn't seem short-term focussed at all to me. And you need to write 'clean' code and do your best because it is likely that you will have to rewrite parts of it.

    These two articles by Ron Jeffries already discuss this in great detail.

    A logical error

    Reading up on the topic, I noticed something very peculiar. Somehow along the way, everything that hinders software development has become 'technical debt'.

    Anything that creates a bottleneck, is suddenly put into the basket of technical debt. I started to get a strong sense that a lot of people are somehow making a logical fallacy.

    If you have technical debt, you'll experience friction when trying to ignore it and just plow ahead. The technical debt creates a bottleneck.

    But then people reason the wrong way around: I notice a bottleneck in my software development process, so we have 'technical debt'.

    However, because technical debt creates a bottleneck, it doesn't follow that every bottleneck is thus technical debt.

    I think it's this flawed reasoning that turns every perceived obstacle into technical debt2.

    Maybe I'm creating a straw man argument, but I think I have some examples that show that people are thinking the wrong way around.

    If we look at the wikipedia page about technical debt, there is a long list of possible causes of technical debt.

    To site some examples:

    • Insufficient up-front definition
    • Lack of clear requirements before the start of development
    • Lack of documentation
    • Lack of a test suite
    • Lack of collaboration / knowledge sharing
    • Lack of knowledge/skills resulting in bad or suboptimal code
    • Poor technical leadership
    • Last minute specification changes

    Notice that these issues are called 'technical debt' because they can have a similar outcome as technical debt. They can create a bottleneck.

    But why the hell would we call these issues technical debt?

    These issues are self-explanatory. Calling them technical debt not only seems inappropriate, it just obfuscates the cause of these problems and it doesn't provide any new insight. Even in conversations with laypeople.

    A mess is not a Technical Debt

    A blogpost by Uncle Bob with the same title3 also hits on this issue that a lot of issues are incorrectly labeled as 'technical debt'.

    Unfortunately there is another situation that is sometimes called “technical debt” but that is neither reasoned nor wise. A mess.

    ...

    A mess is not a technical debt. A mess is just a mess. Technical debt decisions are made based on real project constraints. They are risky, but they can be beneficial. The decision to make a mess is never rational, is always based on laziness and unprofessionalism, and has no chance of paying of in the future. A mess is always a loss.

    Cunningham's definition of technical debt shows that it's a very conscious and deliberate process. Creating a mess isn't. It's totally inappropriate to call that technical debt. It's just a mess.

    I think that nicely relates back to that earlier list from wikipedia. Just call things out for what they actually are.

    Is quibbling over 'technical debt' as a metaphor missing the point?

    In this blogpost, Martin Fowler addresses the blogpost by Uncle Bob and argues that technical debt as a metaphor is (still) very valuable when communicating with non-technical people.

    He even introduces a quadrant:

    RecklessPrudent
    Deliberate"We don't have time for design""We must ship now and deal with consequences (later)"
    inadvertent"What's Layering?""Now we know how we should have done it"

    This quadrant makes me extremely suspicious. Because in this quadrant, everything is technical debt. He just invents different flavours of technical debt. It's never not technical debt. It's technical debt all the way down.

    It seems to me that Martin Fowler twists the metaphor of technical debt into something that can never be falsified, like psychoanalysis.

    It's not 'bad code', a 'design flaw' or 'a mess', it's 'inadvertent & reckless technical debt'. What is really more descriptive of the problem?

    Maybe it's just my lack of understanding, but I fail to see why it is in any way helpful to call every kind of bottleneck 'technical debt'. I again fail to see how this conveys any meaning.

    In the end, what Fowler does is just pointing out that bottlenecks in software development can be due to the four stages of competence.

    IncompetenceCompetence
    Concious"We don't have time for design""We must ship now and deal with consequences (later)"
    Unconscious"What's Layering?""Now we know how we should have done it"

    I don't think we need new metaphors for things we (even laypeople) already understand.

    Does technical debt (even) exists?

    The HFT Guy goes as far as to argue that technical debt doesn't really exists, it isn't a 'real' concept.

    After decades of software engineering, I came to the professional conclusion that technical debt doesn’t exist.

    His argument boils down to the idea that what people call technical debt is actually mostly maintenance.

    So reincorporating a better understanding of the problem at hand into the code (design) is seen as an integral and natural part of software development, illustrated by the substitute metaphor of mining (alternating between digging and reinforcing). At least that's how I understand it.

    Substituting one metaphor with another, how useful is that really? But in this case it's at least less generic and more precise.

    Closing words

    Although Cunningham meant well, I think the metaphor of technical debt started to take on a life of its own. To a point where code that doesn't conform to some Platonic ideal is called technical debt4.

    Every mistake, every changing requirement, every tradeoff that becomes a bottleneck within the development process is labeled 'technical debt'. I don't think that this is constructive.

    I think my friend was right: the concept of technical debt has become bullshit. It doesn't convey any better insight or meaning. On the contrary, it seems to obfuscate the true cause of a bottleneck.

    At this point, when people talk about technical debt, I would be very sceptical and would want more details. Technical debt doesn't actually explain why we are where we are. It has become a hollow, hand-wavy 'explanation'.

    With all due respect to Cunningham, because the concept is so widely misunderstood and abused, it may be better to retire it.


    1. I discovered this image in this blogpost

    2. if you are not working on a new feature, you are working on technical debt. 

    3. I think that Uncle Bob's definition of technical debt in this article is not correct. He also defines it basically as cutting corners for short-term gain. 

    4. See again Martin Fowlers article about technical debt. 

    Tagged as : None
  2. Cryptocurrencies Are Detrimental to Society

    Fri 27 March 2020

    Want to listen to this article?

    Introduction

    How would you explain the inner workings of bitcoin to a person in simple, understandable terms?

    twitterimage

    source

    This explanation seems perfect to me because it illustrates some seriously problematic aspects of cryptocurrencies in one simple sentence.

    It captures the unimaginable energy waste of mining cryptocurrencies. And it also captures the dark side of cryptocurrencies: facilitating crime.

    At this point cryptocurrency enthusiasts are rolling their eyes and sigh. This point has been made many times over. I know, I'm definitely not the first to criticise cryptocurrencies1 this way.

    I do have a simple challenge though:

    Can you please show me the benefit to society of cryptocurrencies?

    Please, don't come up with theoretical or future possibilities. Cryptocurrencies have existed for eleven years, they should have something to show for right now. After many hours of reading up on the topic, I have not been able to find any tangible benefits that would justify the effort and resources spend on them.

    The downsides of cryptocurrencies are an entirely different matter. They are very, very clear to me. But let's not go there directly. What fun would that be?

    The solution in search of a problem

    As I see it, cryptocurrencies are entangled in a desparate search for a problem to solve. They are the answer to a question nobody asked2.

    Many cryptocurrency advocates see the decentralised (distributed) nature of cryptocurrencies as a tangible benefit. Cryptocurrencies are most often not controlled by any government or single entity.

    Aside from whether this is true in practice3, they seem to imply that it's a bad thing that governments control their own currencies. Well, last time I checked governments control their currencies to keep them as stable as possible. Frankly, that actually sounds like exactly what I would want from a currency.

    Stability.

    You can call cryptocurrencies many things but 'stable' is definitely not one of them. Cryptocurrencies are highly volatile. In cryptocoin, a loaf of bread could suddenly cost twice as much as the day before.

    Although cryptocurrencies haven't seen any significant adoption as a payment method - due to their volatility - it has seen adoption in 'less stable countries' where it is basically the 'lesser of two evils'. I mean: you know things are bad if a volatile cryptocurrency is a safer option than the native currency of your country.

    The argument in the end boils down to: if your society is already in serious trouble, maybe cryptocurrencies could provide 'some benefit'. If the people involved have reliable access to internet. And internet access is most often controlled by the government.

    To my knowledge, cryptocurrency as a payment method has actually only seen true adoption within the world of dark markets such as Silk Road in wich bitcoin rose to prominence. Nonetheless, after eleven years, cryptocurrencies have no traction in the regular 'legitimate' markets as a real payment method.

    The reason why is obvious: existing payment methods are much easier to use and feel much safer. And the volatility of cryptocurrencies only compounds to the support of these conventional methods.

    If cryptocurrencies are a solution to anything at all they seem to be 'bad' solutions at best.

    Are cryptocurrencies in fact a Ponzi or Piramid scheme?

    It depends on the particular currency, but I think the case can be made for sure. I mean: why not both?

    Cryptocurrencies have no intrinsic value. They are only worth what people are willing to pay for them. So the cryptocurrency advocates needed to drum up demand, to create a market where previously none existed. This resulted in wild visions of the future, elaborate jargon-filled smokescreens that argue cryptocurrencies would take over the world. Get in quickly or you miss out!

    And so many people were afraid to miss out, creating an enormous cryptocurrency hype, starting in November of 2017, spilling into 2018 when the bubble burst. The end result? A few people got very rich and the vast majority lost money.

    It seems to me this all is a combination of a ponzi scheme with the component of active recruitment found in piramid schemes. The value of the currencies must come from somewhere, right?

    So please tell me how all of this benefits our society? Creating a handful of rich people at the expense of a lot of other people? Is that it?

    The graveyard of dead cryptocurrencies only shows how many people or startups try to get a piece of the action. And so many of them are outright scams. Are in fact all cryptocurrencies scams at their core?

    The downsides of cryptocurrencies

    I hope I have established that cryptocurrencies provide no tangible benefits to society. But the do have a lot of downsides. I observe the following:

    TopicRemark
    Trafficing of illegal goodsDrugs, weapons, childpornography, and so on.
    Trafficing of illegal servicesMurder for hire
    Tax evasion-
    Money laundering-
    RansomwareHold data hostage in encrypted form
    Polution / energy wastecrypto miners use a lot of electricity
    Lack of Securityseveral cryptocurrency exchanges have been hacked
    Crypto scamsNew cryptocoins are created just to scam people

    The easy retort to this table is: "'normal' currencies like the dollar or euro also facilitate almost all of those illegal things", which is true but it misses the larger point.

    Those regular currencies provide tremendous value to our societies. Our societies are build upon them and they facilitate almost everything we do. The topics listed in the table are just a possible negative side-effect for regular currencies. Their clear benefits outweighs such downsides.

    Cryptocurrencies don't seem to have any such upsides. They seem to be made to exclusively facilitate cryptocurrency speculation and crime.

    Cryptocurrencies facilitate crime

    I won't discuss all the topics in the previous table but I do want to highlight a few.

    Dark markets

    I think we all remember Silk Road, a now defunct darknet marketplace that allowed people to anonymously buy - amongst other things - drugs and guns4. Silk Road was the first large-scale application of bitcoin as a means of payment.

    Silk Road started out with just drugs, but guns soon followed. This deeply depraved world of dark markets are very much enabled by cryptocurrencies because the parties involved in a transaction are so hard to identify.

    Ransomware

    Ransomware seems to be almost exclusively enabled by digital currencies. Not explicitly just cryptocurrencies, but they do enable this type of crime because tracing the payments back to the criminal is so difficult.

    The damage caused by ransomware is so obviously devastating. You can have many opinions on the fact that many critical organisations such as hospitals or universities don't have their computer security under control.

    The real problem is that cryptocurrencies make these kinds of attacks on businesses and institutions very low-risk and highly profitable. In my own country a university was targeted by such an attack and allegedly they paid the ransom. The disruption to its services was substantial.

    Energy waste

    As cryptocurrencies rose in value, it started to become profitable to 'mine' them. It started out with regular computers, but soon, we could use videocards to accelerate cryptocurrency mining, which are very power hungry.

    Later on, FPGAs and ASICS were build to further accelerate mining performance. Entire companies spun up to build those miners and host them in large datacenters with cheap electricity. The scale of the operation is rather enormous.

    According to an article dating to July 2019, just bitcoin mining consumes more electricity than Switzerland. The article links to an online tool that tracks this power usage in real-time based on some estimates.

    mf

    Image source

    It's just mind boggling to me that so much energy is wasted, so much pressure is put on the environment, for absolutely no clear benefit at all.

    Closing words

    So in short, I think that cryptocurrencies provide nothing of value to society. They do however facilitate crime and contribute to climate change.

    Therefore, I would propose to shut them all down.

    The complex technology behind the cryptocurrencies attracted a lot of otherwise smart people and I think it's a sad thing to see their efforts going to waste or have a negative impact.

    People are not obliged to work on something valuable, but at least may I ask that they choose to work on something that won't harm our society?

    Link to hackernews, where this post was quickly flagged down. The few comments that exist don't seem to really provide any answers to the question I pose.


    1. I would definitely recommend reading this long-form-article by The New York Times. 

    2. Unless you want to embark on a path of criminal activity. 

    3. As mining is no longer profitable for the larger community, the miners become a small concentrated group of entities controlling the currency, making the currencies more centralised. Furthermore, the cryptocurrency exchanges where you can convert the cryptocurrency into regular money, are centralised institutions backed by for-profit companies. And those companies have to abide by the law. They are under the influence of the government. 

    4. If you want to know more about what happend to Silk Road and it's founder - 'the Dread Pirate Roberts', I would recommend the book 'American Kingpin' by Nick Bilton. (no affiliate links) 

    Tagged as : None

Page 1 / 1