We ran into this around feature flags while rolling back payments. Docs helped humans. Generated types caught the breakages in CI. Schemas still drift when several repos move at different speeds. Hand-written wrappers stayed flexible and hid mismatches. The noisy diffs were worth it once a breaking change never shipped. We kept the generator and deleted the duplicate sample clients.
We extracted one high-churn billing endpoint behind a strangler facade. Dual-writes ran for two weeks while we compared totals nightly. A feature flag controlled read traffic so we could roll back instantly. The hardest part was matching edge-case rounding in legacy invoices. Cutover finished with no customer-facing downtime and a smaller blast radius. We kept the facade until three more endpoints followed the same path.
We needed locks so queue workers did not process the same job twice. Redis SET NX was faster under load and easy to expire automatically. Postgres advisory locks were simpler operationally for our small team. Failover behavior mattered more than raw latency in our case. We chose Postgres first, then moved hot paths to Redis later. Pick the lock store you can operate confidently at 3am.