Designing a migration is conceptually similar to building a compiler: it is a systematic engineering process, not a form of black-box magic reserved to the initiated. Representing intermediate states ...