learned something building a real booking system in production.
A critical path should never depend on implicit state.
Here’s what I mean.
As long as a user is filling a form, losing state is fine.
Reload the page, start over. No harm done.
But the moment there’s:
money
availability
inventory
real users involved
everything changes.
If a user clicks “Book” and:
the page reloads
the browser crashes
localStorage is wiped
Stripe redirects fail
the system must still know the truth.
Not because the frontend remembers it.
But because the backend explicitly does.
Pending reservations.
Clear statuses.
Server-side source of truth.
Time-bound expiration.
Form state → can be lost
Commit action → must be persisted
Payment flow → must be resumable or expire cleanly
No “normally it already happened”.
No “the UI should still have it”.
My test now is simple:
If the frontend disappears, does the system still know exactly where it is?
If not, it’s implicit state.
And implicit state eventually lies.
This mindset saved me bugs.
But more importantly, it saved me mental energy.
Curious how others here draw the line between acceptable state loss and critical guarantees.
The interesting part is that the frontend disappearing is really a test of whether the product has an actual source of truth or just a convincing illusion of one. That distinction gets especially important once the system has to guarantee money, inventory, or availability.