Conclusion: a working Ello try-on has run about 8.7 to 12.4 seconds since October 9, and that number barely moved this month. The wait that loses a shopper is not the working one; it is the failure, the spinner that runs 40 seconds and ends in an error. So we spent the month cutting the tail, not the median. A render the AI service blocks used to retry in the background and make the shopper wait through two attempts, 35 to 47 seconds, before an error; it now stops after about 11 seconds with a try again message. A slow service had no stop, so a bad minute could become two; it now stops at about 30 seconds with a clear message. A dropped phone connection used to mean starting over, after 5 of 84 try-ons failed that way in 30 days; it now reconnects and collects the render already running. The non-obvious point: optimize the slowest experience, not the average one (our data).
Not the fast one. The slow one: the spinner that runs 40 seconds and then shows an error. So this month we spent our time on the tail, the worst-case waits, not the median that was already fine.
| What the shopper waits for | Worst case before | Now |
|---|---|---|
| A try-on that works | 8.7 to 12.4s | 8.7 to 12.4s, unchanged |
| A render the AI service blocks | 35 to 47s, then an error | about 11s, then try again |
| The AI service running slow | a minute or more, sometimes twice | about 30s, with a clear message |
The median did not move. Two failure paths did.

Each one hid the delay from the shopper and often doubled it. We put a stop and a plain message on every path, and a dropped connection now reconnects instead of restarting.
An Ello try-on has run about 8.7 to 12.4 seconds since October 9, including a front and back print and a two-view bag at the shopper's height (our data). A render the service blocks now ends in about 11 seconds.
A blocked render used to retry in the background, so the shopper waited through two attempts, 35 to 47 seconds, before the error. It now stops after about 11 seconds with a try again message.
A slow try-on now stops at about 30 seconds and tells the shopper it is taking longer than usual. Before, a slow render could run a minute or more, and sometimes twice (our data).
Time your worst case, not your average. Trigger an error and count the seconds to a visible message, and remove any silent background retry that doubles the wait a shopper feels.