Many SaaS onboarding sequences are built around time. Triggers set on Day 1, Day 3, Day 7. Aside from a few branched flows, everyone gets the same sequence based on when they signed up.
There's a better signal: what the user has actually done.
Every product has activation milestones: setup, the aha moment, habit formation. And every user moves through state transitions: onboarding to active, active to dormant, dormant to re-engaged, or churned. Model these in your data and build your onboarding around them, not calendar days.
A user on Day 3 who hasn't set anything up needs different help than a user on Day 3 who's already forming a habit. A user who was active last month but has gone quiet needs something different again. Sending any of them the same message wastes the moment.
Most teams know this intuitively, but time-based sequences are genuinely easier to build, so they're where most teams start. That's fine. It's a reasonable foundation. The problem is when teams leave them in place over time, optimizing for local maxima within that structure, without rethinking how the triggers were built in the first place. You'll ship your 12th subject line test before questioning whether the message should exist at all.
When we made this shift at Buffer, building around activation milestones and state transitions instead of time, it was the single most consistent lever across about 45 onboarding experiments. Lifts of 30-60% on key activation events were common.
Apply it foundationally to your triggers across every touchpoint where you're trying to move a user forward. The question isn't "what day is this user on?" It's "where are they in their journey, and what do they need to get to the next stage?"
If your onboarding is still purely time-based, that's probably the highest-leverage change sitting in front of you right now.