Member-only story
Ten Seconds to Take It Back: How We Built Undo Send
A button that looks like the simplest feature in the app, and the race condition that made our first version lie to users.
Act I: The Ticket With Three Exclamation Marks
The support ticket arrived at 4:51 PM on a Friday: “I sent Hartwell’s invoice to Hartley!!! Their rates are on it. Is there ANY way to unsend?”
There wasn’t. We run an invoicing tool for freelancers and small agencies. “Send invoice” fires an email with a PDF and a payment link, and once it’s gone, it’s gone. That ticket was the 212th request for an undo button. It had been the top item on our feedback board for over a year.
Product wanted Gmail’s behavior: a toast that says “Invoice sent · Undo”, a 10-second window, done. We wrote down the requirements in one paragraph:
- Undo works for 10 seconds (configurable 5–30 per workspace).
- Closing the tab, killing the app, or losing Wi-Fi must not lose the send.
- If the UI says “Undone,” the email must never go out. No exceptions.
Requirement 3 looked like a formality. It turned out to be the whole project.










