The test for whether motion belongs
Before adding any animation, ask what question it answers. A button press that scales down slightly answers "did my tap register?" A row that fades out on delete answers "did that action succeed?" A skeleton loader answers "is something happening or is this broken?" Motion tied to a real question earns its place.
Motion added purely because it "feels nice" — a bounce on every card hover, a slide-in on every list item on every page load — doesn't answer anything. In an enterprise tool used for hours a day, that kind of decoration becomes friction fast, not delight.
Worth it vs. not worth it
Worth it: state-change confirmation
A checkbox that visibly fills, a saved toast that slides in — these confirm an action landed. Skipping them leaves users unsure whether their click did anything.
Worth it: loading and progress indication
A skeleton screen or progress bar tells the user "working, not broken." Its absence is one of the most common reasons users double-click a button that's already processing.
Worth it: spatial continuity on navigation
A modal that grows from the button that opened it, rather than appearing instantly centered, helps the user's mental model track where they are in the interface.
Not worth it: animating every list on every load
A staggered fade-in on a data table a power user opens fifty times a day stops being delightful by the third open and starts being a tax on their time.
Not worth it: decorative hover effects on non-interactive elements
A card that lifts on hover but isn't clickable teaches users a false affordance — motion should signal what's true about the element, not just look nice.
Not worth it: long transitions that block the next action
Anything over roughly 300ms starts to feel like the interface is making the user wait rather than communicating with them. Fast, subtle motion; nothing users have to sit through.
Always respect reduced motion
`prefers-reduced-motion` isn't a niche accessibility flag — for users with vestibular disorders, it's the difference between a usable product and genuine physical discomfort. Every animation added for delight needs a reduced-motion fallback that keeps the functional confirmation (the state did change) while dropping the movement itself. This is a hard requirement, not a nice-to-have polish item.
The takeaway
Motion earns its place by answering a real question — did this register, is it working, where am I — in under 300ms. Motion added for its own sake wears out fast for daily users and adds friction instead of delight. Every animation needs a `prefers-reduced-motion` fallback, no exceptions.
Let's talk about your productRelated reading
UX · Accessibility
Accessibility Isn't a Checklist: Keyboard Navigation in Dense UIs
Visual Design · Theming
Dark Mode Is a Design System, Not a CSS Toggle
UX · Reading Behavior
Designing for the Second Glance: What Users Actually Scan vs. Read
See these micro-interactions applied in production on the FarmGate case study.