If empty is needed, add an explicit empty option
Aliases: none of the above · not applicable · prefer not to say
What it is
When “none of these apply” is itself a legal answer, a radio group cannot say so by remaining untouched. It needs an explicit empty option inside the group: none, not applicable, not now, none of the above. Empty here is a named value, not the absence of a click. “Prefer not to say” on a survey and “receive no messages” on a channel list write empty as an option rather than turning the radio into a checkbox that can be peeled off.
An untouched group and a group set to “none” are different data: missing versus refusal. The named option exists to keep the refusal, not to collapse missing and refusal into the same null.
Why it happens
A radio writes a group-level value and cannot walk to true emptiness. Someone who needs “I explicitly want none of these” can only move to a member that stands for empty. Without that member, people stall on untouched (and get blocked at submit) or pick the least-wrong real item. Coerced picks pollute the dataset: every row looks valued, yet some values are noise forced by requiredness.
The empty option must be as visible and as clickable as the real items. Hide it in a disclosure, a tiny link, or an out-of-group reset, and people cannot find the legal exit, so they return to hammering the selected item. Copy has to say which empty it is: “none” and “not yet decided” are not the same value; mixing them stacks refusal on delay.
Where it stops holding
A legally required field (one invoice type must be chosen) should not grow an empty option to look friendly; empty is illegal there, and a submit block is correct. Default-value strategy is about whether to pre-select a real item; offering a member named “none” is a separate decision — you can skip a default and still offer “none,” or skip a default and forbid “none.” “None of the above” in a multi-select set usually turns other ticks off; that is an extra mutex rule on checkboxes, not a radio empty option. When writing direction or long labels shove “none” onto a wrapped last line, it loses parity with the first item and choice is pulled upward.
Applying it
- Decide whether empty is missing or refusal. Refusal must appear as a named, clickable member inside the group.
- Draw that member with the same dots and type size as the others; do not demote it to an out-of-group reset or a hidden link.
- Name the empty specifically: “no notifications,” “not applicable,” rather than one vague “none” that means both refusal and later.
- How to check: on a question that should allow empty, see whether untouched and explicit “none” are stored apart; then watch for hammering on the selected item. Persistent hammering means the empty option is invisible or not read as an exit.