[ Ionut Dumitru ]
CraftAug 4, 20257 min read

Animation is timing, not movement

Good motion isn't about how things move but when, and getting the timing wrong reads as cheap no matter how smooth the curve.

Animation gets blamed for the wrong thing. When a transition feels cheap, the instinct is to reach for a fancier easing curve or a longer duration, as if smoothness were the missing ingredient. It almost never is. The curve is fine. What's broken is the timing: when the motion starts relative to the user's action, how long it makes them wait, and whether two things that should feel connected actually move together.

I've watched this play out in design reviews more times than I can count. Someone demos a screen, the menu slides in on a buttery 600ms ease-out, and everyone nods — but it feels expensive in the wrong way, like a luxury car door that takes a beat too long to shut. The fix is never a better curve. It's cutting the duration in half and starting it the instant the finger lifts. Motion is a language of cause and effect, and timing is its grammar.

Latency is the only number the body feels

The user doesn't perceive your easing function. They perceive the gap between doing something and seeing a response. Below roughly 100ms, an interaction feels instant — like you caused it. Past that, a seam opens up between the act and the result, and the brain starts treating them as two separate events instead of one.

This is why a 100ms animation that begins immediately beats a 300ms animation that waits 80ms to start, even though the second one is "smoother." The wait is the part the body registers. Designers obsess over the shape of the motion and ignore the thing that actually determines whether it feels responsive — the delay before anything happens at all.

The practical rule I keep coming back to: spend your milliseconds on starting fast, not on finishing slow. A tap response should leave the gate in under a frame. A view transition can take its time on the back half, because by then the user already knows they were heard.

Users don't feel how things move. They feel how long they waited to find out something happened.

Stagger is choreography, not decoration

The single most overused effect in modern interfaces is the list that fades in one item at a time. Done with intent, a stagger tells you where to look and in what order. Done by reflex — a flat 50ms delay multiplied across every row — it just makes the screen take longer to become useful, and it does so most punishingly on the slowest devices, where the delay compounds into something that feels broken.

The timing question underneath stagger is: are these elements one thing or many things? A toolbar that animates its buttons in sequence is lying about their relationship — those buttons arrived together, they belong together, they should move together. A notification landing on top of an existing stack is genuinely a new, separate event, and a small offset earns its keep by saying so.

  • If elements are part of the same unit, move them as one. No stagger.
  • If they arrived at different times or carry different meaning, let the timing show it.
  • Cap the total: a stagger that runs longer than about 300ms across the whole group stops reading as polish and starts reading as lag.

The cost of getting this wrong isn't ugliness. It's that the motion makes a claim about structure, and when the claim is false, the interface feels subtly untrustworthy without the user being able to say why.

Interruptibility is a timing decision

Here's the test that separates motion that respects people from motion that performs at them: tap the thing, then immediately tap something else. A cheap animation makes you wait for it to finish its little show before it'll listen again. A good one abandons the in-progress motion the instant you change your mind and redirects from wherever it happens to be.

That difference is entirely about timing — specifically, about refusing to hold the user hostage to a duration you chose. An animation that can't be interrupted has confused its own playback with the user's intent. The user's intent always wins, and the motion should reflect that by being cancelable at every frame.

This is also where spring-based motion earns its reputation. Not because springs look more organic — that's the marketing — but because a well-tuned spring carries velocity. When you grab a sheet mid-flight, it already knows how fast it was traveling and continues from there, so the redirection feels physical instead of abrupt. The benefit isn't the bounce. It's that the timing stays continuous through the interruption.

Match the motion to the cause

Every animation answers a question the user didn't ask out loud: what just happened, and did I do it? The timing has to match the answer. A self-initiated action — a tap, a drag, a deliberate dismiss — should resolve fast and tight, because the user already knows the cause and is waiting only for confirmation. A system-initiated change — an incoming message, a background sync completing, content arriving — can afford a slower, gentler entrance, because here the motion's job is to draw attention to something the user didn't trigger.

Get these backwards and everything feels off. A slow, ceremonial animation on a button press feels sluggish, like the interface is savoring its own competence. A fast, abrupt entrance on an unrequested change feels jarring, like something glitched. Same curves, same durations — swapped contexts, opposite results. The motion was never the variable. The relationship between the timing and the cause was.

This is the part that doesn't fit in a spec. You can hand a developer the durations and the easing values and still get motion that feels wrong, because the spec can't encode whether each transition is answering "you did this" or "this happened to you." That judgment is the actual work, and it's why good motion is so hard to copy from a video — you can match the frames and still miss the timing logic underneath them.

Smoothness is the cheapest part of animation to get right and the least important. Anyone can drop in an ease-out and a 300ms duration. What separates motion that feels like craft from motion that feels like decoration is whether the timing tells the truth about cause, structure, and intent. Get that right and people stop noticing the animation at all — which is exactly the point. The best motion isn't admired. It's believed.

#Craft#MotionShare ↗
→ / AUTHOR
Ionut Dumitru
Ionut Dumitru

Full-stack engineer and product designer. Writes about building products where the engineering and the design are the same job.

→ / NEXT
SystemsJul 28, 2025
A reverse proxy is the front door you keep forgetting to lock
← All writingionutdumitru.com