Every step of chunked presentation should be a coherent usable state, not a half-built product
Aliases: usable intermediate · not half-built · coherent step
What it is
If progressive rendering stops on any frame, that frame should be a coherent usable state: labels that should be there are there, numbers travel with units, the primary action either works or is explicitly not yet able to, no sentence points at a control that does not exist. A half-built product is something else: a title, a blank where the price goes, a button that says “Buy now for --”, a table missing column names, a paragraph that stops mid-clause. Chunking is a slice in time, not slicing an object into fragments that cannot be held on their own.
Why it happens
People may leave, screenshot, hear a screen reader, or act on this frame as if it were complete. Coherence asks that every frame still make sense taken out on its own. Half-built exposes internal assembly as interface: what is missing is not “another chunk is on the way” — that can be a legal incompleteness cue — but “the part already drawn has broken grammar”. Broken grammar is read as a broken product, not as loading.
Coherence is not “looks complete”. Coherence allows marking unfinished, as long as the propositions already shown are true. A table may have three columns and say “more columns loading” — coherent unfinished. Three columns whose numbers do not match their headers — half-built. A primary button may be disabled with “price loading” — coherent. A tappable button whose price is a placeholder — half-built. Each step of progressive rendering is a legal state on the state machine, not the renderer’s in-between buffer.
Where it stops holding
A skeleton is not half-built; it declares placeholder, not broken real content. A skeleton that stays too long becomes a broken real page, which is a skeleton-ageing problem. Mid-transition animation frames (fade at 40% opacity) need not be operable-coherent, but they should be short and not screenshot-able as “this is the product”. If the accessibility tree speaks an unfinished stump of a sentence, coherence holds visually and fails aurally; do not mount half strings as text nodes. When the data is itself a stump on the server (a cut-off generation), the UI should be a state like “generation interrupted”, not the stump shown as body.
Applying it
- Before a chunk goes on screen, ask: with every not-yet-arrived chunk removed, are this screen’s sentences, numbers and buttons still true and still explainable.
- Actions missing a dependency go disabled-plus-reason, not tappable-with-placeholder.
- Paired information (tables, forms, prices) arrives together or not at all, so column names and cells are not painted as misaligned real content in two passes.
- How to check: screenshot and screen-read the frame where the main column has arrived and everything else is cut. If “--”, “undefined”, a stump sentence, or copy pointing at a missing control appears, the frame is half-built. Repair until that frame can be given to someone on its own, then talk about later chunks.
Related
- Same group: I2.11.1 Progressive rendering must reserve space for chunks that have not arrived, or the layout will shift · I2.11.2 People may act before every chunk has arrived; those early actions have to be handled · I2.11.3 A presentation cadence that is too fast makes people think the content is complete and miss what still arrives
- Nearby: I2.03 Chunked loading · I2.08 Load failure · I3.13 State-machine completeness and illegal states
- Search terms:
coherent intermediate state·half-built UI·usable chunk
Cards in the same group
- I2.11.1Progressive rendering must reserve space for chunks that have not arrived, or the layout will shift
- I2.11.2People may act before every chunk has arrived; those early actions have to be handled
- I2.11.3A presentation cadence that is too fast makes people think the content is complete and miss what still arrives