Streaming a response changes your UI contract, not just your latency
Partial output means every intermediate state is user-visible, including the wrong ones.
We use Google Analytics to see which pages help people. No ads, no profiles. Privacy Policy
Partial output means every intermediate state is user-visible, including the wrong ones.
Modifier.clickable adds accessibility semantics, focus, keyboard activation, ripple and a minimum touch target on top of tap detection. Reaching for detectTapGestures instead silently drops all of it.
Parallel agents editing one checkout interleave their changes. Isolation costs disk, not correctness.
pointerInput gives you a coroutine scope over raw pointer events. Understanding that gestures are suspending loops rather than callbacks explains the whole API, including why the key parameter matters more than it looks.
Untracked prompt edits are untracked behaviour changes.
Compose's accessibility checks catch touch targets, contrast and missing labels automatically. The failures they cannot detect — wrong labels, bad order, gesture-only actions — need a person, and knowing the split makes both cheaper.
An abstraction written for a second implementation that never arrived is pure indirection.
Without the rejected options and the reason, every new engineer re-opens the question.
Deciding the success metric before building is what makes deletion possible afterwards.
Time-in-app rose because loading took longer. A metric that improves under a regression is measuring the wrong thing.
Screen readers traverse in layout order, which breaks when a floating action button, a sticky header or a two-column layout puts visual priority somewhere else. Traversal groups and indices reorder without moving anything.
A composite component produces one semantics node per child by default, so a card becomes four swipes. mergeDescendants, clearAndSetSemantics and invisibleToUser control the shape of the tree.