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âŚ

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.