All code is technical debt | TokyoDev

One-liner

Paul McMahon argues that all code can be considered technical debt, emphasizing the importance of value over volume in software development.

Synopsis

Understanding Technical Debt

Technical debt is compared to a financial loan: it can provide an initial boost in development speed at the cost of future efficiency. Just as loans come with the burden of interest, technical debt makes future development slower. McMahon stresses that while technical debt can be a strategic tool, it can also cripple development if it becomes excessive.

The Inevitability of Slowdown

McMahon reflects on the allure of starting a project without technical debt, noting the rapid pace of feature development. However, as an application grows, so does its complexity, which invariably slows down development speed.

Accumulation of Assumptions

With maturity comes a network of 'code assumptions', where each new feature must align with existing ones. McMahon uses his experience with Doorkeeper to illustrate how adding seemingly simple features like attendance caps and waitlists can complicate development due to the underlying assumptions they build upon.

Avoiding Negative Value Features

Some features may seem beneficial but can introduce more technical debt than value, using localization as an example. McMahon suggests that poorly executed, half-hearted attempts at localization can slow down development for little return, resulting in negative value.

Value vs. Code

McMahon challenges the notion that the act of writing code inherently adds value. Instead, the usefulness of the software to users is what truly matters, and developers should concentrate on implementing valuable features rather than writing code for its own sake.

Durability of Features

Once a feature is established, it often remains due to reasons like the sunk cost fallacy and reluctance to upset customers, making the removal of features a rare occurrence.

Strategies to Minimize Debt

McMahon endorses a minimalist approach to writing code, advocating for leveraging existing tools and features to fulfill needs while minimizing the introduction of new assumptions.

Recap and Call to Action

In closing, while recognizing code as necessary technical debt, developers are urged to defend their products against superfluous features and focus on creating truly valuable software.

Key quotes

  1. "As the more code you add to an application, the slower development becomes, I view all code as technical debt."
  2. "For a feature to add value to your product, it needs to be useful to users. Features can have a negative value when the technical debt they add to your product outweighs the value they add to it."
  3. "The only sure-fire way of avoiding technical debt is to not write code in the first place."

Make it stick

  1. "Technical debt acts like a loan – borrow time now, repay with slower development later."
  2. "Code quantity doesn't equate to value – user utility trumps elegant coding."
  3. "New code is future slow-down; value-driven development is key."

Talking points

  1. "I was surprised that the application’s maturity and the accumulation of underlying assumptions can make simple feature additions quite complex."
  2. "What are your thoughts on the idea that localisation can often create more technical debt than it's worth if not implemented effectively?"
  3. "Did you know that once a feature is added to a software, it tends to become permanent, even if it doesn't perform well or prove useful in the long term?"
This summary contains AI-generated information and may have important inaccuracies or omissions.