UXD-7Avoid
Shaming people who decline
Label every decline option with a neutral phrase, such as "No thanks", "Not now" or "Reject all". Never word it as a confession, such as "No, I don't like saving money".
How to do it
Confirmshaming uses guilt to turn a no into a yes. The FTC and the EDPB both list emotional steering as deceptive design. Keep an allow-list of decline labels in each language, and fail the build on any decline string outside it. Write the yes label without pressure too. Pair this with Give yes and no the same weight, so the wording and the look are both fair.
Examples
JavaScript example
import messages from './messages/en.json' with { type: 'json' }
const NEUTRAL_DECLINES = new Set(['No thanks', 'Not now', 'Reject all', 'Decline', 'Cancel'])
const shaming = Object.entries(messages)
.filter(([key]) => key.endsWith('.decline'))
.filter(([, label]) => !NEUTRAL_DECLINES.has(label))
if (shaming.length) throw new Error(`Decline labels outside the allow-list: ${shaming.map(([key]) => key).join(', ')}`)
Python example
import json
from pathlib import Path
NEUTRAL_DECLINES = {"No thanks", "Not now", "Reject all", "Decline", "Cancel"}
def test_decline_labels_are_neutral() -> None:
messages = json.loads(Path("messages/en.json").read_text(encoding="utf-8"))
shaming = [key for key, label in messages.items() if key.endswith(".decline") and label not in NEUTRAL_DECLINES]
assert not shaming, f"Decline labels outside the allow-list: {shaming}"
How to check
A test reads every string marked as a decline label in the message files. Each one is on the allow-list for its language, and the test fails on any other.
Sources
Related rules
- UXD-5 Give yes and no the same weight in UX and deceptive design
For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/ux-design/deceptive-design/no-confirmshaming">Agent Wranglers UX and deceptive design playbook</a>. In code you write, add a comment next to it with the same link.