From Technical Debt to Sustainable Software: Dealing with Legacy Requires Ownership, Vision, and Perseverance
Harry ten Berge
—
Culture

Written by
Legacy is rarely just a technical problem
Anyone who has been in software development for a while knows the moment when a system starts to “lock up.” New functionality becomes harder to add, new features cause regressions, and no one dares to touch certain modules anymore. The term ‘legacy’ pops up. Not as a technical term, but as a collective feeling: we’re stuck.
In these situations, the pattern is often familiar. Engineers are frustrated and have been saying for years that it “needs to be rebuilt.” The business is annoyed by the technical complaints — “why are they always making things difficult?” — and the C-level management? They mostly feel out of control.
What follows is a deadlock. Everyone is right and yet nothing moves forward.
The fundamental problem? We still treat legacy too often as a technical issue, while at its core it’s an organizational challenge. Technical debt sounds technical, but if you look at the term, the word ‘debt’ is there for a reason. We’ve taken a loan from the future, and now we can’t pay the interest anymore.
That’s a financial and strategic problem, not purely a technical one.
What we also see often: the business underestimates its role. Much of technical debt doesn't stem from bad code, but from years of functional pressure, rarely asking the question: “Should this even be part of the product?” What started as a quick exception is now part of the codebase. A sum of exceptions without vision doesn’t form a strategy, it creates chaos.
On the other hand, engineers often struggle to communicate their story well. “We need to start over” is often the signal but with decades of accumulated complexity, that’s rarely realistic. And certainly not safe.
So the first step in any legacy challenge is not about code, but communication. Understanding. And a shared acceptance that the situation is complex and won’t be fixed quickly.
Repositioning and Culture Change: the Two Paths to Recovery
Once teams realize that legacy isn’t just a technical problem, but a shared challenge, space opens up. Space for action, but especially for two parallel tracks: product repositioning and culture change.
Repositioning: Back to the Core
In nearly every legacy case, we hear the same sentence: “The product went in every direction.” And that’s usually true. Years of “just quickly,” “just add it,” and “this is important for this client” have stretched the product into something no one fully understands, let alone controls.
That’s why recovery starts with a clear repositioning. Not by locking everything down, but by jointly redefining what the product is actually for. What is the core? What are the fundamental principles on which decisions are made? What do we build and more importantly: what don’t we?
This isn’t just a task for product management. Good repositioning arises in dialogue with development, sales, and support. Because making sustainable choices also means: aligning expectations. What you promise customers must match what you can build and maintain and that’s where the conversation begins.
💬 “Without a shared product vision, every roadmap becomes a reaction to urgency.”
Culture Change: Restoring Ownership
Just as important, but often more difficult, is the second track: developing a different engineering culture.
In legacy environments, we often see teams stuck in a kind of reactive mode. Building features, fixing bugs, moving fast. It sounds productive, but under the hood, the system clogs up. Maintenance gets postponed. Architecture loses balance. And no one has the space to reflect on better ways of working.
The key here is: restoring ownership. Not just over code, but over the entire product mindset. That means:
- Refactoring is something you do continuously, not as a project.
- Technical decisions consider the future, not just the present.
- Communication with stakeholders is not a side task, but a strategic tool.
This requires new habits: retros that include technical evaluations, joint decision-making on design choices, reflection on tooling and processes. Not for the sake of control, but from a place of craftsmanship. Engineers need to feel the space to say: “This can be better” and to actually make it better.
That only works in a culture of psychological safety. Where there’s room for doubt, feedback, experimentation. Where focus isn’t just on output, but also on how that output is achieved.
Without that cultural shift, you keep building on the outside, while the foundation slowly crumbles.
Perseverance Is Where the Real Work Begins
The good news: once these two tracks get moving, energy often follows. Teams feel more empowered, initiative returns, motivation rises. Conversations between departments become more constructive. There’s perspective again.
But that moment is also fragile. Because the pressure always comes back. A customer threatens to leave. A strategic roadmap takes priority. Someone says: “We need a solution now.” And before you know it, the old reflexes return. Focus gone. Balance gone. Back to reactive mode.
That’s why perseverance in the new direction may be the most important step and at the same time, the least popular.
Perseverance means defending your principles. Saying “no” to functionality that undermines the foundation. Continuing to invest in technical health, even when the return isn’t immediately visible on paper. And keeping the conversation going between tech, business, and product, even when it’s uncomfortable.
Perseverance also means: allowing mistakes. Trying things that don’t work. And then choosing again. Reflecting. Refining. Not because failure is the goal, but because learning can only happen when you don’t revert to the old model at the first sign of trouble.
💬 “You fall back. You recover. You move forward. That’s not failure, that’s change.”
Ultimately, it all starts with ownership. Not as an abstract concept, but as a daily practice. Teams that feel ownership make better decisions. Build with more vision. Work with more joy. And ultimately deliver better software.

