a·gen·tic a·gil·i·ty

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

Learn how to prevent bad code, distinguish technical debt from incompetence, and apply practical strategies like code reviews, testing, and prioritisation for healthier software.

Published on
3 minute read
Image
https://nkdagility.com/resources/FquWl26Uc8Y

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.

Subscribe

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.​

Lockheed Martin Logo

Lockheed Martin

Sage Logo

Sage

Slicedbread Logo

Slicedbread

SuperControl Logo

SuperControl

Illumina Logo

Illumina

Epic Games Logo

Epic Games

MacDonald Humfrey (Automation) Ltd. Logo

MacDonald Humfrey (Automation) Ltd.

Teleplan Logo

Teleplan

NIT A/S

Big Data for Humans Logo

Big Data for Humans

Boxit Document Solutions Logo

Boxit Document Solutions

Ericson Logo

Ericson

Schlumberger Logo

Schlumberger

CR2

Jack Links Logo

Jack Links

Xceptor - Process and Data Automation Logo

Xceptor - Process and Data Automation

Brandes Investment Partners L.P. Logo

Brandes Investment Partners L.P.

Genus Breeding Ltd Logo

Genus Breeding Ltd

Department of Work and Pensions (UK) Logo

Department of Work and Pensions (UK)

Washington Department of Transport Logo

Washington Department of Transport

Nottingham County Council Logo

Nottingham County Council

Ghana Police Service Logo

Ghana Police Service

New Hampshire Supreme Court Logo

New Hampshire Supreme Court

Royal Air Force Logo

Royal Air Force

Jack Links Logo

Jack Links

Sage Logo

Sage

Higher Education Statistics Agency Logo

Higher Education Statistics Agency

Trayport Logo

Trayport

Illumina Logo

Illumina

Boeing Logo

Boeing