Profile picture
Will Larson @Lethain
, 13 tweets, 3 min read Read on Twitter
Software migrations are a way of life at rapidly growing companies, and increasingly I think your ability to migrate effectively is the defining constraint for your growth.

lethain.com/migrations/
Teams hate tech debt. If they can locally reduce it, they'll do it. So at some point all remaining avenues to reduce tech debt require ~everyone simultaneously adopting a new platform: migrations! Moving everyone? A *lot* of coordination!
My approach to migrations is three phases: (1) derisk it by ensuring the approach can succeed, (2) enable the change by building tools and automation, and (3) finish the damn thing while minimizing disruption to other folks. (Migrations are rarely other folks top priority.)
Starting migrations by generating tracking tickets for teams to implement? Please don't. Write a design document and shop it with the teams that you believe will have the hardest time migrating. Iterate. Shop it with teams who have atypical patterns and edge cases. Iterate.
Next step is to embed into the most challenging one or two teams, and work side by side with those teams to build, evolve and migrate to the new system. Don't start with the easiest migrations, which can lead to a false sense of security.
Now slow down and build tooling to programmatically migrate the easy ninety-percent. This radically reduces the migration's cost to the broader organization, which increases their success rate and creates more future opportunities to migrate.
Once you've handled as much of the migration programmatically as possible, figure out the self-service tooling and documentation you can provide to allow folks to make the necessary changes without getting stuck. The best migration tools are incremental and reversible.
Documentation and self-service tooling are products, and thrive under the same regime: sit down with some teams and watch them follow your instructions, then improve them. Find a another team, repeat. Spend an extra two days making your documentation clean and tools intuitive.
Finally, you need to finish! Start by stopping the bleeding, which is ensuring that all newly written code uses the new approach. That can be installing a ratchet in your linters, or updating your documentation and self-service tooling.
Ok, now generate tracking tickets. Give the management team context around migrations: they are the folks who need to prioritize the migrations; if a team isn't working on a migration, it's typically because their leadership has not prioritized it.
At this point you're pretty close to complete, but have the long tail of weird or unstaffed. Your tool now is finish it yourself. It's not necessarily fun, but getting to 100% is going to require the team leading the migration to dig into the nooks and crannies themselves.
My final tip for finishing migrations is around recognition. It's important to celebrate migrations while they're ongoing, but the majority of the celebration and recognition should be reserved for its successful completion.
btw, I think it's easy to view frequent migrations as a sign of bad architecture, and sometimes they are, but sometimes they're just the sign of rapid growth and appropriately designed systems whose constraints have rapidly changed.

lethain.com/productivity-i…
Missing some Tweet in this thread?
You can try to force a refresh.

Like this thread? Get email updates or save it to PDF!

Subscribe to Will Larson
Profile picture

Get real-time email alerts when new unrolls are available from this author!

This content may be removed anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member and get exclusive features!

Premium member ($3.00/month or $30.00/year)

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!