Better UX, Less Engineering
Imagine you're designing a finance app. A user accidentally deletes a transaction and immediately realizes they need it back. How would you solve this?
One approach is to build a complete undo system. Create a separate database table to store deleted transactions, manage deletion states, handle restoration, and clean up expired records. It works, but it also adds development effort, complexity, and maintenance.
But what if we approached the problem differently?
Think About the Actual Problem
The user doesn't need a sophisticated recovery system. They simply need a few seconds to change their mind.
So, instead of immediately deleting the transaction, hide it from the interface and show a toast message: Transaction deleted. Undo.
Behind the scenes, start a short timer. If the user taps Undo, restore the transaction in the interface and cancel the deletion. If the timer expires, execute the actual database deletion.
No additional database table. No complex recovery mechanism. Just a small change in how we handle the interaction.
It's About Design Logic, Not Just UI
What makes this interesting isn't the toast message itself. It's recognizing that the problem can be solved by changing the sequence of actions rather than building an entirely new system.
As designers, we sometimes jump straight into designing features without questioning the underlying logic. We focus on what needs to be built instead of asking whether there's a simpler way to achieve the same outcome.
A small shift in thinking can eliminate unnecessary complexity while delivering the same user benefit.
Simple Doesn't Mean Cutting Corners
Of course, this approach works best when a short delay is acceptable, and the application can safely handle the pending action. The deletion must still be reliable, and the system needs to account for navigation, refreshes, or failures where relevant. More complex recovery requirements may justify a persistent undo system.
The point isn't to avoid engineering effort at all costs. It's to invest that effort where it genuinely improves the experience.
Ask a Better Question
Whenever you face a design problem, try asking: What's the simplest way to solve the user's actual problem without introducing unnecessary complexity?
Great design isn't always about adding more features or building sophisticated systems. Sometimes, it's about finding a different way to think about the problem.
Don't just design the solution. Question the problem until a simpler solution reveals itself.