Interaction Engineering · 2 / 10

The Three States: Loading, Empty, Error

AI-generated UIs default to one state: data ready, network fine, everything normal. The first screen users meet is often one of the other three: no data, waiting, or broken. Those three abnormal moments are exactly where experience splits. This lesson unpacks the three states one by one, each with an A/B duel.

Empty stateSkeleton screenThe three error elementsCopy rewrite
Normal is a pass. Abnormal moments are where you pull ahead

Ask AI for「a notes app」and it ships a screen preloaded with pretty fake data. A real user's first screen has no data. The first search may time out. The first sync may fail. AI won't invent how those moments look. Skip the ask, and it phones them all in.

StateAI's default phoned-in versionWhat it should look like
Empty stateA blank field, or a gray line「No data yet」Teach the next step: say what this is for, offer an action, ideally with an example
LoadingA bare spinner that looks the same at second one and second thirtySay how far you've gotten: show content shape first; make progress visible
Error stateAn alert dumps a code stack—or nothing happens at allPlain language plus a way out: what happened, why, what to do

Last lesson's considerate checklist all applies here: empty state tests anticipatory; loading tests informs in time; error state tests doesn't burden you with its problems. One state at a time.

Empty state is a new user's first screen—don't hand them a blank

In About Face 4, Chapter 8, Cooper likens helpful software to a good shop clerk: ask for directions and a good clerk also points you to a smarter option. Empty state is the user asking directions: I'm here—now what? A blank screen is a shrug.

A good empty state answers three questions: what is this for, what can I do now, and what will it look like when I do. The first two take one sentence plus a button. The third wants sample data or a template. Both notes apps below are first opens. Tap the one you find more considerate.

Notes app on first open A/B duel
Tap a card to vote; the verdict unlocks after
Plan A
notes.example.com
My notes0 notes
List area is blank; New hides in the top-right menu
Plan B
notes.example.com
My notes0 notes
No notes yet
Write the first one, or start from a template
Write the first note See what a sample note looks like
Says what this is for, offers a primary button, plus a sample entry
Don't bare-spin on loading—say how far you've gotten

Considerate software informs in time: progress users care about must be visible. A bare spinner only says「busy」. By second five, users suspect a freeze. A skeleton screen draws the content's shape first—you're almost there, and it'll look like this—then a progress line cuts most of the anxiety.

Which wait deserves which feedback—the three-tier wait psychology—was covered in the Psychology part. Here's a jump card; we won't reteach it.

Cross-Part link · Waiting psychology: the pain was never those 5 seconds0.1s / 1s / 10s three-tier feedback decisions, and why managing expectation beats raw speed—Psychology Part, lesson 2 covers it. Tap to jump.
Same 3-second wait, two ways to wait A/B duel
Both sides play a loading demo (teaching aid—you can pause). Tap the one you find more considerate
Plan A
chat.example.com
Messages
Loading…
Bare spinner: busy—busy with what, how far, how long left? Silent on all three
Plan B
chat.example.com
Messages
Fetching messages from the last 30 days…
Skeleton screen: content shape first, plus a progress line and how far you've gotten
The three error elements: what happened, why, what to do

In About Face 4, Chapter 15, Cooper is blunt on error messages: old-style dialogs either blame the user or dump a tech failure; most shouldn't appear at all. When you must speak, tell the user three things: what happened, why, and what to do now. All three make plain language. Skip「what to do」and you trap them in a dead end.

One more floor: never blame the user in the wording. Chapter 15's rule is there is no fault in the user's view—swap「You entered illegal characters」for「This field only allows letters and numbers」. Same info, different attitude. Two sync-failure prompts below. Tap the more considerate one.

Same sync failure, two ways to say it A/B duel
Tap a card to vote; the verdict unlocks after
Plan A
notes.example.com
My notes
Error
SyncException: ETIMEDOUT at
upload.ts:214 (code 10060)
Confirm
Exception stack on screen; the only exit is tapping「Confirm」and eating it
Plan B
notes.example.com
My notes
This note hasn't synced yet
What happenedYour latest edits are saved on this device. The cloud hasn't received them.
WhyThe network timed out—connection may be unstable.
What to doWe'll retry automatically when you're online, or you can sync now.
Retry nowNot now
All three elements present; local data safe and said so; two exits offered
Hands-on · Rewrite three weak lines into plain language

Copying the three-element formula isn't enough—you need the feel. The three error lines below match real AI output. Tap「Rewrite」on each, see the weak copy rebuilt with the three elements, and note where each one fails.

Error copy rewriter Rewritten 0 / 3
Tap「Rewrite」on the right of each line; weak copy strikes out; the three-element version expands
Operation failed. Please try again.Rewrite →
What happenedThe expense report didn't go out. Your draft is still saved.
WhyAn attachment is over the 10MB limit.
What to doCompress the attachment, or split it across two reports.
Original flaw:「Operation failed」never names which op;「Please try again」is empty advice—ten retries still fail, because the root is attachment size.
Error 422: Unprocessable EntityRewrite →
What happenedShipping info didn't save.
WhyThe phone number is one digit short—it's 10 digits now.
What to doAdd the missing digit and you can submit. We've moved the cursor there for you.
Original flaw: an HTTP status code is a developer log. Serving it to users is a blame dump—Case Card Four last lesson was exactly this.
You entered illegal characters!Rewrite →
What happenedThe username hasn't passed the check yet.
WhyUsernames only allow letters, numbers, and underscores. Spaces aren't allowed.
What to doSwap spaces for underscores—e.g. xiao_shan.
Original flaw:「illegal」plus an exclamation mark turns a space into a crime. Chapter 15's floor is: don't blame the user in wording—just spell the rule.
Self-check · How many states does your page cover?

Three states taught—close with a self-check sheet. Think of the page you last had AI generate. Check each of the five states you've actually built; coverage scores on the spot. This sheet is also a prompt template for AI: Lesson 9 shows how to paste the whole thing into a prompt.

State coverage self-check 0 / 5
Tap a row to check; uncheck and recheck freely; the verdict shifts by coverage tier
Default stateNormal view with full data—AI always builds this; free point
Loading stateSkeleton screen or progress copy; a bare spinner counts as half
Empty stateSays what this is for, offers an action; an example is better
Error stateWhat happened, why, what to do—all three elements present
Success stateSuccess must be visible—but don't take a bow with a modal (last lesson's duel)
State coverage0%
Key Takeaways

Abnormal moments are the split: AI defaults to「everything fine」. Unless you write empty state, loading, and error state into the brief, it phones them all in.

Empty state teaches the next step: say what this is for, offer an action, give an example. Empty state is a new user's first screen—a blank pushes them out.

Loading should say how far you've gotten: skeleton screen for content shape, plus progress copy. Wait-feedback timing lives in psy-2; we don't reteach it.

The three error elements: what happened, why, what to do—and never blame the user in wording (Cooper, About Face 4, Chapter 15). Better still: stop the error from happening at all. Next lesson covers error prevention and reversible actions.

Source: Original to Xiaoshan Academy's「Interaction Engineering」series; some interaction principles adapted from About Face 4: The Essentials of Interaction Design.