Skeleton screens improve perceived load times, reduce bounce rates, and can...
Skeleton screens improve perceived load times, reduce bounce rates, and can reduce layout shift.
But in practice, I've found skeleton screens are hard to justify:
🚩 We have to keep the skeleton screen and the real UI in sync. This is extra work, and easy to forget as the design evolves.
🚩 The user often still experiences layout shift - it's often impossible to design a skeleton screen that perfectly matches all potential output.
🚩 It's slower. Ironically, we're loading *more* stuff in hopes of improving *perceived* performance, not actual performance.
🚩 It's a "band aid". If loading is so slow that a skeleton screen feels necessary, I'd rather optimize performance than try to "mask" the perf problem.

Do you know why hotels hang mirrors next to the elevators?
To distract you while you wait for the slow elevators. (I'd rather they fix the problem).
Skeleton screens are the same idea.
"Let's try to distract people from noticing our app is slow."
