Do not use a switch when the change waits for submit
Aliases: deferred toggle · switch in forms · apply-on-save
What it is
If a field’s new value still has to be validated, signed, or written with other inputs in one commit, it should not be a switch. A submit-deferred binary belongs on a checkbox: the tick is a draft, save is the promise. A switch’s shape has already said “it is changed now”; asking for save afterwards puts two clocks on the same screen. “Receive marketing mail” on account creation, “urgent” on an approval, preferences that only commit on the last wizard step — those are submit clocks, not rocker clocks.
The constraint is timing, not whether the widget looks like a switch. Painting a checkbox as a sliding pill leaves the timing error in place.
Why it happens
People will not keep two clocks for one form. A sliding knob is planned as an immediate write: after turning notifications off they check the phone, they do not first finish the address and then save. If the actual write is still at the end of the queue, the check fails, they assume the system dropped the gesture, and they throw again or abandon later fields.
A submit clock needs one explicit commit that folds many fields into an atomic write, so failure can roll the whole ticket back. A switch submits one field early and splits the atom: other fields remain drafts while this one is already on the server. Partial success is harder to explain and harder to undo than a whole-form failure.
Where it stops holding
An autosave settings page may have no submit button, yet each row is still its own immediate write; a switch is fine. The real clash is “save in the footer, sliders in the rows.” A preview may mimic a switch if it is labelled not-yet-applied and leaving the preview restores the prior value; otherwise the preview is a stealth immediate write. Immediate writes that must queue on a weak network should go pending, not pretend the submit already succeeded — queuing is delay under immediate semantics, not a return to form commit. A wizard-midway switch that writes into the final payload, while abandoning the wizard drops it, should not be a switch in the middle at all.
Applying it
- On screens whose footer is save, submit, or next, use checkboxes for binary fields, not sliders.
- If the product insists on autosave, remove the footer commit so every row uses the same immediate clock; do not run two clocks.
- Approvals, signatures, and payments that must roll back as a whole keep every binary on the form.
- How to check: throw a slider, press no save, then inspect the value from another client or after refresh. If the value is there, this was not a submit scene and the switch was right; if the value is absent while the knob has moved, the clock lied.