The session opened at 5:37 PM with a request to check whether some unknown bug was killing conversions on our newest signups. The signup walk that answered it is logged at 2:18 PM the next afternoon, and it took 7 minutes.
Asking the data for a bug
The conversion drop was real. New signups on the platform had gone bad, and the tempting move was to ask for evidence first. So we told the agent to hunt for an unknown bug that would explain it. The plan was to look at what the funnel recorded, find the step where people fell off, and work backward.
That plan assumed the failure would show up as an event: an error, a 500, a step with a suspicious cliff. Two of the three things that turned out to be wrong are not events. A landing page that takes about 18 seconds to load on a phone throws no error. The visitor leaves before any of your instrumentation has a reason to fire. The question sat open for roughly 21 hours of wall clock, and the funnel data was the wrong instrument for what was broken. What ended the wait was giving up on the data and doing what a prospect does.
The walk
We had the agent walk the signup as a prospect, start to finish, on a phone-sized viewport and then on desktop. It logged three findings:
- Mobile landing page load: about 18 seconds. Any check that starts after the page has loaded never sees this.
- The email field truncates, then rejects. Paste a long address and the field cuts it off. Then validation rejects the cut version. The prospect gets an error on an address they typed correctly.
- Existing customers get told their invite link is expired. A returning customer who follows a signup or invite link is shown an expiry message instead of being sent to log in. The link is fine. The state check has no branch for “this person already has an account.”
None of these leaves a clean trace. The truncated email produces a validation failure that looks like user error. The expired-invite message looks like a legitimate rejection. If you counted them, they would land in the same bucket as ordinary bad input.
Why the walk found them and the query wouldn’t
Each finding lived in the gap between what the system did and what a person experienced. The system did what it was told. The page loaded eventually, the field validated what it received, and the invite check returned expired for a link it did not recognize as belonging to a known account. Every component was correct against its own spec. A prospect meets the whole chain at once, and the chain was broken in three places.
Telemetry can tell you where people stopped. It cannot tell you what they saw when they stopped, and that second thing was what we needed. We still want the instrumentation, because after the fix it will confirm whether the numbers moved. But three concrete defects in hand beat a chart that points at a step and shrugs.
What went into the ticket
The findings went into one ticket with the fix plan attached, three items long. The load time is a front-end performance job. The email field has a length limit and a validation path that disagree with each other. The expired-invite message needs a branch that checks for an existing account and redirects to login.
The next step on our side is the boring one. After each fix lands, we walk the signup again, on a phone, as a stranger, before we trust any number that says it worked. Twenty-one hours of asking the data got us nothing, and the walk got us all three defects.
If signups drop
Walk the signup as a prospect, on a phone and on desktop, before you wait on analytics. Keep the instrumentation to confirm the fix, and re-walk after each one.