What’s “stuck flow” or “dead-end” logic?
Still have a question, spotted an error, or have a better explanation or a source we should cite?
Imagine a subscriber enters your welcome series, hits a step that says "wait until they visit the pricing page"... and then never visits. They just sit there. That's a stuck flow. It sounds harmless until you realize those contacts could suddenly receive a message six months later when the condition is finally met, or they just never move forward at all.
What causes stuck flows?
There are a few patterns that show up again and again. A wait step with no maximum duration is the most common. The flow says "wait until X happens" but X never happens, so the contact waits forever. A close second is conditional logic that doesn't account for every possible subscriber state. If your branch only handles "customer has purchased" and "customer has not purchased", what happens to someone mid-refund? They fall through.
Other common culprits:
- Exit conditions that are too narrow (so most contacts never qualify to exit)
- Event triggers that depend on third-party data that sometimes doesn't arrive
- Branches where one path leads to the next step and the other path leads to... nothing
How to find stuck flows in your account
Most ESPs show you a contact count at each step inside a flow. Pull that view and look for steps where contacts are accumulating instead of moving forward. A healthy flow should have relatively even movement through it. If one wait step has 400 contacts sitting on it and the next step only has 10, that's your stuck point.
But a few things to check specifically:
- Sort your flows by "active contacts" and look for anything with an unusually high number relative to recent entries
- Filter for contacts who entered more than 30, 60, or 90 days ago but haven't exited
- Look for decision branches where one path has near-zero traffic (that branch may never be reachable)
- Check any flow with a "wait until" condition (not a "wait X days" condition) as the higher-risk format
Platforms like Klaviyo, ActiveCampaign, and Customer.io all let you see per-step contact counts. Use them. If your platform doesn't show this natively, you may be able to export active contacts in flow and filter by entry date.
How to fix it
So once you find a stuck point, you have a few options depending on what you want to do with those contacts:
- Add a maximum wait time. If "wait until pricing page visit" hasn't fired after 14 days, move the contact to a fallback path anyway. Most platforms let you set this directly on the wait step.
- Add a fallback branch. Every decision branch should have an "else" path. No contact should ever reach a branch and have nowhere to go.
- Create a timeout exit. Contacts who've been in a flow longer than a set threshold (say, 60 days) should automatically exit, get tagged, or move to a re-engagement flow rather than sitting indefinitely.
- Manually release stuck contacts. For contacts already stuck right now, most ESPs let you move or remove them in bulk. Do a one-time cleanup, then apply the fixes above so it doesn't happen again.
The rule of thumb is simple: every wait needs an escape route. If a condition might never be met, there must be a path out that doesn't depend on that condition ever firing.
Worth auditing your biggest flows at least once a quarter. Not just for stuck contacts, but to check whether the logic still reflects how your subscribers actually behave (which changes over time).
If you're unsure where to start or you've found a mess you don't know how to untangle, our SOS hotline is free and we'll walk through it with you.
Contributors
Who worked on this answer
Every name links to their profile. Every company links to their site. Real people, real accountability.