# The Migration That Never Finishes

> The most expensive state a system can be in is halfway between two designs. Plan the last service first.

Source: https://christwentyfour.com/blog/the-migration-that-never-finishes

The most expensive state for a system is halfway between two designs. Both run. Glue holds them together. One person understands how.

## Why they stall

The first services are easy and move quickly. The rest are hard for reasons that were always true but never costed. The win is already announced, so the pull to start is stronger than the pull to finish.

## Look at the hardest case first

If the hardest service will never move, you are not planning a migration. You are planning to run two systems forever. That can be a legitimate choice, but it is a different one. If you would not sign up to finish, do not start. A half migration is usually worse than either end state.

## Publish a count that only goes up

Services on the new platform, out of the total. A migration that has not moved in two months is a decision somebody is making by not making it. A public count turns that into a conversation.

## Finish means the old path is gone

Code, infrastructure, pipeline, docs, and alerts. Until then, someone will find the old path and use it. Schedule its removal with a date.

## Strangle, don't rewrite

Put the new thing beside the old one. Send a slice of real traffic to it. Widen only when the slice is boring.
