Building a Roadmap from Legacy to Modern Engineering: My Approach
When I’m asked how to move from legacy engineering practices or products to something modern, something that embodies engineering excellence, I have to admit, there’s no neat, one-size-fits-all answer. It’s not a simple checklist or a Gantt chart you can pin to the wall. Changing culture and systems is more art than science. But that doesn’t mean we abandon science altogether. Quite the opposite: we bring in data, telemetry, and evidence-based approaches to guide our journey.
Let’s talk about how I approach this transformation, drawing from my own experience working with organisations wrestling with legacy pain.
A Roadmap of Hypotheses, Not Certainties
The first thing to understand is that your transition from legacy to modern is not a straight line. It’s a series of hypotheses, educated guesses about what will work, tested in the real world. You can’t plan everything up front because, frankly, you don’t know what you’ll run into. There are too many unknowns, and more often than not, it’s the unknown unknowns that bite you.
Here’s how I recommend tackling this:
- Start with the riskiest, nastiest product: It sounds counterintuitive, but I always suggest piloting your transition with the most complex, problematic product. If you can move that from, say, Team Foundation Version Control (TFVC) to Git, and modernise its pipelines, you’ll uncover the real challenges early.
- Take it one step at a time: Don’t try to boil the ocean. Focus on one change, validate it, and then move to the next.
- Frame everything as a hypothesis: “If we automate this deployment step, will it reduce errors?” Test it, measure the results, and adapt.
Bringing Everyone to the Table
One of the most powerful exercises I run with clients is deceptively simple: I gather everyone involved in approving a product for production, developers, testers, managers, anyone who ticks a box or signs off. I ask them to write down everything that needs to be true for them to be happy shipping to production.
- Is there a specific metric they need to see?
- A piece of data they rely on?
- A process that must be followed?
- A test that must pass?
We collect all these “must-be-true” items. These become the backbone of your development process. And, crucially, as many of these as possible should be automated.
Automate Relentlessly
Let me be clear: you should not have any manual tasks between a developer committing code and that code reaching production. Manual steps, people following scripts, ticking boxes, or running checklists, are bottlenecks and sources of error.
The modern approach is:
- Trunk-based development: Keep your codebase clean and integrated.
- Automated builds and tests: Every commit triggers a build and a suite of tests.
- Automated approvals: Where possible, use automated gates and policies.
- Automated deployments: Push to production (or a subset of users) with minimal human intervention.
Phased, Audience-Based Rollouts
Deploying to production doesn’t mean unleashing changes on every user at once. We’ve all seen what happens when that goes wrong, just look at the Crowdstrike incident that took out half the world’s internet. Instead, follow the lead of organisations like Microsoft or Google:
- Ring-based (audience-based) rollouts: Start with a small, internal group. Then expand to a larger “insiders” group. Only after validation and telemetry do you roll out to everyone.
- Shorten the feedback loop: Get real-world data from a subset of users before exposing the entire customer base.
- Iterate and adapt: Use telemetry to inform your next steps.
A Real-World Example
I’m currently working with an organisation moving from TFVC to Git. We’re not just swapping tools; we’re rethinking how code moves from developer to production. We’re building out DevOps pipelines, automating everything we can, and involving everyone who has a stake in the release process. It’s not a straight path, but by tackling the hardest product first, we’re surfacing the real issues early and building a repeatable model for the rest of the organisation.
Your Step-by-Step Path (and Why It’s Not a Checklist)
If you’re looking for a step-by-step, paint-by-numbers guide out of legacy pain, I have to disappoint you. There’s no paddle for that particular canoe. But what I can give you is a compass, a way to orient yourself and your team as you navigate the journey.
Here’s how I break it down:
- Identify your current state: Are you on TFVC? Move to Git. On Git but no automated builds? Build automation is next. Automated builds but no automated deployments? That’s your next target. No automated testing? Bring it in.
- Tackle one thing at a time: Don’t get distracted by shiny objects. Focus, deliver, measure, and move on.
- Build a culture of engineering excellence: This isn’t just about tools. It’s about ethos, a philosophy of professionalism, adaptability, and continuous improvement.
- Scale your approach: Once you’ve cracked the hardest nut, apply what you’ve learned to the rest of the organisation.
Adapting to Change, Professionally
Ultimately, building engineering excellence is about adapting to change, expected and unexpected, in a way that’s professional and delivers the outcomes your business and customers need. It’s not about following a rigid plan, but about continuously orienting yourself, taking the next step, and learning as you go.
So, if you’re staring down the barrel of legacy pain, don’t look for a map with every twist and turn marked out. Instead, pick up your compass, gather your team, and start moving. Take the next step, inspect your progress, and adapt. That’s how you build a modern, resilient engineering organisation, one hypothesis, one automated step, and one cultural shift at a time.
Meta Description:
Discover Martin Hinshelwood’s approach to building a roadmap from legacy engineering practices to modern DevOps excellence. Learn how to automate, adapt, and scale engineering culture for lasting transformation.