This is a short essay about a quiet problem in modern web applications.
Not crashes, not server errors, and not bugs that light up dashboards. It’s about data loss that leaves no error, no alert, and no feedback.
Absence of evidence is not evidence of absence.
— Carl Sagan
A very ordinary moment
A few weeks ago, I was filling out a survey for a major Canadian airline on my phone.
It wasn’t a short form. It had multiple sections, a visible progress indicator, and I was about a quarter of the way through when I made a small upward scroll. The page refreshed, and everything was gone.
There was no warning, no recovery, just an empty form.
I didn’t complain, I didn’t report a bug, and I didn’t try again. I simply closed the page and moved on.
Nothing broke, but the user left. Nobody noticed.
A quiet problem in modern web apps
Data loss in web forms isn’t new. What has changed is how invisible it has become.
Modern web apps are used more on mobile devices, across unstable networks, with aggressive browser lifecycle management. Forms are longer, more complex, often multi-step, and users are interrupted constantly. The result isn’t necessarily more bugs, but more opportunities for normal human behavior to cause data loss.
What we measure — and what we don’t
Most teams are very good at measuring what breaks loudly.
We track server errors, crashes, failed payments, validation issues, and performance regressions. When something goes wrong at scale, it usually leaves a trace somewhere.
What we almost never measure is what disappears quietly.
When a user refreshes a page, closes a tab, or loses a form because a browser crashed, nothing necessarily looks wrong from the system’s point of view. No error is thrown, no alert fires, and no red line appears on a dashboard.
From the product’s perspective, nothing failed. From the user’s perspective, everything did.
Silence is not satisfaction
When users lose data, they rarely complain. They often assume they made a mistake, shrug it off, and move on.
This behavior isn’t exceptional. It’s normal.
Customer experience research consistently shows that only a small minority of dissatisfied users ever provide feedback. The vast majority don’t escalate the issue or explain what went wrong. They simply leave.
Visible complaints are just the surface. Under each one sits a much larger volume of silent abandonments that never appear in metrics or reports.
Why this keeps happening
There are solutions for form persistence, but many fall into familiar categories: legacy libraries that are no longer maintained, heavy integrations that require deep framework coupling, or partial fixes that don’t reflect real usage patterns, especially on mobile.
Meanwhile, form data loss keeps happening quietly and repeatedly.
Why Savior exists
I didn’t build Savior to polish UX details or optimize charts. I built it because people are human.
They get interrupted, they reload without thinking, browsers crash, and phones do what phones do.
Savior exists as a local safety net for those moments. It quietly keeps form data around so that a brief interruption doesn’t erase several minutes of effort.
Savior Core is an open-source library for basic form persistence. Savior SafeState Recovery adds deterministic recovery for crashes and edge cases.
More at Zippers.dev.
One last question
What’s the most expensive failure you’ve ever shipped that left no error trace?
Top comments (0)