We keep meeting product reviews where “checkout conversion” is a single percentage, down a little this quarter, blamed on the SDK. Support transcripts tell another story: people copy PromptPay codes into banking apps, wait for SMS, return after the analytics session has closed, and complete the order. The funnel records a corpse. The warehouse, if you look, records a delayed success.
Family-shared devices add a second lie. A logged-in grocery profile on a living-room tablet is not the same person who opened the app at 07:10 on a commute. If your identity join is naive, journey reports will invent a superhuman who browses baby formula and motorcycle helmets in the same hour and then “churns.”
What we draw instead
In Funnel Cartography and in Journey Atlas, checkout is a small state machine: draft cart, payment initiated, left to external bank, returned, failed, retried, completed. Loops are visible. A retry is not a new user. Backgrounding longer than your session timeout is called out as a stitching problem before it is called a drop-off.
This is not Thai exceptionalism for its own sake. Any market with QR payments, heavy chat apps, and shared hardware will break San Francisco funnel templates. Thailand just happens to be where we teach, so it is where we refuse to treat those templates as neutral.
A practical check before your next review
Take last week’s completed orders. How many had a payment-initiated event more than twenty minutes before completion? If that share is material and your funnel still uses a thirty-minute session window as gospel, you are reporting theatre. Fix the window or split the path. Do not celebrate a “conversion experiment” until the path is honest.
The grocery case on our alumni page is the longer version of this argument. The product change was small. The reporting change was the actual work.