Designing a Funnel That Actually Catches the Drop-Off (and Not Just the Obvious One)
Most funnels are designed to confirm what the team already believes. A practical guide to designing funnels that surface the drop-off you didn't know about.
The default funnel in every analytics tool looks something like: signed up → activated → upgraded → retained. It is also, in most cases, the wrong funnel. Not because the steps are wrong — they’re directionally fine — but because a four-step funnel at that granularity tells you that activation is bad and stops there. You knew activation was bad. That’s why you’re looking.
The funnel that’s worth designing is one that surfaces the drop-off you didn’t already know about. This post is about how to build that.
Why the default funnel under-delivers
Three structural problems:
The steps are too coarse. “Activated” is not a step. It’s a state composed of five or six sub-events — viewed onboarding, completed first action, invited a teammate, integrated a tool, etc. A funnel that compresses all of those into one step tells you the activation rate, which is a number you already track in your weekly KPI deck.
The steps are sequenced wrong. Real user flows are not linear. People do step 3 before step 2, skip step 2 entirely, come back to step 2 two days later. A linear funnel forces a sequence that doesn’t exist, then attributes “drop-off” to the gap between the imaginary sequence and reality.
The time window is too long. Funnels usually default to 30-day windows because that’s where the numbers look good. A 30-day funnel can’t tell you which moment in the first session lost the user, because by day 30 the moment is lost in noise.
What to do instead
Three rules.
Rule 1: decompose every step that’s vague into its events
Take any step in your default funnel that’s a state rather than an action. Replace it with the specific event that defines entry into that state.
“Activated” → first_value_event (whatever the specific action is — saved their first record, sent their first message, integrated their first tool).
“Engaged” → completed_action_X (the specific action that correlates with retention).
If you can’t name the specific event, that’s the work — figure out which event is actually the leading indicator of the state, and instrument it.
This single change usually adds two to four steps to a funnel and shifts the visible drop-off from a vague middle step to a specific event. The specific event is the actionable one.
Rule 2: build two parallel funnels, not one
For any flow, build two funnels: the happy path (everyone hits every step in order) and the observed path (the actual sequence most users take, even if it skips or reorders steps).
The gap between the two funnels is interesting. If the happy path has 30% completion and the observed path has 60% completion, your product is being used in ways your funnel didn’t model. That’s a finding. Look at the observed path users — they may have found a shortcut you didn’t intend, or they may be a different segment with different behaviour.
In Truxl, both funnel types are first-class: you can set step ordering to “strict” (happy path) or “any order within window” (observed path), and compare the two side by side.
Rule 3: tighten the time window aggressively
For early-funnel events — signup, first action, activation — use single-session or 24-hour windows. The drop-off you’re trying to find happens in minutes, not weeks.
For later-funnel events — second use, expansion, upgrade — longer windows are appropriate, but be honest that you’re now measuring lifetime conversion, not funnel performance.
A common pattern: run the same funnel at three time windows (1 day, 7 days, 30 days). The drop-off shape across windows tells you which steps are “users left and came back” versus “users left and didn’t come back.” These are completely different problems and need different solutions.
The breakdown that usually reveals the answer
Once you have a funnel with the right granularity, the next move is breaking it down by a property. The properties that consistently reveal the most:
Acquisition source. Users from different channels have wildly different completion rates. If your funnel looks fine in aggregate, it’s often because high-intent paid users are dragging up the average while organic users are dropping at a specific step.
Device or browser. Mobile vs desktop. Old browser vs current. The drop-off you can’t reproduce in your testing is often a specific browser issue affecting a real percentage of users.
Time since signup (for existing users). A funnel that includes both day-1 users and year-old users averages two completely different populations. Break down by tenure.
Plan tier or segment. B2B funnels usually have wildly different completion rates by company size or plan. The drop-off in the free tier may be irrelevant; the drop-off in the paid tier may be your top priority.
What “fixing” the funnel actually means
Once you’ve found the real drop-off, the fix is usually one of three categories:
The step doesn’t make sense. Remove the step. Half the time the drop-off is a step that exists because someone added it three years ago and never measured whether it helped.
The step is intimidating. Move the step. Often the right move is to defer it (collect the data later) or break it into smaller pieces.
The step exposes a real problem. Fix the problem. This is the rare and valuable case, where instrumentation surfaces a UX or product issue that a thousand customer interviews didn’t.
What this isn’t
A funnel is not a strategy. It is a diagnostic. Knowing that 40% of users drop at step 3 doesn’t tell you why; it tells you where to look. The qualitative work — session replay, user interviews, support ticket reading — is where the why comes from.
The discipline is to use funnels to localise the question, then use other tools to answer it. Most product teams collapse those two steps and end up with funnels that are both vague diagnostics and vague answers. Separate them, and the funnel becomes useful.
Truxl funnels support strict and any-order step matching, multi-window comparison, and breakdown by any property in a single view. Try it on your own data.