The import page said it was ready. It wasn't.
Paste a link into Binderdex and your collection arrives on its own. That's the promise, and for most people it just works. Then members started hitting failures that felt random: totals showing up as NaN, a portfolio nobody picked, retries that "succeeded" and still showed red. Two long debugging sessions later I finally understand the shape of it, and it's a bug class worth stealing for whatever you build.
Done is when the numbers land
The screen rendered in two waves. Labels and placeholder boxes arrived first; the real numbers showed up a beat later. Every signal we trusted said "done" while the useful data was still missing. So the first pass captured an empty collection, and the sanity check after it rejected the real one because the URL had picked up extra parameters by then. Garbage first, false alarm second.
How do you debug a liar you depend on? I throttled the CPU to 4x slowdown and watched it fail in slow motion. That's when the two waves became obvious:
| What we trusted | 4x CPU throttled repro |
|---|---|
| "The screen looks done" | NaN totals, then a phantom rejection |
| The numbers themselves | 304 rows / 307 copies, one attempt, no retries |
The fix is boring on purpose. "Done" now means the summary values on screen are real numbers. Transient hiccups get a short bounded retry. Ambiguous input fails loudly rather than inventing a collection that doesn't exist.
While I was in there
- You can type your username now instead of hunting down and copying a full profile link. Same checks after, less ceremony before.
- A successful retry no longer drags the old error along with it, so wins finally look like wins.
The takeaway: treat "visible" as a claim, never as proof. Wait for the data, not the paint. (The NaN totals earned that line.)