Sit in enough design reviews and you start catching the same six things every time. None of them are hard to fix. They’re just easy to miss when you’re close to the work — and together they’re the difference between a UI that feels sharp and one that feels off.
Twelve grays
Count the grays in your app. Most have ten or twelve, all slightly different, because everyone eyeballed a new one instead of reusing the last. You need about four neutrals: a background, a subtle surface, a border, and text. Pull them from one ramp and delete the rest. The same trap bites brand color: ship one blue, not four almost-blues that only you can tell apart.
Dead states
Two states get forgotten. The first is hover — a button that doesn’t react to the cursor feels broken, so give every interactive element a real :hover change. The second is focus. If you’ve ever written outline: none and stopped there, you orphaned keyboard users — they can’t see where they are. Style focus with:focus-visible, don’t delete it.
Tiny targets
That 20px icon button is a coin flip on a phone. Touch targets should be at least 44×44px — Apple’s number, and a good floor everywhere. If the icon is smaller, pad the hit area with padding or a pseudo-element so the tappable zone is bigger than the thing you can see. Leave at least 8px between targets as well, so a thumb doesn’t trigger the one beside it.
Alignment and radii
Two polish killers here. First, optical centering: a play triangle or a chevron looks off when it’s mathematically centered, because your eye weights the mass, not the bounding box — nudge it a pixel or two. Second, radii: a 6px card holding an 8px button looks accidental. Pick two or three corner values, put them on a scale, and reuse them everywhere. Icons inside buttons carry the same problem: size them optically instead of dropping in a 24px glyph and hoping.
Ship it
Run this list before your next review: four grays, live hover and focus states, 44px targets, optical nudges, one radii scale. Or start from a component library that bakes these in — Spectrum UI ships accessible states and consistent radii, so you inherit the fixes instead of catching them one by one.