Monk's founding engineer details how they migrated 100+ live workflows from Inngest to Temporal without a migration freeze or big-bang cutover. The approach used a repeatable four-PR pattern per workflow: characterize existing behavior with tests, scaffold the Temporal equivalent in the dark, cut over behind a per-tenant feature flag, then delete the old receiver. Key technical insights include keeping business logic in shared domain services so both runtimes wrap the same code, mapping Inngest concepts to Temporal primitives (retries count differently, step.run vs Activities have determinism implications), and replacing Inngest's declarative per-tenant concurrency with separate Namespaces for coarse isolation and a coordinator Workflow with condition() for fine-grained fan-out control. The migration ran over multiple sprints with both systems live simultaneously.

14m read timeFrom temporal.io
Post cover image
Table of contents
1. Where we started #2. Each workflow took four to seven PRs #3. One workflow, mapped piece by piece #4. The thing you will miss most: Flow control #5. How we deployed it #6. What changed #7. Wrapping up #
2.9K Impressions1 Comment