#State completeness
Not every component needs every state. It needs the states its own task can reach, which is a shorter and more specific list.
A useful candidate-state set:
- initial
- loading
- empty
- ready
- pending
- success
- error
- disabled
- partial success
- permission denied
- conflict/stale
Not every component needs every state.
Ask:
Which of these states can actually occur in this task?
Then design those.
#Feedback loops
Every meaningful action creates a loop:
- intent
- ↓
- action
- ↓
- system receives action
- ↓
- system changes
- ↓
- user perceives result
The loop is incomplete when the user cannot tell what happened.
Examples:
- save succeeds but UI never updates,
- upload completes but file never appears,
- deletion succeeds but row remains,
- background job finishes invisibly.
#Failure loops
Failure creates:
- action
- ↓
- failure
- ↓
- explanation
- ↓
- recovery
- ↓
- retry or safe exit
An error banner may explain failure but still leave the user stranded.
#Partial success
Batch work may produce:
- 100 requested
- 94 succeeded
- 6 failed
Do not label that simply "success" or "failure."
A complete flow may need:
6 failed
Review failures
Retry failed
depending on task scale.
#Interruption and re-entry
Users leave.
Connections fail.
Long tasks continue.
For significant-duration work ask:
- Can the user navigate away?
- Does work continue?
- Is status persisted?
- Can they return?
- Is completion discoverable?
- Can failure be revisited?
Not every short mutation needs this.
Long-running workflows often do.
#The completion envelope
Use three boundaries.
#Minimum complete
The minimum required for correct interaction.
- input
- validation
- pending
- success
- failure
- preservation/recovery
#Product-complete
Adds behavior clearly established by the product.
- permissions
- navigation conventions
- existing actions
- existing feedback patterns
#Extended scope
Adds a new capability.
Requires explicit product approval.