> You’ll notice that with backend-only data migrations – like the ones Box or Pinterest executed – there was no need for rollback plans, as the rollout moved forward only after the team had validated that everything worked fine.
Speaking from direct experience: That is outright bullshit. Ideally your testing will catch problems, but if you're migrating to a new database architecture, it's an architecture you don't know well, and by the way, your sys admin never even read the installation requirements. This is yet another reason dual-write is ideal, so that you can roll back late in the game when the new DB suddenly seizes up and goes catatonic (esp. Mongo/Cassandra/ElasticSearch). Be that Negative Ned and plan for the worst.
Great support and functionality for testing differences between two systems of record.
I don't have the data (but I'm sure it's there), but I suspect more than one company ended up committing seppuku, over a badly-done migration.
I just got finished migrating a fairly crucial SDK, in the app I'm working on. It was one the fundamental "infrastructure" server connectors, and affected everything.
It came out great. Far fewer bugs than I expected.
In my experience, migrations take planning and strategy. Often, they need to happen over a long time period, in steps.
Many companies and engineering teams don't have the patience to manage that.
We have a "data" migration, coming up; but probably not for a few months. It will be handled in a similar manner.
And I have watched "wipe the slate clean" migrations, done, several times. In some cases, they were not deliberate, but the migration screwed up the data so badly, it had to be binned.
Are any of the migrations in the article non-data migrations?
I guess the only "migrations" that matter, are data ones.
I'm not a "big data" chap, but I have written distributed (franchised) systems, and have had to do many upgrades and transitions, affecting many folks.
It's taught me to be forward-thinking in my architecture.
You don't need to be a "big data chap" to run data migrations. Regardless of your infrastructure and system designs, your business will continue to evolve and the data can outgrow your original database requirements, so there's always a need for a migration even if one is "forward thinking in their architecture"
"Self, y'know, this chap is talking about database migrations, which isn't really my cup of tea, but his point is just as valid for codebase and dependency migrations."
So I made a point, based on that. It was not my intention to pee in anybody's punch bowl.
So I leave the field to you.
I yield.
I surrender.
You win.
Have a great day.
Those change-over things are really severe. Really severe problems. - Joseph Henry Condon, Bell Labs ... via https://github.com/globalcitizen/taoup
However, we have much better tools now, such as end to end / black box testing with mature client automation stacks, high availability clustering, CI/CD, distributed architectures, middleware proxies, protocol-level support for temporary failures and retries, mature caching systems and fault tolerant hardware and software infrastructure. So it's practically not as hard as it once was, because if you've got your ducks in a row you can use a battle-proven method and/or get fallbacks for free.
Especially as I was a consultant, billing hourly and trying to provide a reasonable estimate and visibility for the client.
Wrote up some more here: https://www.mooreds.com/wordpress/archives/876
First rule of brownfields cutover - every interface is an opportunity to fail.