PLG OS

Implementation worksheet · 7 min read

An onboarding dismissal and opt-out policy

Offer three distinct choices and store each as its own decision: 'Not now' snoozes one flow for a set period, 'Don't show this again' ends one flow for that user, and a global onboarding opt-out stops optional tours, checklists and tips that the product starts. Write down what the opt-out doesn't cover, such as security, billing and legal notices, and deliver those through a channel the opt-out doesn't govern, so the two rules can never contradict each other. Guidance the user explicitly asks for, like replaying a tour from Help, still runs. Store every decision per user on the server, show the current state in settings, and make turning guidance back on as easy as turning it off.

Dismissal is the most honest feedback an onboarding flow receives, and it's easy to throw away by treating every close button the same. This policy covers a signed-in user of a web or mobile product receiving optional in-app guidance. Email and push preferences usually live in a separate preference center and are out of scope. Account-critical messages are deliberately excluded, for reasons the failure section makes concrete.

Put it into practice

1. Name the three choices and what each one suppresses

'Not now' affects one flow, temporarily. 'Don't show this again' affects one flow, permanently, for this version. The global opt-out affects every optional flow the product starts. Put the exact wording users see in the policy, because 'Close' and 'Skip' are ambiguous and each needs mapping to one of the three.

2. Separate optional guidance from required notices first

List every in-app message type and mark each optional or required. Required means the user must see it whatever their preference: a sign-in from a new device, a failed payment, a terms change your counsel says must be shown. Route required notices through the product's own notification component, not the onboarding layer. Check with counsel on which notices are legally required in your markets.

3. Give 'Not now' a duration, not a session

A snooze that ends with the session comes back at the next login, which users read as the product not listening. Give it a period (seven days in the worked example) and count it against your frequency budget, so a snoozed tour can't return sooner than any other prompt could.

4. Make 'Don't show this again' final for that flow version

Store the flow ID and version with the decision. Decide in advance whether a substantially new version may be shown once to people who dismissed the old one. If yes, say so in the policy and cap it at one re-show. Silent re-targeting on every edit turns 'never' into 'until we change the copy'.

5. Put the global opt-out where people look for it

A toggle in account settings, plus a link to it from the close menu of every optional tour. Show its current state. Turning guidance back on should take no more steps than turning it off, and should be reachable from the same place.

6. Keep user-requested guidance working

The opt-out stops guidance the product starts. If a user who opted out opens Help and chooses 'Replay the setup tour', run it. Refusing a tour the user just asked for isn't respecting a preference; it ignores a newer one.

7. Store per user, server-side, and test it

Local storage forgets across browsers and devices. Store the three decisions against the user's identity and sync them to every client that shows guidance. For team products, decide whether an admin can turn guidance off for a workspace, and make a member's own opt-out survive an admin switching it back on.

Dismissal and opt-out policy worksheet

Copy this structure into your review document and record your observed result for each row.

Dismissal and opt-out policy worksheet
Message or flowClassClose or snooze behaviorUnder the global opt-out
Welcome tourOptional'Not now' snoozes for 7 daysNot started
Setup checklistOptionalCollapses; tasks stay available in the productHidden; progress kept
Tip on the new Export buttonOptional'Don't show this again' ends it for this versionNot started
Replay tour from HelpUser-requestedCloses like any tourRuns, because the user asked
In-app surveyOut of scopeSurvey dismissal rules applyGoverned by the survey policy
New-device sign-in alertRequiredCloses after it has been shownStill shown; product notification system
Failed payment noticeRequiredCan be closed for the sessionStill shown; product notification system
Terms change noticeRequired if counsel says soCloses on acknowledgementStill shown; product notification system
Workspace admin turns guidance offAdmin settingApplies to all membersMember opt-outs survive an admin re-enable

A failure worth checking

The opt-out that swallowed a security notice. A team routes every in-app message through the onboarding tool because it's convenient. A user turns off tips. Weeks later a sign-in from a new country triggers a banner through the same tool, which honors the opt-out and shows nothing. Or someone notices and adds an override, and now the opt-out has an undocumented exception that users can't see. Separate the delivery path for required notices before offering an opt-out, not after the first incident.

Common questions

Should dismissing the setup checklist mark its tasks complete?

No. Dismissal is a statement about the checklist, not about the work. Keep task completion tied to the product events that prove it, so analytics never count a dismissed checklist as activation, and let the user bring the checklist back from settings or Help.

Is an opt-out for onboarding tours legally required?

This policy doesn't answer that, and the answer can depend on jurisdiction and on what data the guidance uses. Check with counsel. The case made here is product trust: a preference users can see, change and rely on.

Basis and scope

This is a proposed implementation method using illustrative examples, not a measured benchmark or a customer case study. Prepared with AI assistance. Validate product-specific behavior against current documentation and your own test environment.

Continue with PLG OS

Explore onboarding →