You don't need to be a designer to build software people enjoy using. You just need a few principles that most engineers skip.
Most developers think UX is someone else's job. But every line of frontend code is a UX decision. How long the loading spinner shows, what happens when a form submission fails, whether the back button works - these are developer decisions that users feel directly.
Loading states are not optional
Every network request needs a loading state. A button that does nothing when clicked feels broken. A page that flashes empty and then fills in feels janky. Skeleton screens, spinners, and disabled states during submission are the difference between "professional" and "amateur."
Error messages should help
"An error occurred" is useless. "Your password must be at least 8 characters" is useful. "We couldn't process your payment. Your card ending in 4242 was declined. Please try a different card or contact your bank." is excellent. Tell the user what went wrong and what they can do about it.
Form design basics
- Label every input clearly - don't rely on placeholder text as the only label
- Show validation errors inline next to the field, not in a banner at the top
- Don't clear the entire form when one field fails validation
- Pre-fill anything you already know (city from postal code, country from locale)
- Show password requirements before the user fails, not after
The back button test
Does the back button work? Does it take the user where they expect to go? Does it preserve their scroll position? This sounds basic, but single-page applications break the back button constantly. Test it.

Ben Arledge
CEO & CTO, CloudOwlHave a project in mind?
No sales pitch, just an honest conversation about what you're building.
