Lesson 11 of 30
'Show a loading state' collapses three genuinely different situations into one instruction. A spinner, a skeleton, and an empty state each answer a different question, and using the wrong one is a real, common bug.
12 min read
Every option explains itself — why the right one is right, and why each wrong one is wrong. Miss one and it comes back later on a spaced-repetition schedule.
Question 1 of 3
A list view with a predictable card layout (avatar, title, two lines of text) currently shows a plain spinner while data loads. What's the strongest reason to switch to a skeleton instead?
Hints without spoilers, and a plain explanation of why a wrong answer was wrong — answered only from this lesson. Free account, no card.
Sign up freeWhat interviewers actually ask about this, and what a strong answer has to cover.
A strong answer covers
Likely follow-ups
"Add a loading state" gets treated as one problem when it's actually three, and conflating them is where most of the real mistakes happen:
Both cards start loading. The left shows a skeleton — placeholder blocks already sized and positioned like the real content. The right shows only a spinner.
The difference isn't cosmetic. A spinner-based card jumps from an undifferentiated circle to a full layout the instant data arrives — a discontinuous change the eye has to fully re-parse. A skeleton-based card's placeholder blocks are already claiming the exact screen space the avatar, title, and body text will occupy, so when real content swaps in, the layout doesn't move and the user's attention doesn't have to restart from zero. That's the actual mechanism behind "skeletons feel faster" — it's not an illusion about speed, it's a reduction in re-parsing work at the moment content lands.
"Walk me through how you'd handle this list loading" is a real, common frontend interview prompt, and naming all three states — spinner for unknown-shape waits, skeleton for predictable-shape waits, and a designed (not default) empty state — signals a candidate who has actually shipped data-heavy UI, not just happy-path components.