Designer Luke Wroblewski and others named and popularised the pattern in the early 2010s, and it spread widely once Facebook rolled it into its apps around 2013–2014. A spinner only says "something is loading"; a skeleton sets a structural expectation — "content shaped like this is coming."
So even with identical real load time, a skeleton feels like a shorter wait than a spinner (see: perceived-performance). But if the skeleton's shape doesn't match the real content closely enough — say, drawing an image block for a card that turns out to have no image — the layout jumps jarringly once it resolves.
The card below starts as shimmering grey blocks, periodically resolves into real content (a coloured avatar, dark text), then resets back to skeleton.
When to use
Use it for predictably structured content — cards, lists, profiles. Match the skeleton's size and count to the final layout closely to avoid a jarring shift once it resolves.