We know why SmileAndDial CRM needs to change their fundamental constraints We know why changing the data model is difficult.
In part 2, I’m going to show you how to TheeSeeShip these changes to release small, low risk, bits of functionality and avoid a high risk, high lag rewrite.
The First Release Series - Adding IDs

The first series of incremental releases is to add new columns to the existing tables. The Contact table needs an auto-incrementing Id column that will eventually become the new, non-phone, primary key throughout the system. All the other tables need an int ContactId column that is nullable for now.
Because we are TheeSeeShipping, we are not making Id a primary key, allowing ContactId to be null, and not setting up any foreign relations. We will do all of those things over time, but doing them all at once makes the changes large and risky.
Instead these changes are entirely additive. The changes are also completely independent of each other, making it possible to update the schema one table at a time. Whether this goes out in one release or 4, they are low risk changes.
Part 3 continues the process with Invisible Shipping. The process of TheeSeeShipping major changes in small, low risk, incremental steps