Articles
Design Craft
Prompting for design: what works, what doesn't, and what's just hype
Most advice about AI for design is generic LLM guidance dressed up in design vocabulary. Here's where the value actually lands.
Table design is harder than it looks
Tables are some of the most information-dense UI components in any product. Most of them are designed with too little thought for how data actually behaves in them.
When to use a modal and when not to
Modals interrupt users by design. That makes them the right tool in some situations and the wrong one in more than most teams realize.
How to design navigation that scales
Navigation that works with five items usually breaks at fifteen. The reasons are structural, and they're predictable early.
What skeleton screens and loading patterns actually communicate
Spinners, skeletons, and progress bars are not interchangeable. Each one makes a specific promise to the user about what's happening.
The problem with relying on hover states
Hover states are a design crutch. They work on desktop, they reveal nothing on mobile, and they're often doing jobs that better design would eliminate.
Color in UI design: what you actually need to know
Most UI color problems aren't about choosing colors. They're about using too many of them, for the wrong reasons.
How to QA your own design before it goes to engineering
Most design QA problems are avoidable if the designer reviews their own work the way an engineer will build it.
Responsive design decisions that aren't just 'make it smaller'
The interesting responsive decisions aren't about breakpoints. They're about what changes structurally when context changes.
How to design error states that actually help people recover
Error messages are a design surface most products treat as an afterthought. The ones that work share a few specific properties.
Form design mistakes that are still everywhere
Forms are where most products lose users. The same mistakes recur so reliably they might as well be defaults.
What makes an onboarding flow fail
Most onboarding flows fail before the user finishes them. The reasons are more predictable than most teams expect.
How to design for content you don't control
Designing for real content means designing for every version of it: too short, too long, missing, wrong language, or all caps.
The interaction patterns that feel obvious but still go wrong
The basic patterns aren't basic. They're full of decisions designers make on autopilot, which is where most of the broken ones come from.
How to design dark mode properly (not just invert the palette)
Inverting the palette is the fast way to ship dark mode. It's also why most dark modes look broken.
When to reach for animation and when to leave it alone
Animation earns its place exactly once: when it helps the user understand what happened or what's about to happen.
What makes an interface feel polished, and how to get there
'Polish' isn't vague. It's a specific set of decisions about consistency, attention to edge cases, and micro-interactions. Here's how to think about it systematically.
Typography is 90% of design. Here's how to actually use it.
Type decisions determine whether most interfaces feel polished or rough. Most designers treat them as secondary. Here's what to actually pay attention to.
How to prototype the right fidelity for each stage of a project
Fidelity should match the question you're trying to answer. High fidelity at the wrong stage is expensive and constrains exploration.
How I structure a Figma file so my future self doesn't hate me
Figma file organization is craft. A badly organized file destroys velocity after the honeymoon phase ends. Here's the system that's worked for me.
How to design for density without making it feel cramped
Whitespace is a tool, not a virtue. The right density depends on what the user needs to hold in view at once.
Color contrast is the easiest accessibility win. Here's how to not mess it up.
Contrast gets fixed more often than it gets solved. Here's the difference.
The anatomy of a good empty state
Empty states are where most interfaces reveal their laziness. They're also one of the highest-leverage design moments in any product.