Hey everyone,
This month, we released MSPintegrations v5, and I wanted to share the full story with this community. You’re the power users who’ve lived with the platform’s limitations and given us feedback that shaped this release.
The Problem That Started Everything
If you’ve used MSPintegrations for a while, you know the duplicate ticket issue. A workflow fails at step 3, retries, and starts over at step 1, creating another ticket. If it fails again, another ticket. I’ve seen customers end up with 4 or 5 duplicates from a single email.
This wasn’t a bug. It was a fundamental limitation of how the workflow engine was built. We couldn’t pause a running workflow and resume it later. The execution state lived in the call stack, and you can’t serialize a call stack.
I decided we had to fix it, not patch it, but actually solve the underlying problem.
The 22-Month Journey
I’ll be honest: this took way longer than I expected.
Attempt #1: Stateful Workflows
We adopted a software package designed for exactly this use case. The developer experience was great. It worked perfectly in our test environment.
When we tested it with production traffic, workflows that used to complete in 15-20 seconds took 5-10 minutes. A 25-30x performance hit. We tried 4-6 major revision cycles over many months. Every time, production performance was unacceptable. We could never keep it live for more than an hour or two.
But studying that codebase taught us a pattern that would eventually work.
Attempt #2: Workflow State Machine
We tried a different approach, a state machine that would iterate over a working object rather than using nested function calls. It worked, but the code was nearly impossible to follow. Business logic lived in two places, and after leaving the code for a few days, it took forever to get back up to speed.
We never deployed it. We didn’t trust ourselves to maintain it.
Final Solution: Generator-Based Scope Stack
We combined lessons from both attempts. The result is an architecture where workflows can pause at any step, serialize their complete state to the database, and resume later from exactly where they stopped.
No performance penalty compared to the old system, we’re using the same compute, just a different pattern. And no workflow runs for more than about a minute at a time, which means we can deploy updates and scale containers without waiting for long-running jobs to finish.
What This Unlocks
No more duplicate tickets. Once a step completes successfully, it won’t re-execute on retry. This was the whole point.
Automatic outage recovery. When Autotask or M365 goes down, workflows pause and resume automatically when service returns. No more “please log in and click Play” emails from us.
API threshold protection. We monitor your Autotask API usage and back off at 80%, so we never cause a lockout, even when other integrations are hammering your API.
Foundation for future integrations. When we add other platforms, we won’t have to solve these problems again. The hard work is done.
More Powerful Workflows. We can now add action steps to support human-in-the-loop confirmation, rate-limits, concurrency-limits, and atomic locks.
Other Updates in v5
- SOC 2 Compliance - Formally complete. Report access coming via a new subscription tier.
- Extract Strings Action - Pull multiple values from form emails in one workflow step.
- Console Performance - Faster load times, snappier Workflow Builder.
- Infrastructure Migration - We’re now running on Kubernetes with auto-scaling. The platform scales up under load and scales down when quiet.
What’s Next
- Agentic AI actions in the Workflow Builder
- Outbound HTTP requests and incoming webhooks
- Custom Workflows that you define once and re-use in many places
Thank You
Some of you have been with MSPintegrations since the early days. You’ve reported the bugs, requested the features, and put up with the limitations while we worked on this. v5 exists because you kept using the product and telling us what needed to be better.
I’m proud of this release. Thanks for being part of it.
-Travis-
Questions? Ideas? Drop them in the comments. I’ll be checking this thread.