What good SaaS onboarding actually is
SaaS onboarding is the guided first run of a product. It runs from signup to the first real piece of work a user finishes, not the end of a tour. Good onboarding covers account setup, data import, permissions, and inviting a teammate. A welcome modal is one small piece of that job, not the whole thing.
Here is the thesis this post argues for. Onboarding completion is persisted state, not a screen. If progress does not survive a reload, and does not follow the user to a second device, the onboarding is not built. It is a demo.
The real stake is not a funnel metric. In the first session, a user has zero investment and full permission to leave. That is the one session where they owe you nothing.
Start with the six patterns you are actually choosing between, and the failure mode built into each one.
Six onboarding patterns and the failure mode of each
Every pattern below works somewhere. Each one also fails in a specific, predictable way. Vendors show you the pattern working. Nobody shows you the failure. Here it is, next to when the pattern is actually the right call.
| Pattern | Best for | Real failure mode | Ship it when | |---|---|---|---| | Product tour | Orienting people in a genuinely unfamiliar layout, one time | Blocks the interface before any value is shown, so it mostly teaches people where the close button is | The layout itself is what confuses people, not the concept | | Onboarding checklist | Setup with real dependencies, like connect a source, then invite a teammate | Fake progress. Items tick on trivial actions, so the bar moves while nothing real got done | Every item maps to work the user would have had to do anyway | | Empty state as onboarding surface | Teaching in place, on the one surface every user sees | Nobody designs it, so it ships as a grey box with a noun in it | The screen has a single, obvious next action | | Setup wizard | One time configuration that genuinely must complete before the product works | Puts all the work up front, before the user knows if the product is worth it | The config is short, unavoidable, and can be resumed later | | Contextual tooltip | One feature, explained at the exact moment of need | They accumulate. Nobody owns removal, so the product ends up permanently noisy | There is a retirement date and an owner | | Everboarding | Products that keep shipping, introducing capability when the user reaches the context for it | Needs eligibility rules and state for each user, so it decays faster than anything else without an owner | The product ships often enough that a one time tour goes stale fast |
Pick the pattern whose failure mode you can live with. Not the one with the best demo. A checklist that fakes progress gets caught by a user in a day. A tour that blocks the interface gets skipped by everyone who already knows the product.
The twelve rules below are what separates a working version of any of these six patterns from a broken one.
12 rules for SaaS onboarding that actually hold up
-
Decide the first real outcome before you design a screen. Name the one artifact or action that proves the product works: a sent invoice, a saved chart, a published page. A lot of the surrounding feature set gets deliberately left out of a first version, and onboarding should only point at what actually shipped.
-
Make the first run resumable. Store completion server side, tied to the account, not in localStorage. Otherwise the flow restarts the moment someone signs in on a phone or a second laptop.
-
Design the empty state as the onboarding surface. It is the one teaching moment every user reaches, including everyone who dismissed the tour and skipped the checklist. Treat it like a real screen, not a placeholder.
-
Ask for the minimum at signup. Defer the rest. Every extra field is a decision the user makes before you have shown them any value. Move company size, role, and team size into the product itself.
-
Let people skip, and remember the skip. A dismissal that reappears next session reads as a bug. It also tells the user you were not listening the first time.
-
Show progress that reflects real work. Never fake a percentage. Never tick a checklist item for an action the user did not actually intend to take. Trust breaks the first time someone notices.
-
Seed the account so it is never blank on arrival. Sample data, a starter project, or a labeled template gives people something to react to. Make it obviously fake and easy to delete.
-
Teach where the feature lives, not in a stack of modals. A tooltip next to the button beats an explanation three screens earlier. Proximity teaches faster than a paragraph of copy.
-
Separate the account creator's first run from an invited teammate's. They arrive with different permissions and different questions. Sending them through identical screens ignores that.
-
Design for the states, not just the happy path. Failed import, expired invite, read only role, empty search, half connected integration. Onboarding usually only gets designed for the case where everything goes right.
-
Give people a way back in. A tour or checklist that gets dismissed should stay findable on purpose, from a menu or a help panel.
-
Instrument before launch. Agree on one event per step, with a stable name, before the flow ships. Adding analytics after the fact means guessing what actually happened.
Principles only get you so far. Next is a checklist you can run against a real build before you ship it.
The SaaS onboarding checklist, written out in full
The twelve rules above are principles. This is different: a list of yes or no questions you can run against a live build. Nothing here is subjective. You either pass each check or you do not.
- Reload the page mid flow. Does progress survive?
- Sign in on a second device. Does completion carry over?
- Abandon the flow at step two and come back a day later. Where does the product put you?
- Skip everything. Is the product still usable, and does it stop asking?
- Finish onboarding, then try to find the tour again on purpose. Can you?
- Arrive as an invited teammate instead of the account creator. Is it a different path?
- Arrive with a read only role. Does onboarding ask for something that role cannot do?
- Open every primary screen with zero data. Does each empty state say what to do next?
- Run the flow at 375px wide. Does anything overflow, clip, or trap focus?
- Trigger a failed import or a rejected file. Is there a recovery path, or a dead end?
- Complete the flow using only a keyboard. Can you finish it?
- Turn the tour off behind its flag. Does the app still work without it?
- Check one checklist item against reality. Does it tick only when the work is genuinely done?
- Delete the seeded sample data. Does the app fall back to a designed empty state?
- Confirm every step fires one analytics event with a stable, agreed name.
When I run this list against a live build, items 1, 2, and 4 catch most of the real breakage before anything else does.
Short on time before a release? Run items 1, 2, and 4 first: reload, second device, skip everything. Those three catch most of the broken state on their own.
If you cannot answer yes to items 1, 2, and 4, the flow is not finished. It does not matter how good the screens look.
This checklist is about the first run's behavior, not its polish. A visual credibility pass on an existing MVP fixes how a product looks. It does not touch any of this.
Four public products, read for onboarding craft
These are public products, read for structure only. What follows is what each one asks a new user to do first, and which pattern it leans on. No claimed metrics, no internal detail I cannot verify from using the product myself.
Linear teaches through empty states, defaults, and inline keyboard hints rather than a blocking tour. Setup pushes toward getting real work into the tool, creating or importing issues, instead of watching a walkthrough. The tradeoff: because so much rides on defaults and shortcuts, the product still asks a fair amount of a brand new user, learning where things live with very little explanation.
Notion leans on templates rather than a walkthrough. Signup asks what you plan to use the workspace for, and the account arrives seeded with pages instead of an empty sidebar, with a template gallery a click away. The tradeoff is choice itself: a new user can spend the first session browsing templates instead of finishing one real piece of work.
Slack organizes its first run around one concrete action inside a channel, rather than a tour of features. That keeps the first session anchored to something real. The tradeoff is that a lot of Slack's surface area, from huddles to workflows, stays undiscovered until a teammate or an admin points it out.
Figma does most of its teaching inside a file rather than in front of one. New accounts get starter and tutorial files to open, and the collaborative parts, comments, multiplayer cursors, components, mostly land the first time a user actually hits them. The tradeoff: someone opening a complex shared file with no context still has to guess what several panels do.
None of this holds up unless the underlying state is built correctly, which is the part almost nobody writes about.
Onboarding as an implementation problem, not a modal
Here is the part most onboarding advice skips. Onboarding state has to live somewhere, and where it lives decides whether the flow actually works.
The right place is a record per user, stored server side, tracking which steps are complete. Version that record. When you redesign the flow next year, existing accounts should not have last year's onboarding resurrected on them by accident.
The second device test is the cheapest way to prove this is real. Sign in on a phone after finishing setup on a laptop. If the product asks you to start over, the state was never actually persisted. It was a client side flag pretending to be progress.
localStorage fails this test quietly. It looks like it works, because most teams test onboarding once, on one device, in one sitting. I have seen the bug only surface weeks later, from a support ticket filed by someone who switched devices.
Abandonment needs a design too, not just an accident to tolerate. A user who quits halfway through setup will come back. What do they see? What happens to the half filled form, or the connected but unconfigured integration? Decide that on purpose.
Feature flagging the tour matters for the same reason. Onboarding is one of the highest churn surfaces in a product. It changes with every redesign, every new feature, and every pricing tier. It needs to be switchable and removable without a full release.
All of this breaks down for a structural reason. The flow gets designed as a set of screens. The state gets implemented later, as an afterthought, by whoever picks up the ticket. Nobody owns the seam between the two. The fix is not a process. It is having the same person design the screens and build the state behind them.
This post is about the first run only, from signup to one real outcome. Designing for the thousandth use, the tables, navigation, and permissions a user lives in every day after that, is a different problem with different rules.
Once the state is solid, there are exactly two numbers worth watching, and no more.
Measuring onboarding without turning it into a growth project
Two things are worth measuring here. Activation: the first real outcome you named back in rule one. And time to that outcome, from signup to done.
Most early SaaS products do not have enough traffic to A/B test an onboarding flow properly. A test with too few users just measures noise. Watching five people run the flow tells you more in an afternoon than a dashboard will tell you in a month.
None of that measurement matters without someone responsible for acting on it.
Who should own onboarding
The straight answer: one owner who can change both the interface and the code that stores its state.
In a small team, that is usually a product designer who ships their own work, or a design engineer. Onboarding cuts across screens and server state in a way that resists a clean handoff.
Split ownership, a growth team on the funnel and an engineering team on the account model, and you get exactly the failure this whole post describes: state that breaks the moment a user opens a new tab.
Onboarding is not a launch task you finish once. It needs a maintainer, the same way a design system does. If you are hiring that out, knowing how to vet a SaaS design agency matters as much as the pitch deck it shows you.
If your product's first run still feels like a demo instead of a state your users survive, that is what a SaaS design engagement is for.