Development
Legacy code
Also known as: legacy system, inherited codebase, outdated codebase
Definition
Legacy code is working code that is expensive to change: it runs on an outdated stack, has no test coverage or has lost its authors, so every edit means reconstructing the logic from the source and risks breaking something unrelated.
It helps to separate legacy from merely old. Ten-year-old code with tests, documentation and maintained dependencies is not legacy: people change it calmly. Conversely, a project written eighteen months ago with no tests, by a team that has since dispersed, on an unmaintained framework fork, is textbook legacy. The defining marker is the cost of a safe change. If fixing one button takes a week of archaeology and two weeks of chasing regressions, it is legacy regardless of the first commit date.
In the Russian context legacy carries an extra layer. Some systems are tied to products that left the market or stopped receiving updates: licences lapsed, security patches became unavailable, payment and analytics SDKs went dark. That code stops being merely inconvenient and becomes a risk, operationally and in regulatory terms if the system handles personal data or belongs to critical infrastructure. There the modernisation decision is driven by requirements rather than by taste.
The standard mistake is demanding a from-scratch rewrite immediately. A full rebuild means months without new functionality, a repeat of every mistake the old system already survived, and a high chance of never finishing. The working approach is usually different: wrap the critical paths in tests, freeze the old code, and build new functionality outside it, gradually routing traffic across. A rewrite is justified when the stack is fundamentally unsupported, when security requirements are broken beyond repair, or when maintenance already costs more than a new system would.
Related terms
- Technical debtTechnical debt is the accumulated gap between how a system is built and how it should have been built: every shortcut taken to hit a deadline turns into a permanent surcharge on the cost and duration of everything built afterwards.
- RefactoringRefactoring is changing the internal structure of code without changing its external behaviour: the functionality before and after is identical, what changes is readability, coupling and the cost of the next change, verified by tests and regression checks.
- MonolithA monolith is an application built and deployed as a single unit: all the code lives in one repository, runs in one process and works against one database, releasing as a whole, which buys simplicity at the cost of coupling.
- CI/CDCI/CD is a pipeline that on every commit builds the project automatically, runs tests and checks, and then ships the passing build to a staging environment or to production, removing manual deployment and the human error that comes with it.
- Software import substitutionSoftware import substitution means moving information systems onto Russian products listed in the state software registry: for public sector customers and critical infrastructure operators it is a legal requirement, and for other businesses it is a condition of tender access and a way to remove vendor abandonment risk.
Related services
- Website support and improvementNot every project needs a rewrite. It is often cheaper to fix the speed, clear the technical SEO errors, add the missing sections and integrations, and end up with a working site without paying for a new build.
- IT consulting and product auditThe most expensive mistakes in software happen before the first line of code: a misread problem, a stack chosen out of a contractor’s habit, and a specification that does not exist. Consulting exists to settle all of that before the development meter starts running: what to build, out of what, at what cost and in which order. The result is a document, not an opinion on a call.
- Website development, end to endWe build sites that still hold up a year later: from a one-page CMS build to a store or a web application on React and Next.js. One team for design, code, integrations and launch.
Read more
- Redesigning a Site Without Losing Traffic: Stages, Risks and the SEO Migration ChecklistHalf of all redesign requests are really content, speed or offer problems. How to tell them apart, why a phased rollout beats a big bang launch, and what belongs in the migration checklist so the organic traffic survives.
- How to Choose a Tech Stack: Criteria That Outlive the HypeA stack is a five-year commitment usually made in a single call. Here is the order the decisions should be taken in, the criteria that carry real weight, working stacks for six project archetypes and what a wrong choice costs.
Need this done, not just defined?
We do this work, not only write about it. Describe the task and we will scope it and send a staged estimate.