Legacy Migration Playbook – Start Over
“Never give up, never surrender!” – Galaxy Quest
Ironically, I think developers are quick to move to a “start over” mindset, especially when they’re working on legacy migrations. When it becomes difficult to arrive at a working solution, it is easy to assume that the whole endeavor is too difficult and that the team should give up.
While the team is weighing options, it is appealing to assume a posture of “we will do it better next time.” But this is often a fallacy. If you don’t know how the system should be built, restarting won’t make it any better.
But sometimes – and I stress sometimes – starting over is the best course. Here are some requisites to consider before going down this road.
First, you need to do at least some work in the existing solution. If you haven’t tried working in it, just evaluating from afar doesn’t give you the context necessary to make that call.
Second, you need to have designed the system’s end state. If you don’t have this, how will you know if you could build it better next time?
Third, you should try planning out a strangle or build alongside option. Only if both of those seem impossible should you assume you need to do the rewrite.
Probably the only other time you should assume a rewrite is when you need to make a technology shift. This usually happens as a technology is becoming truly legacy. For example, if you have a VB6-based solution, you might want to consider a rewrite.
Of all the plays I have presented in this series, the Start Over play is the one I am the least comfortable recommending. In many cases, starting over is a bad idea.
I love challenges, and legacy systems offer plenty. I hope that what I have written about these different plays that we can use when migrating a legacy system is found to be helpful. I think the big takeaway is that legacy systems can be migrated to something better and that the process doesn’t need to be as daunting as often feared.
There is hope, but you must have a strategy. If you have a legacy system that needs to be migrated, we would love to talk to you about it.
Plays
System Review / Code Review
Design the Ideal End State
Mini Spike Work
Add Some Unit Tests
Determine a Migration Strategy / Strangle
Segment the New from the Old
Start Over