Migrations Done Right: Success Stories & Lessons Learned by Fernando Francisco Cristiani. “Migrations will be part of your career at some point. Usually because your architecture is not scaling well for your growing business” They are difficult! • run over a long period of time • very hard to estimate • scope is unpredictable • keeping yourself and your team motivated is challenging • explicit expectations management and building trust is crucial All Eyes on You • migration project is over schedule and/or budget • your team starts becoming the bottleneck • you are in the spotlight You will feel under the “eye of Sauron” It’s All About Trust • “getting things done consistently over a long period of time“ as the main source of building trust (doing what you said you would over & over) • split problem into business relevant increments • get things done & deliver consistently • communicate clearly Splitting Your Migration • avoid big bang! • chunk it up into business relevant increments in a way that aligns with the roadmap • build trust by delivering and delivering • leverage high priority projects to advance your migration • accept you will have two systems running in parallel • begin with the end in mind: define your final goal & make sure they contribute towards the goal in a genuine way • rain drop migrations: organic distributed on-the-fly migrations triggered by existing use cases (eg migrate when customer logs in) • make sure you know when you’re finished • good fit for use cases with expiration or regular cycles • pragmatic and simple way of migrating the most important use cases first Delivering Safely • emphasis on safely! Avoiding downtime and incidents • you will need to split your traffic as you go • release on non-prod environments • release code to prod with feature flag off • enable it in prod for some whitelisted users • gradually roll out to more users —> monitor & verify (rinse & repeat) • once it is released to all users, remove the feature flag (don’t forget about this!) • feature flags & repository pattern (or another pattern that encapsulates the data) • feature flags at gateway level (AWS Cloudfront + Lambda@Edge) • backend feature flag —> user routed to a different UI • passthrough (put new service in front of the old service) Communicate Clearly / Show Progress • visibility is essential. Anyone should be able to understand the progress of the migration at any time without asking you • proactively communicate progress on a regular basis • you might have to build custom tools to show progress (eg dashboards, UI) • make sure to choose a variable that shows progress in an accurate way Don’t Forget About • backups • decommission any unused services • delete unused code • delete all feature flags and associated code • delete any leftovers of migration framework • communicate explicitly and broadly at the end of the migration • celebrate!!
-
+1