A bit about me, and my https://cyber-dojo.org open source project.
Why we initially chose git - the tie in to cyber-dojo.
The name of our git library was crumb
Context - our tests had close to 100% branch coverage for this code. This made everything possible.
Steps we took...
- Copy all the model classes to a crumb/ dir
- Refactor the top-level classes with @decorators for all methods and properties that forward to crumb/ classes via .crumb property
- Introduce the contract-checking lib with lambda functors to allow delayed evaluations
- In the @decorators pass all lambda functors to contract checking lib.
- Add .mongo property (initially None) next to .crumb property
- Add 5 levels of contract-checking from CRUMB_ONLY through to MONGO_ONLY
- Introduce primary/secondary abstraction so contract checking can treat all calls identically
- Allowing secondary contract-check calls to be async "fire-and-forget" to retain existing speed
- Testing async "fire-and-forget" calls!?
- Adding mirrored Mongo classes that implement all methods and properties.
- Timestamps in data have to be identical!
- Migrating with no server downtime.