Some products feel like they were made by someone who cared. Others feel assembled. The difference is rarely about features — it’s almost always about decisions.
You’ve encountered this before. An app where every screen feels like it was considered — where the empty states are thought through, where error messages are human, where the transitions feel earned rather than applied.
And you’ve encountered the opposite: products where the settings screen looks like a different product from the main flow, where loading states were clearly added last, where the help text reads like a legal document.
Intention isn’t polish. It isn’t hours spent on hover states or pixel-perfect alignment. A product can be pixel-perfect and still feel assembled.
Intention is about coherence of reasoning. Does this decision fit the logic of the product? Does the copy sound like the same person wrote it? Does the behaviour in edge cases feel like it was designed, or like it was left to default?
The best heuristic I’ve found: look at what happens when things go wrong. Error states, empty states, loading states — these are the moments that reveal whether the people who built it thought about the experience as a whole or only thought about the happy path.
A thoughtful error message costs the same as a lazy one. The difference is whether someone decided it mattered.
The shift that made the biggest difference in my own work was treating the edge cases as first-class design problems, not afterthoughts.
Before I call something done, I ask: what does this look like when it fails? What does it look like when it’s empty? What does it look like for the person who’s doing this for the first time, and the person who’s doing it for the hundredth?
Intention is just attention, applied consistently.
Powered by GitHub Issues. Join the conversation ↗
To leave a comment, you need a GitHub account.
Comment on GitHub