Field note
Designing for the Last Ten Percent
May 20, 2026
The difference between good and great software lives in edge cases, empty states, error handling and loading sequences that most teams never prioritise.
Every product has a happy path. The user opens the app, the data loads, the primary action is available, and everything works as designed. This path represents about ninety percent of the design effort on most teams. But it represents far less than ninety percent of the user experience.
The last ten percent is where products earn their reputation. It is the empty state when a new user has no data yet. The error message when the API is down. The loading sequence that bridges the gap between action and result. The edge case where the user's screen is narrower than the designer's mockup. These moments do not appear in portfolio screenshots, but they appear in every user's actual experience of the product.
Empty States as Onboarding
An empty state is not a void to be filled. It is an opportunity to teach. When a dashboard has no data, the screen should not say "No results." It should say "Here is what you will see once you connect your first account. It takes about two minutes. Want to try it now?" This pattern transforms an absence into an invitation. It respects the user's context and guides them toward value without requiring them to read documentation or watch a tutorial.
Error States That Respect the User
Most error messages are written by engineers for engineers. They describe what went wrong in terms of the system rather than in terms of what the user should do next. Good error handling follows a simple formula: acknowledge the problem, explain the impact in user terms, and provide a clear next action. If the system can recover automatically, say so and show progress. If the user needs to take action, tell them exactly what to do and make it easy.
Loading States as Narrative
A spinner is not a loading state. It is a surrender. It tells the user nothing except that something is happening somewhere and they should wait. Good loading states tell a story. They show the skeleton of what is coming. They animate in sequence so the user senses progress. The last ten percent takes as much effort as the first ninety. But it is the part that separates products people tolerate from products people love.