What I changed about the failure state, and what I left alone?
A failure state can be rescued in a lot of ways that all look reasonable in a mockup: a modal that explains, a help article, a link to buy. Each of them takes the user further from the transaction they were trying to complete. The constraint I set was that recovery had to happen without the send leaving the screen.
What I chose | What I cut | Why |
|---|---|---|
The exact shortfall, named in dollars and token | "Insufficient balance for gas" | A named amount is an errand. A category is a research project the user has to run themselves. |
Recovery inline, in the checkout | An error screen or modal | Leaving the checkout means rebuilding four decisions. Keeping the transaction visible is what makes the fix feel small. |
Two routes: | Sending the user to an exchange | Someone who leaves to buy ten cents of ETH elsewhere has left. Whether they return is no longer a design decision. |
The send button stays, disabled | Removing or replacing it | A disabled button says paused. An absent one says over. The whole screen has to read as a transaction waiting, not a transaction lost. |
What I owned on the shortfall state?
What I owned
The shortfall state itself and the rule behind it, a failure the product can solve is not allowed to be a message. The exact amount, named in both dollars and the token, with headroom above the current fee. The inline action and its copy. The two recovery routes. Keeping the transaction resident so the user returns to a checkout that still holds their asset, network, recipient and amount rather than an empty form.
An error the product can fix should not be a sentence describing the problem.
How the checkout handles not having enough
The failure is reported in the row that caused it. The fee line turns red and says what is wrong beside the number it is wrong about, no banner across the top, no modal, nothing that has to be dismissed before the user can look at their own transaction.
Directly below, the recovery is styled as an action rather than an alarm, the same blue as the product's primary controls, with a plus rather than a warning icon. It states the asset by name and an approximate amount, deliberately above the fee it needs to cover, so a user who fixes this once does not land back here when gas moves a few cents.
What holds it together is the state underneath. The recipient, the amount, the asset and the network stay resident while the user goes and gets what they need, so recovery ends where it started rather than at the beginning of the flow.
