Chasing 60fps While Your Sprint Burns: An Argument for Shipping Over Polishing
Every frontend team has that one engineer. The one who spent three days last quarter getting a dropdown animation from 52fps to a rock-solid 60 on a mid-range Android. The dropdown works. Nobody complained about it. And yet those three days are gone, the sprint slipped, and the checkout flow still has a layout bug that's been sitting in the backlog since February.
Look, I get it. Frame rates are satisfying. You open DevTools, watch the paint bars shrink, and feel like a craftsman. But somewhere along the way, a lot of US-based product teams absorbed the idea that 60fps is a moral obligation rather than a tool. It isn't. It's a budget line, and like any budget, spending it in the wrong place means you can't spend it where it counts.
When Smoothness Genuinely Matters
Let's not throw the baby out with the requestAnimationFrame. There are real cases where jank isn't just ugly — it's a business problem:
- Scroll-linked interfaces. News feeds, dashboards, anything with sticky headers or parallax. Users scroll constantly, and dropped frames here feel broken, not just unpolished.
- Drag-and-drop and touch interactions. If a user's finger is directly moving something on screen, latency and stutter register immediately. This is where 60fps (or 120 on newer devices) is non-negotiable.
- Gesture-heavy mobile experiences. Swipe navigation, pull-to-refresh, image carousels. Mid-animation hitches read as unresponsiveness, and unresponsiveness reads as low quality.
Notice the pattern: it's input-driven motion. When the user is driving the frame, every dropped one is felt. That's where your optimization hours belong.
When It's a Distraction Wearing a Performance Badge
Here's the uncomfortable truth about most animation work: it's fire-and-forget. A modal fades in over 200 milliseconds. A toast slides up. A card expands. Users don't perceive the difference between 55fps and 60fps on a transition that short — perception research consistently shows humans are far more sensitive to start delay than to minor frame drops during brief motion.
Yet teams will burn an afternoon on will-change hints, transform tricks, and compositor-layer audits for a tooltip that appears twice a week. Meanwhile the LCP on their marketing pages is sitting at 4.2 seconds, which is a problem users absolutely do perceive, every single visit.
If your Core Web Vitals are green but your sprint board is red, you've got your priorities inverted.
A Reality Check for Your Next Retro
Try this exercise at your next planning session. For every performance ticket on the board, ask two questions:
- Can a user describe this problem? "The page takes forever to load" — yes. "The modal animation occasionally hits 58fps" — no. If nobody can articulate it without opening DevTools, it's probably a P3.
- Does it happen on the interaction path or the perception path? Loading, input response, and layout stability live on the perception path. Polish animations live on the nice-to-have path.
There's also a developer-experience cost nobody puts in the estimate. Micro-optimizing animations often means fighting your framework's rendering model, adding brittle CSS hacks, or shipping a custom animation library that the next hire has to decode. That's technical debt with a smooth 60fps smile on its face.
Set a Frame Budget Like You'd Set Anything Else
The mature move isn't "always 60fps" or "who cares about frames." It's a tiered policy:
- Tier 1 (must be perfect): anything under direct user control — dragging, scrolling, typing feedback.
- Tier 2 (should be good): page transitions and frequent UI feedback. Aim for smooth, accept 45fps on low-end hardware.
- Tier 3 (ship it): decorative motion, one-off reveals, empty-state illustrations. If it looks intentional at 30fps, it's done.
Write it down. Share it with the team. The next time someone wants to spend two days on a spinner, the conversation becomes "which tier is this?" instead of a vibe-based argument.
The Point Isn't Slowness — It's Judgment
Nobody's arguing for janky apps. The argument is about opportunity cost. Every hour spent nudging an imperceptible animation is an hour not spent fixing the search box that takes three seconds to return results, or the form that loses input on a spotty connection.
Your users will never compliment your frame graph. They will notice when your app feels fast, loads fast, and responds like it respects their time. Spend your frames — and your hours — accordingly.