This change series allows data to be shared between the old and new systems even while you are making the back-end optimal for the new system.

Habit: Schema Update 3 — Refactor Databases

Organization ROI: Eliminate bugs arising from database changes, while allowing you to fix database problems.

Engineer ROI: Make arbitrary design changes to your schema in simple ways that never generate bugs, no matter how many programs use it.

Habit: Split Services 1 — Ports and Adapters

Organization ROI: Reduce cost of ownership related to both 1st and 3rd party dependencies.

Engineer ROI: Isolate and micro-test interactions between any two components. Get informed when 3rd party components change underneath you in production.

Habit: In-Storage Data Adapters

Organization ROI: Support multiple applications with different data expectations off the same data source.

Engineer ROI: Allow shipping data stores updates and application updates asyncronously, and update even if there is a legacy system you can't change.

Habit: Schema Updates 1 — Deterministic Migrations

Organization ROI: Prevent bugs that occur due to subtle differences between databases.

Engineer ROI: Update local, test, and production databases easily and consistently, no matter how long a database has been not updated.

Habit: Schema Updates 2 — Range-Versioned Databases and Multi-Phase Migrations

Organization ROI: Upgrade applications independently even if they share the same database. Perform zero-downtime database updates.

Engineer ROI: Easily manage any number of distinct applications using any number of distinct data sources, including data sharing, with zero-downtime, deterministic updates.

Habit: Test Persistance

Organization ROI: Reduce time it takes to find data persistance errors.

Engineer ROI: Verify state persistance with tests that run at full unit test speed.