Cover the same distance in just 4 drawings and the motion reads light and quick; cover it in 14 closely-packed drawings and it reads heavy and unhurried. That's timing (how many drawings, how long it takes) and spacing (how far apart they are) working together — the two always move as a pair.
Animators sketch this out ahead of time as a spacing chart: plot an object's position at several moments on one sheet, and the gaps between the dots alone tell you whether you're looking at a skittish mouse or a lumbering elephant.
In CSS, animation-timing-function: steps(n) implements this directly — a small n means big, sparse jumps (light, fast); a large n means many tight steps (heavy, smooth).
The top ball below moves in 4 steps — the gaps are wide, so it reads as light and bouncy. The bottom ball moves in 14 steps over the same distance and duration — the gaps are tight, so it reads as heavier and smoother.
When to use
Tune the step count when you want a character or mascot to have personality. For everyday UI transitions, a smooth easing curve is usually better — reach for steps() only when you deliberately want weight, or a mechanical feel.