DESIGN & COMMUNICATION
TECH & DEVELOPMENT
BUSINESS OPERATIONS
STRATEGY, TALENT & MANAGEMENT
The system didn’t crash because of bad code. It crashed because no one maintained the library it depends on. In this article, Emanuel Palm explains why even high-quality systems can fail and how you can reduce the risk.
Imagine this: Production is down. Systems aren’t responding. Every minute costs money. People are struggling to fix it. Leadership demands answers. And somewhere, deep in your tech stack, a critical component is failing. Every fix leads to more errors. And the vendor? Gone. No support agreement. No backup plan. No options.
The root cause? Not bad code. Not poor design. Not even bad management. The real problem is simple: the system was unmaintained.
Even when you build software in-house, you rarely build everything from scratch. Most systems depend on a wide range of external components, such as open-source libraries, APIs, cloud platforms, all maintained by others. These dependencies often go unnoticed – until they break.
Misaligned interests are the real problem
Every system exists to fulfil a purpose – commercial, technical, or other. As long as that purpose aligns with the priorities of those maintaining it, the system continues to function. But the components you depend on have their own lifecycles, maintained by teams with their own goals. When their priorities shift, and no longer align with yours, these components may be updated in ways that no longer suit your needs – or stop evolving entirely.
That’s when dependencies become structural risks. Every dependency carries an assumption: that it will continue to be maintained, and that its evolution will stay compatible with your own direction. But when interests diverge, maintenance slows, changes become disruptive, or support disappears – your system weakens, often without notice or warning.
A system can be well-built and still become fragile over time. As components age, are neglected, or evolve in the wrong direction, the system gradually loses stability. Organisations often continue to rely on these systems, unaware of how fragile they’ve become – until a failure makes it undeniable.
Unmaintained doesn’t mean poor quality – it means forgotten
You might argue that bugs, security vulnerabilities, poor interfaces, or missing features are the biggest risks in a software project. And yes – these issues matter. But as long as someone is actively maintaining the system, they can usually be managed.
The greater risk is neglect. When no one is responsible for a component – because it’s no longer prioritised, funded, maintained, or aligned with current needs – even high-quality code becomes a liability.
And that’s not a technical problem. It’s a people problem. Often, it is also a money problem.
Dependency risk is a strategic challenge
You don’t need to control every component – but you must take responsibility for how they fit into your architecture and long-term plans.
From a business perspective, unmanaged dependencies may lead to:
– Downtime and operational disruption
– Increased support costs and technical debt
– Security vulnerabilities without clear patch paths
– Loss of customer trust and brand reputation
What can you do?
Managing dependencies isn’t just version control – it’s a form of strategic risk management. Here’s how resilient organisations can reduce the risk:
Evaluate and monitor critical dependencies – know what you rely on, who maintains it, and how well it’s supported
Ensure strategic alignment – confirm that key components evolve in ways compatible with your goals
Prepare fallback options – design for modularity, invest in redundancy, and secure support agreements where needed
Avoid unnecessary complexity – only integrate components that deliver real, long-term value
Actively maintain what matters – especially high-impact dependencies that sit close to your core business logic
Final thoughts
You may not control every part of the systems you rely on – but you are responsible for understanding them.
Dependencies rarely fail overnight – they drift. Slowly and silently. But when they break, they often bring systems down with them. And when this happens, you may find yourself in dependency hell – and yes, it’s a real place.
How do you assess when a system or component has become too risky to rely on?
June 2, 2025
Emanuel Palm started to work with software development in 2006. He has since worked as mobile app developer, doctoral researcher and system architect, among other things. Emanuel is currently a consultant and competence lead at Nexer Group, supporting clients with his broad expertise in systems engineering and deep programming skills.