How to Use Interface Motion Without a Custom Animation Budget
Interface motion has a price problem. Not the price of the animation itself, which can be written in an afternoon, but the price of the person who writes it, the review cycles, the tooling, and the slow accumulation of bespoke transitions that each need to be maintained by someone who remembers why they exist. A design team with no motion budget is not a team that has decided motion does not matter. It is a team that has been told the number for a custom animation system and has quietly chosen to spend that number somewhere else.
The good news is that most of the motion a product actually needs does not require a custom system. The bad news is that most teams, when they try to save money, reach for the same two moves: a fade and a slide, applied everywhere, until the interface feels like a slideshow with a pulse. There is a middle path, and it runs through a handful of cheap, well-understood techniques that look deliberate when used sparingly and look terrible when used as a default.
The real cost is rarely the animation code
When someone says a custom animation budget, they usually mean a dedicated motion designer, a set of hand-tuned easing curves, and a component library built to support them. That is expensive. But the thing that actually breaks wallets is the maintenance tail: every bespoke transition is a small contract between two screens, and contracts drift. A button that expands on tap needs someone to decide what happens when the tap is interrupted, when the screen is rotated mid-animation, when the OS is set to reduce motion. None of those decisions are hard. All of them cost review time.
The cheap approach is to pick motions that already have answers to those questions built in. A fade has an interruption story. A slide has an interruption story. A color transition has one. A spring with a custom stiffness and a hand-authored velocity handoff does not, unless someone writes it.
Start with the transitions the browser gives away
CSS transitions cost nothing to add and almost nothing to maintain. A 150 to 200 millisecond opacity change on a modal backdrop, a 120 millisecond background-color shift on a pressed button, a 250 millisecond transform on a drawer: these are a few lines each and they read as intentional because they are short and consistent. The trap is duration drift. One developer writes 200ms, another writes .2s ease, a third writes 300ms cubic-bezier(0.4, 0, 0.2, 1). Three months later the interface has a stutter it cannot explain.
The fix is a tiny set of tokens, declared once and never re-derived: a duration for state changes (around 120ms), a duration for entrances (around 200ms), a duration for larger surface moves (around 300ms), and a single easing curve for each. That is four numbers and three curves. It is not a motion system. It is a spelling convention, and it eliminates most of the incoherence that people blame on a missing motion budget.
Reuse the platform's own motion vocabulary
Every major platform ships a set of standard transitions that are already tuned, already accessible, and already familiar to users. On iOS there is the sheet presentation, the navigation push, the modal cross-dissolve. On Android there is the shared element transition and the standard activity enter and exit. On the web there is the View Transitions API, which in supporting browsers animates between two document states with a single call and degrades to an instant swap elsewhere.
These are not glamorous. A push transition is the visual equivalent of a beige cardigan. But users have seen it ten thousand times, which means it costs no cognitive load, and it is maintained by people whose job is to maintain it. A team with no budget should be reaching for the platform default first and treating anything else as an exception that has to justify itself.
The web case deserves a specific note. View Transitions is the closest thing the browser has ever offered to free choreography: the old page fades and scales out, the new page fades and scales in, and if a shared element is named, it moves between the two positions on its own. The default timing is decent. The accessibility story is handled. The main cost is a feature check and a fallback, which is an afternoon, not a quarter.
Borrow motion from components that already ship it
A surprising amount of interface motion is already sitting inside libraries the team is probably using. A well-built dropdown, accordion, toast, or dialog component usually includes its own open and close animation, tuned by someone who thought about it. The mistake is to strip those out for consistency and then rebuild them worse. The other mistake is to let each library bring its own timing, so the dropdown eases at 180ms while the toast eases at 350ms and the drawer eases at something nobody can identify.
The cheap move is to inventory what already animates, write down each component's duration and curve, and then decide which ones to align and which ones to leave alone. Aligning three or four components to the same entrance duration is a morning's work and it makes the product feel like one product. Leaving the rest alone is fine, as long as the ones that fire together do not visibly disagree.
Motion that carries information is worth more than motion that decorates
With a limited palette, the allocation matters more than the polish. The question to ask of any proposed animation is whether it tells the user something they would otherwise have to infer. A row that slides left to reveal a delete action tells the user the action is attached to that row. A card that expands in place tells the user the detail view belongs to the card. A number that counts up tells the user the value changed rather than being replaced.
Compare that to a page that fades in on every route change. It tells the user nothing. It exists because the page felt abrupt without it, which is a real problem, but the solution is a 150ms opacity ramp, not a choreographed sequence. Decoration is cheap to add and expensive to justify. Information-carrying motion is the reverse: it takes thought to design, and it earns its keep every time it runs.
The reduced-motion path is not optional and it is not expensive
Every animation added to a product needs a version that runs when the operating system is set to reduce motion, and that version is almost always a cut or a fade. The media query is one line. The discipline is remembering to use it, which is easier when the animation lives in a shared token or component rather than scattered across forty files.
This is also where the budget conversation usually collapses. A team that has hand-authored twenty bespoke transitions now has twenty reduced-motion variants to write and test. A team that has four durations and three curves has one reduced-motion rule. The accessibility requirement is not a tax on the cheap approach. It is one of the strongest arguments for it.
A small motion audit beats a large motion system
Before adding anything, spend a day listing every transition currently in the product, including the ones nobody remembers adding. The list is usually longer than expected and full of orphans: a hover effect from a 2019 redesign, a spinner that only appears on one screen, a modal that fades at a different speed from every other modal. Deleting half of them is free. The interface gets faster and more coherent at the same time.
What remains after the audit is the actual motion surface, and it is usually small enough to govern with a short written convention. Something like: state changes at 120ms, entrances at 200ms, surface moves at 300ms, one ease-out curve for entrances and one ease-in-out for movement, everything else requires a reason. That document fits on an index card and prevents most of the drift that a full motion system is built to prevent.
Where the cheap approach visibly fails
There are places where no amount of token discipline will substitute for authored motion, and it is worth naming them so the team does not blame itself when the results look flat. Complex state changes, like a multi-step form that collapses into a summary, need choreography. Shared element transitions across very different layouts need handoff tuning. Anything that involves physics, like a drag-to-dismiss sheet with velocity-sensitive release, needs a spring and someone who understands it.
These are the moments to spend the budget, if there is any. A product with four careful, information-carrying animations and one hundred cheap fades will feel more considered than a product with forty mediocre bespoke transitions. The cheap approach is not a permanent ceiling. It is a way of concentrating whatever motion money exists onto the two or three moments that a user will actually remember.
A drawer that opens at the wrong speed
The most common failure of the low-budget approach is not ugliness. It is inconsistency at the seams, where two cheap animations meet. A drawer slides in at 300ms with an ease-out curve, and the backdrop fades in at 200ms with a linear curve, and because they start at the same moment they finish at different moments, and the eye catches it every single time. The user cannot name what is wrong. They just feel that the drawer is slightly off.
The fix costs one line: give the backdrop the same duration and curve as the drawer, or delay it by 50ms and let it finish first. Small alignment decisions like this are where a no-budget team can outperform a well-funded one, because they force someone to actually watch the transition rather than trusting the system to handle it. The eye is the cheapest QA tool available, and it catches things a linter never will.

