Skip to content
Telemachus Blog
Go back

If It Ain't Broke, Don't Fix It!

How many times have you heard that phrase? Personally, countless, and I hate it!

But here’s what’s worse: the look on a developer’s face when they discover their ‘perfectly working’ application can’t deploy because a dependency they’ve ignored for three years just reached end-of-life. Software development is a difficult and time-consuming endeavor, made exponentially more challenging when technical debt accumulates like compound interest.

I am sure you have seen this picture…

2347: Dependency - explain xkcd

There is an interesting article about an engineer who deleted a microframework that broke the internet - the infamous left-pad incident of 2016. A single developer removed an 11-line JavaScript package from npm, causing thousands of projects worldwide to fail, including major platforms used by Facebook, PayPal, and Netflix. This wasn’t malicious - it was a dispute over package naming rights - but it perfectly illustrates how fragile our dependency chains can be.

I would like to focus on a smaller scale, i.e., your company’s/personal project, and why you shouldn’t fear change, but you should embrace it.

There are two schools in the trade “If it ain’t broke, don’t fix it” and “release early and often”. As everything in software is a trade-off, the right answer would be “It depends”, right?

Let me tell you a story about a product that perfectly illustrates this dilemma. Picture a codebase that had been around for several years - features were shipping regularly, users were genuinely happy, and the company was in full growth mode. On the surface, everything looked fantastic. But here’s the catch: every ounce of energy was focused on delivering new value to customers, while technical debt quietly accumulated in the shadows. Upgrades only happened when security vulnerabilities forced their hand. When those moments came, the team would buckle down, work overtime, and somehow muscle through the update process. Sure, it was painful and consumed way more time and effort than anyone wanted to admit, but they got it done.

As the years passed, packages reached end-of-life and needed immediate upgrades. Those packages were usually multiple major versions behind. How much time and effort does this take? A lot - with each major version, a package falls behind, the complexity increases exponentially. What could have been a routine 2-hour update becomes a week-long refactoring nightmare, potentially requiring architecture changes and extensive testing.

The beauty of the ‘release early and often’ approach isn’t in its speed - it’s in its sustainability. Yes, deliver that MVP quickly, but don’t let technical debt become the elephant in the room. Build systems that can evolve, not just systems that work today. Because in software development, the only constant is change, and the projects that embrace this reality are the ones that thrive in the long run

So here’s my challenge to you: Start small. Pick one project this week and audit its dependencies. Update that package that’s been nagging you in the back of your mind. Allocate 10% of your sprint capacity to technical debt - treat it as seriously as you treat new features. Your future self will thank you, and your 3 AM debugging sessions will become a thing of the past.


Share this post on:

Previous Post
Mistakes Are Punishable by... Deletion?