Skip to content
Preptima

Working With Legacy Systems: A Masterclass on Modernisation Interviews

A complete treatment of the legacy modernisation interview for engineers and architects: what makes a system legacy, characterisation tests and seams, the strangler fig and where it fails, rewrite versus incremental replacement, data migration and cutover, parallel running and reconciliation, anti-corruption layers, sequencing a multi-year programme, and the signal an interviewer grades behind every question.

Masterclass·98 min read

What it is

A legacy system is one you cannot change safely. That is the whole definition, and every useful thing in this subject follows from taking it literally rather than treating it as a slogan. Age is not the criterion. A twelve-year-old payments engine with a comprehensive test suite, a two-minute build, an owner who answers the phone and a deployment that happens on Tuesdays is not legacy in any sense that matters, however unfashionable its stack. A React front end written eighteen months ago by contractors who have gone, with no tests, three state-management libraries and a build nobody can reproduce, is legacy on its first birthday. What separates them is not the year on the copyright header, it is whether a competent engineer can make a required change and know, before it reaches customers, whether they have broken something.

Interviewers ask about legacy because it is where the majority of professional engineering actually happens and because it is the cleanest available test of judgement under incomplete knowledge. A greenfield design question lets a candidate assume away every inconvenient fact. A legacy question does not, because the inconvenient facts are the question. Somebody built this, they are gone, the documentation describes a system that may never have existed, the behaviour customers depend on is partly undocumented and partly accidental, the business will not stop while you work, and you are being asked what to do on Monday. There is no answer that is simply correct. There are answers that show you understand what you do not know and answers that show you do not.

Look at the decommission step, because that is the one programmes skip: a slice that is cut over but never retired leaves both implementations alive and both needing maintenance, and an organisation that skips it four or five times in a row has not modernised anything, it has bought a second system to run alongside the first one forever.

What being unable to change safely is made of

Say "cannot change safely" out loud in an interview and a good interviewer will ask you what stops you, because the answer determines the whole plan and the causes are not interchangeable. There are roughly five, and a real system usually has three of them.

The first is the absence of a feedback loop. There are no tests, or the tests are integration tests against an environment that has drifted, so the only way to learn whether a change is correct is to release it and wait for complaints. Everything else in modernisation is downstream of this, because a plan that involves changing the system is a plan that requires a way to know whether the change was right.

The second is the absence of a deployment path. The release involves a change window, a runbook, a database script somebody runs by hand, and a person. When a release costs a weekend, changes get batched, batches get large, large changes fail more often, failures reinforce the fear, and the release cadence falls further. This is a self-tightening loop and it is why what ships without passing the deploy pipeline is a legacy question wearing a DevOps question's clothes.

The third is the absence of comprehension. The code is present and readable and nobody can predict the consequence of a change, because the coupling is implicit: a shared table that six modules write to, a configuration flag whose meaning changed twice, a stored procedure that another system calls without anybody's knowledge, a nightly job that quietly repairs the data the daytime path corrupts. Comprehension failure is not fixed by reading harder. It is fixed by instrumentation, by tracing what actually runs, and by writing down what you learn where the next person will find it.

The fourth is the absence of a supported substrate. The runtime is out of support, the library has no maintainer, the vendor has announced an end-of-life date, or the hardware has one supplier. This one has a clock on it that is not yours, which changes the shape of the argument entirely, since you are no longer choosing when to act.

The fifth is the absence of a person. One engineer understands it. Everything routes through them, they cannot take a holiday without a rota being rearranged, and their departure would be a business continuity event. This is a legitimate architectural risk even though it appears on no diagram, and naming it is one of the reliable senior signals in this subject.

The shapes the question arrives in

Concept questions check that your vocabulary is load-bearing rather than decorative: what a seam is, what a characterisation test asserts, what the strangler fig pattern actually requires you to have, what an anti-corruption layer protects and from what. These are quick to ask and quick to fail, because a candidate who defines the strangler fig as "replace it bit by bit" has told the interviewer they have read a blog post.

Scenario questions put you inside a mess and watch the order of your moves. You inherit a system nobody understands. The vendor has announced end-of-life in fourteen months. The migration ran overnight and the reconciliation does not balance. The new service disagrees with the old one on nine hundred records out of four million and the cutover is on Friday. What interviewers grade here is sequence, not solution, and the most common failure is proposing the right actions in the wrong order.

Design questions ask you to construct something whose correctness has to hold while a live system keeps running: a dual-write path, a reconciliation harness, a routing layer that can send a percentage of traffic to a new implementation and send it back, a migration for a table too large to lock. These are graded on the rollback story far more than on the happy path.

Judgement and case-study questions put you between people. The business wants a rewrite because the vendor's sales engineer showed them a slide. The team wants a rewrite because they are bored. The CFO wants to know why five million pounds buys a system that does exactly what the current one does. Your programme is eighteen months in with nothing decommissioned. The honest answer to a modernisation question is sometimes "do nothing yet", and being able to defend that without sounding like you are avoiding work is a distinct and heavily graded skill.