Confronting Incompetence: How to Stop Shipping Bad Code and Tackle Technical Debt Effectively

Published on
3 minute read

I’ve been in the trenches of software development long enough to know that we all have our moments of weakness. I’ve written bad code and shipped it. And let’s be clear: that’s not just technical debt; that’s incompetence. It’s a hard truth, but one that we must confront if we want to grow as developers and as teams.

Understanding Technical Debt

In the context of a competent team, we can differentiate between known technical debt and unknown technical debt. Known technical debt is the stuff we acknowledge—those areas of our codebase that we know need refactoring or improvement. On the other hand, unknown technical debt lurks in the shadows, waiting to rear its ugly head when we least expect it.

But there’s another layer to this conversation. We often conflate technical debt with simply shipping bad code. This is a dangerous mindset. When we knowingly make poor choices and then choose to ignore them, we’re not just accumulating technical debt; we’re actively undermining our own work.

The Cost of Bad Code

So, how do we address this? The first step is to stop shipping bad code. It sounds simple, but it requires a commitment to quality and a willingness to hold ourselves accountable. Here are a few strategies that have worked for me:

  • Code Reviews: Implement a robust code review process. This not only helps catch issues before they make it to production but also fosters a culture of collaboration and learning within the team.

  • Automated Testing: Invest in automated tests. They serve as a safety net, allowing you to catch regressions and ensure that your code behaves as expected.

  • Refactoring: Make refactoring a regular part of your development process. Don’t wait for a major release to clean up your code; do it incrementally.

Prioritising Technical Debt

Now, let’s talk about the technical debt we do have. It’s crucial to prioritise paying it back. Think of technical debt more like an unhedged fund rather than a credit card debt. Most debts are secured against something tangible. For instance, if you stop paying your mortgage, the bank can repossess your house. In contrast, technical debt is more abstract. If we ignore it, we risk losing the very foundation of our codebase.

Here’s how I approach the repayment of technical debt:

  • Identify and Document: Keep a running list of known technical debt. This should be a living document that evolves as your project does.

  • Prioritise: Not all technical debt is created equal. Some issues will have a more significant impact on your project than others. Use a scoring system to prioritise which debts to tackle first.

  • Allocate Time: Make it a point to allocate time in your sprints specifically for addressing technical debt. This ensures that it doesn’t get pushed to the back burner.

Conclusion

In conclusion, we must take responsibility for the code we ship. By recognising the difference between technical debt and incompetence, we can make more informed decisions that lead to better outcomes. Let’s commit to quality, prioritise our technical debt, and ultimately, create a codebase we can be proud of. After all, the goal is not just to ship code but to ship code that stands the test of time.

I’ve written bad code and shipped it. That’s not technical debt; that’s incompetence. Right? So, within the context of a competent team, there’s known technical debt and unknown technical debt. But there’s another thing that we call technical debt, which is just shipping bad code, making poor choices, knowing that they’re poor choices, and not doing anything about it. Right? Shipping bad code. Stop shipping bad code would be the way you pay that one back.

But for technical debt, you need to pay it back. You need to prioritise paying back that technical debt. Think of it more as an unhedged fund rather than a debt like a credit card. Most debt is secured against something, secured against an asset. If you stop paying your mortgage, then the bank comes and repossesses your house and gets their money back, right? And maybe you get some leftovers because you’ve paid some of your mortgage.

Technical Debt Technical Mastery

Connect with Martin Hinshelwood

If you've made it this far, it's worth connecting with our principal consultant and coach, Martin Hinshelwood, for a 30-minute 'ask me anything' call.

Our Happy Clients​

We partner with businesses across diverse industries, including finance, insurance, healthcare, pharmaceuticals, technology, engineering, transportation, hospitality, entertainment, legal, government, and military sectors.​

Milliman Logo
Boxit Document Solutions Logo
ProgramUtvikling Logo
Graham & Brown Logo
Hubtel Ghana Logo
Brandes Investment Partners L.P. Logo
ALS Life Sciences Logo
Bistech Logo
MacDonald Humfrey (Automation) Ltd. Logo
SuperControl Logo
Jack Links Logo
Schlumberger Logo
Boeing Logo
Lean SA Logo
Freadom Logo
DFDS Logo
Workday Logo
Deliotte Logo
Washington Department of Transport Logo
Ghana Police Service Logo
Washington Department of Enterprise Services Logo
Royal Air Force Logo
New Hampshire Supreme Court Logo
Department of Work and Pensions (UK) Logo
Kongsberg Maritime Logo
SuperControl Logo
Slaughter and May Logo
Epic Games Logo
Teleplan Logo

NIT A/S