Skip to content
Sangsoo Lee
← Todas las notas
·2 min de lectura· product-analytics· operations

Why can a correct funnel still mislead your team?

A subscription funnel showed conversion above 100%. I traced the denominator mismatch and defined cohort-based calculations with visible data gaps.

The initial problem

While designing an operations dashboard for a subscription product, I found a conversion chart that could mislead the team even though its query was correct. More customers appeared to reach “active” than “approved,” producing conversion above 100%.

The transition history covered only part of the customer base. Some customers had entered stages before logging began, so counting everyone who had ever reached each stage mixed different groups of customers. The chart looked like a sequence, but its counts did not describe the same people moving through that sequence.

How I approached it

I started by asking what each metric should tell the team and which records could support that answer. For sequential conversion, the useful question was: among an observable entry cohort—a fixed group whose entry we can see—who reached both stages?

I also separated customer growth from matching operations. Customers, matching attempts, and messages are different units of analysis. Combining them into one funnel would remain confusing even with complete logs.

Finally, I checked which customer actions the system could actually observe. It recorded message sends and responses, but not profile-card opens. “No response” could mean a card was unseen or seen without an answer. That gap limited the conclusions the dashboard could support.

How I solved it

I documented a measurement contract with three distinct views:

  • A fixed entry cohort and stage intersections—customers observed in both stages—for sequential conversion.
  • Transition history for elapsed time between observed events.
  • Current status and broader lifecycle records for full-period counts.

This made the denominator match the question instead of dividing unrelated stage totals. I kept the response branch labeled “no response,” with the missing open event visible, rather than describing it as “unopened.” I also separated rejection from silence: a reminder may address silence, but it does not resolve an explicit rejection.

What the evidence supports

This was a documented data-contract and dashboard design decision. It established how to calculate and describe the funnel; it did not establish a conversion lift caused by the dashboard.

The next useful measurement is coverage: how many records contain the events required for each metric? Showing that boundary lets the team act on what it knows and choose what to instrument next, without treating a precise percentage as more complete than its source data.