The summary.
A COMPOSABLE MAY RUN MANY TIMES, IN ANY ORDER
So it must have no side effects and must not depend on being called once. Use the effect facilities for anything outside composition, and always clean up.
STATE FLOWS DOWN; EVENTS FLOW UP
Hoisting state makes composables reusable, testable and previewable. Keep screen state in a view model and transient interface state local.
Remembered values do not survive rotation unless the saving variant is used.
COMPOSE COMPARES REFERENCES, SO MUTATION IS NOT OBSERVED
Produce a new value rather than modifying a collection in place.
MODIFIER ORDER CHANGES THE RESULT
Each wraps the next. And always accept a modifier parameter on reusable composables, applied first.
USE STABLE KEYS IN LAZY LISTS
Otherwise state attaches to the wrong item when the list changes.
READ STATE AS CLOSE AS POSSIBLE TO WHERE IT IS USED
Reading too high causes large portions of the interface to recompose for a small change.
Measure recomposition rather than guessing, and check both themes at the largest font size.