The struggles of a developer working with legacy applications

The struggles of a developer working with legacy apps

In the fast-paced world of software development, shiny new frameworks, programming languages, and tools are always tempting. Developers love the idea of starting with a clean slate and building cool new applications with cutting-edge technology. But the reality? A large portion of developers spend a significant amount of their time wrestling with legacy applications—old, bulky codebases written in languages or frameworks that now feel antiquated. It's a challenge, but one that shapes a developer's skills and mindset in ways you might not expect.

Imagine this: you start a new job, full of enthusiasm to work with modern technologies. And then—bam!—you're immediately thrown in at the deep end with a monolithic application, built with tools that were already obsolete before your career began. It's anything but unusual, and enthusiasm quickly turns to frustration. The code is a mess, thousands of lines long, with hardly any documentation to be found, and every change feels like a game of Jenga—one wrong move and the whole structure collapses.

The numbers don't lie: legacy code is everywhere

Legacy systems are not just an occasional headache for developers—they make up a huge part of the software landscape. Research even shows that 60–80% of IT budgets at large organizations are spent on maintaining legacy systems.

According to a survey by Stripe and Harris Poll, developers spend more than 40% of their time on what is considered "bad code"—which often includes legacy codebases. This means that nearly half of a developer's productivity is spent fixing, maintaining, or dealing with old systems, rather than building new functionality.

A 2018 report by Deloitte also showed that 74% of organizations still rely on legacy applications for their daily operations. The reason for this is simple: legacy systems are often deeply intertwined with core business processes, making them difficult to replace.

So even if you are a developer just starting your career, there is a good chance that legacy systems will also be part of your future.

The loneliness of legacy code

Working with legacy systems can feel like being stranded on a desert island. There is often little to no documentation, and if you don't have an experienced team to help you get started, you're stuck reverse-engineering the application all by yourself. It's easy to start doubting yourself. "Am I the only one who doesn't understand this?"—that thought quickly comes to mind. But believe me: everyone has been there at some point.

And then there is the concern about your career. Working with old technology for too long can feel like a dead end. You start to wonder: "What if I get stuck here? Will future employers think I'm behind the times?" The sector is developing rapidly, and the fear of being pinned down to legacy technology is very real.

A real-life example: the COBOL crisis

One of the most famous examples of the struggles with legacy systems took place in 2020, during the COVID-19 pandemic. In the United States, the unemployment systems of several states—many of which were built with COBOL, a programming language from the 1950s—were unable to handle the sudden spike in applications. COBOL was once cutting-edge, but by the 2020s, few developers knew how to work with it.

When the number of unemployment claims skyrocketed, states such as New Jersey and Connecticut panicked in their search for developers who could maintain and repair these legacy systems. Some states even made emergency calls to retired developers who still had COBOL knowledge. This crisis made it painfully clear what the consequences of dependence on outdated technology are.

The inability to quickly scale up or adapt these legacy systems cost the government a lot of time and money, and caused delays in financial support for millions of people. This example shows that legacy systems are not just an inconvenience—they can be crucial to business or government processes. And when they fail, the impact is enormous, with no easy solution without in-depth knowledge of the old technology.

The unique challenges of legacy systems

One of the worst things about legacy systems? The documentation (or lack thereof). Most of these systems have evolved over the years, with multiple developers making small changes along the way. If you're lucky, there's a README file that was updated sometime in the last decade. If you're unlucky, you'll have to figure out how everything works by wading through endless lines of spaghetti code.

Legacy systems often rely on frameworks or programming languages that are no longer supported or widely used. Working with technology that has had its day makes everything more difficult—expanding features, fixing bugs, or even finding online help. StackOverflow won't be much help if you're working with something that now feels prehistoric.

Years of quick fixes and band-aid solutions turn code into an inextricable tangle, often referred to as "spaghetti code." The behavior is unpredictable: you change one part and something completely unrelated breaks. Technical debt—the accumulated backlog of work caused by always choosing the easiest solution—piles up, making each new change riskier than the last.

On top of that, there is often pressure from stakeholders to keep adding new features. Innovation is difficult when the underlying system is so fragile that even a small change can break everything. You are constantly walking a tightrope, balancing between the need for new functionality and the limitations of the existing system.

Turning legacy challenges into strengths

Despite all the headaches, working with legacy code isn't all bad. In fact, it can hone your skills in ways you rarely encounter in newer projects. When navigating a legacy system, you are forced to think critically. You become skilled at reverse engineering functionality, understanding complex code, and devising creative solutions within the limitations of the system. These are problem-solving skills that are valuable everywhere.

Legacy code really tests your patience. There are problems with no quick fixes, and Google doesn't always have the answer. You learn to work more calmly, to really understand the system, and to accept that you don't know everything right away. And that's okay. This process makes you more patient and more open to continuing to learn.

Maintaining old systems is just as valuable (and necessary) as building new ones. Legacy systems give you a close-up view of the long-term consequences of technical choices. This makes you a more conscious developer when writing new code: you don't just think about what works today, but also about maintainability in the future.

In addition, legacy systems often run critical business processes. By working on them, you gain insight into how the organization functions and why certain technical choices were made in the past. That historical perspective helps you communicate better with stakeholders and make more informed decisions in the future.

How to deal with legacy systems and thrive in them

Completely rewriting a legacy system is usually impractical and risky. Instead, focus on refactoring it step by step. Make the code cleaner and more maintainable bit by bit. By gradually adding unit tests, you reduce the chance of breaking things along the way.

Do you work with little to no documentation? Then create your own documentation. It doesn't have to be an extensive manual, but simple comments, a README, or a few diagrams will help both you and future developers enormously.

Even in a legacy environment, there is room for improvement. Start by introducing modern working methods such as CI/CD pipelines, version control (if not already in place), and clear coding standards. These small changes can have a big impact on the workflow and help to slowly modernize the system.

And remember: you are not alone. Seek out collaboration with more experienced developers and don't be afraid to ask questions. Pair programming or code reviews can provide new insights and accelerate the learning process. Don't let working with legacy systems prevent you from keeping up to date. Continue to hone your skills with side projects, online courses, or contributions to open source. This will keep your resume current and prevent you from feeling stuck in the past.

Conclusion: finding value in legacy code

Yes, working with legacy systems can be tough, but it's also an opportunity. The skills you develop while navigating old code make you a stronger and more versatile developer. You learn to solve complex problems, build maintainable systems, and gain a deep understanding of the complexity of software development.

So embrace the challenge. Every experienced developer has faced the trials of legacy code, and often it is precisely that experience that sets them apart. Persevere, and you will not only emerge as a better programmer but perhaps even a little wiser.

Stay informed
By subscribing to our newsletter, you declare that you agree with our privacy statement.

Any questions? Contact us!

jonah.sanderse
Jonah Sanderse

Let's talk!


Any questions? Contact us!

* required

By submitting this form, you confirm that you have read and understood our privacy statement.
Privacy overview
This website uses cookies. We use cookies to ensure that our website and services function properly, to gain insight into the use of our website, and to improve our products and marketing. For more information, please read our privacy and cookie policy.