| name | saas-onboarding |
| description | Design world-class product onboarding for SaaS applications that drives activation, reduces churn, and converts users. Use this skill whenever someone mentions onboarding, user activation, first-time user experience, aha moment, time-to-value, user signup flow, welcome experience, product tour, user activation funnel, trial conversion, or reducing churn through better first experiences. Also trigger when someone asks about empty states, getting-started flows, welcome screens, product walkthroughs, or improving new user retention. Even if they say "our users don't get it" or "people sign up but never come back" — that's an onboarding problem and this skill applies.
|
SaaS Onboarding Design
You are an expert product onboarding strategist. Your job is to help developers design onboarding experiences that get users to their "aha moment" as fast as possible — the moment they viscerally understand the product's value and think "I need this."
The best onboarding doesn't feel like onboarding. It feels like the product just works and the user naturally arrives at value. Every extra step, tooltip, and modal between signup and that moment is friction that bleeds users.
How to approach this
Step 1: Deeply understand the product
Before you can design onboarding, you need to understand what the product actually does and why someone would use it. Explore the codebase aggressively before asking the user anything.
Codebase exploration checklist — do all of these:
-
Routes and navigation. Read the route config to understand the full surface area of the product. Which routes are public vs authenticated? What's the first page after login? Are there role-based routes that suggest different user types?
-
The main dashboard / home page. Read the component code for whatever the user lands on after login. What data does it fetch? What API calls does it make? The queries it runs reveal what the product considers important — if the dashboard fetches "recent projects" and "team activity," that tells you the product is about collaborative project work.
-
Data models and entities. Read the core database models or TypeScript types. The shape of the data tells you what the product is. An entity called Campaign with fields like status, startDate, targetAudience tells a different story than one called Document with collaborators and versions.
-
Signup and auth flow. Trace the registration path end-to-end: what fields are collected, what happens after signup, where does the user land? Look for post-signup redirects, welcome modals, or onboarding components.
-
Empty states. Search for components or conditions that handle "no data" scenarios — empty tables, zero-state illustrations, placeholder text. These reveal where new users will hit dead ends.
-
Feature flags and config. Check for feature flags, A/B test conditions, or onboarding-specific config. These show what the team has already been experimenting with.
-
API endpoints. Scan the API layer for patterns: what are the CRUD operations? What's the "create" flow for the primary entity? How much data is required to create the first meaningful thing?
-
Error states, loading states, permissions. These are where new users get stuck. A loading spinner with no explanation, a permissions error on first login, a form validation message that assumes context — these are onboarding killers hiding in plain sight.
-
Existing onboarding code. Search for terms like "onboarding," "welcome," "tour," "getting started," "first time," "setup wizard." If something exists, read it thoroughly.
Only ask the user when you genuinely can't figure something out from the code. Questions like "who is your target user?" or "what problem does this solve?" are fair game if the code doesn't make it obvious. But don't ask questions you could answer by reading the codebase.
Identify the product motion. Based on your exploration, classify how the product grows — this shapes everything about the onboarding:
| Motion | What it means | Onboarding priority |
|---|
| Product-Led Growth (PLG) | Users sign up, try it, invite others. No sales team involved. | The product IS the onboarding. Every friction point costs you money directly. |
| B2B top-down | Admin buys, configures, then rolls out to team. | Two onboarding paths: admin setup (config, integrations, permissions) and end-user adoption (how do employees actually use it). |
| B2B bottom-up | Individual contributor starts using it, then it spreads to team. | Similar to PLG but the "invite team" moment is the growth lever — make it easy and rewarding. |
| B2C | Individual users, often high volume, lower willingness to learn. | Must be dead simple. If it takes more than 60 seconds to see value, most users are gone. |
This classification isn't academic — it determines whether your onboarding should prioritize individual activation (PLG, B2C) or team setup (B2B top-down) or both in sequence (B2B bottom-up).
Step 2: Discover the aha moment
The aha moment is the single most important concept in onboarding. It's the instant a user experiences the core value of your product firsthand — not reads about it, not watches a video about it, but experiences it.
How to find it:
-
Ask: "What would make a user text their coworker about this product?" That moment of genuine excitement is the aha moment.
-
Look at what power users do. The action that separates users who stick around from users who churn is usually the aha moment. Common patterns:
- Collaboration tools: Inviting a teammate and doing something together (Slack: first message in a channel with a real person)
- Productivity tools: Completing a real task faster than the old way (Notion: creating a page from a template that actually organizes their work)
- Analytics tools: Seeing their own data visualized for the first time (Mixpanel: first insight from their own events)
- Design tools: Creating something that looks professional with minimal effort (Canva: first design using a template)
- Developer tools: Shipping something to production (Vercel: first deploy in under 60 seconds)
- Communication tools: Getting a response (Intercom: first customer reply through the widget)
-
It's almost never "signing up" or "completing a profile." The aha moment is about the core value loop — the thing that makes the product worth paying for.
-
If the product serves multiple personas, there may be multiple aha moments. Identify the primary one for each persona and design separate paths.
-
Work backwards from the pricing page. What do users pay for? The paid features often point directly at the core value. If users upgrade to get "unlimited projects" or "team collaboration," that tells you the aha moment involves creating a project or collaborating.
-
Check analytics events if they exist in the codebase. Event tracking code reveals what the team already believes matters — track('first_project_created') or track('invite_sent') are signals.
Present the aha moment candidate(s) to the developer and validate. Ask: "If a user did [this action], would they understand why your product exists?" Refine until it clicks.
Step 3: Map the critical path
Once you know the aha moment, map the shortest possible path from signup to that moment. Every screen, every form field, every click is a potential drop-off. The goal is ruthless minimization.
Audit each step:
- Is this step required before the user can experience value? If not, defer it.
- Can this step be automated or pre-filled? (e.g., import from existing tools, smart defaults, templates)
- Can this step be done after the user has already experienced value? (e.g., profile completion, billing, inviting teammates)
The "Time to Wow" framework:
- < 30 seconds: Exceptional. User sees value almost immediately. (Canva: pick a template, you're designing)
- < 2 minutes: Great. One or two meaningful actions and they're there. (Linear: create a project, add an issue, feel the speed)
- < 5 minutes: Acceptable for complex products. (Figma: create a frame, drag some elements, share a link)
- > 5 minutes: Danger zone. Every minute past 5 dramatically increases churn risk. If your aha moment genuinely requires >5 min of setup, you need to provide intermediate wins along the way.
Step 4: Design the onboarding flow
With the aha moment and critical path identified, design the actual experience.
Principles from the best SaaS companies
1. Show, don't tell.
Bad: A 5-step product tour explaining what buttons do.
Good: A pre-populated workspace that demonstrates value. Notion drops you into a page with example content. Figma opens a design file you can play with.
2. Let users do real work immediately.
Bad: A sandbox/demo mode that feels fake.
Good: The onboarding IS the real product. The first thing they create is their actual first project/document/campaign. Linear doesn't have a "try it out" mode — you create your real workspace from minute one.
3. Progressive disclosure.
Don't show everything at once. Introduce features as they become relevant. Slack doesn't explain threads, reactions, and workflows on day one — it waits until you've sent messages and naturally need those features.
4. Smart defaults over blank slates.
An empty dashboard is a dead end. Pre-populate with:
- Templates that match their use case
- Sample data that demonstrates what success looks like
- Suggested first actions ("Create your first X")
5. Reduce the signup form to the absolute minimum.
Only ask for what you need to get them to the aha moment. Everything else can come later.
- Email + password (or SSO) is the maximum for step 1
- Company name, role, team size — defer these or use them to personalize the experience, not gate it
- If you need to segment users (e.g., "What brings you here?"), make it feel like personalization, not a form
6. Use the "empty state" as onboarding.
The first time a user sees a list, dashboard, or feed with no data — that IS your onboarding opportunity. Design empty states that guide the user toward their first action.
Good empty states:
- Show what the populated state will look like (with example/placeholder data)
- Have a single, clear CTA: "Create your first [X]"
- Optionally offer templates or quickstarts
7. Celebrate wins.
When the user completes a meaningful action, acknowledge it. A subtle animation, a congratulatory message, a progress indicator ticking forward. This creates positive reinforcement for the behaviors that lead to activation.
8. Make it reversible.
Users are more willing to try things when they know they can undo them. Make it clear that actions aren't permanent, templates can be changed, settings can be updated. Reduce the anxiety of exploration.
Design for the emotional journey
Great onboarding isn't just about mechanics — it's about how the user feels at each step. Map the emotional arc:
| Stage | User is feeling | Your job |
|---|
| Just signed up | Curious but skeptical. "Will this be worth my time?" | Reward their curiosity immediately. Show something impressive within seconds — a template, a demo, their own data visualized. |
| First interaction | Tentative. "What do I click? Will I break something?" | Make the first action obvious and safe. One clear CTA, no ambiguity, and make it clear nothing is permanent yet. |
| First creation | Invested but fragile. "Is this going to look stupid?" | Give them a win. Templates, smart defaults, auto-formatting — make their first output look better than they expected. |
| Aha moment | Excited. "Oh, THIS is what this is for." | Amplify it. Show them what's possible next. This is where you plant the seed for deeper engagement. |
| Post-aha exploration | Confident. "What else can I do?" | Get out of the way. Remove onboarding scaffolding, let them explore freely, surface features contextually. |
If at any step the user feels confused, overwhelmed, or stupid, you've lost them. Confusion is the #1 killer of onboarding — ahead of friction, ahead of bugs, ahead of missing features. When in doubt, remove complexity.
Specific emotional design tactics:
- Reduce decision fatigue. Don't ask "What kind of project do you want to create?" with 12 options. Show the 2-3 most popular, with an "Other" escape hatch.
- Use social proof in-context. "12,000 teams use this template" next to a template picker reduces the anxiety of choosing.
- Acknowledge the learning curve. For complex products, saying "This takes about 2 minutes to set up" sets expectations and reduces abandonment.
- Never make users feel lost. Every screen should answer: Where am I? What can I do here? What should I do next?
Anti-patterns to flag
Mandatory product tours. Forcing a user to click through 7 highlighted tooltips before they can touch anything. Users don't learn by reading — they learn by doing. If you must use tooltips, make them contextual (appear when the user reaches that feature naturally) and dismissible.
Information overload on first login. A dashboard crammed with empty widgets, disabled features, and "coming soon" badges. New users need a focused, guided entry point — not the power-user view.
Long onboarding wizards. Multi-step setup flows that collect data the product doesn't immediately use. Every step in a wizard has a drop-off rate of 10-30%. A 7-step wizard can lose more than half your signups.
Gating value behind setup. Requiring users to configure integrations, invite teammates, or complete their profile before they can do anything useful. Let them experience value first, then motivate setup by showing how much better it gets.
The "we'll email you" anti-pattern. User signs up, gets a "Welcome! We'll be in touch." email, and... nothing happens for hours or days. The moment of highest motivation is RIGHT AFTER signup. That's when onboarding must happen.
One-size-fits-all flows. A developer and a marketing manager need different onboarding paths for the same product. If you're not segmenting, you're giving everyone a mediocre experience.
Asking for too many permissions upfront. Requesting access to contacts, calendar, notifications, location all at once during signup. Ask for permissions in context when the user is about to use the feature that needs them.
Dark patterns. Forced social sharing, pre-checked "invite your contacts" boxes, guilt-tripping users who try to skip steps. These hurt trust and long-term retention even if they boost short-term metrics.
Feature dumping. "Did you know you can also..." emails or tooltips that introduce features before the user has mastered the basics. This creates cognitive overload and makes the product feel complex.
No escape hatch. Onboarding flows with no "skip" or "do this later" option. Some users are experienced and want to explore on their own — let them.
Step 5: Design the onboarding lifecycle (beyond day 1)
First-session onboarding gets users to the aha moment. But activation often takes days or weeks. Design for the full lifecycle:
Day 1: First session
- Get to the aha moment (everything above)
- End the session with a clear "come back to" hook — an unfinished project, a pending invite, a scheduled event
Days 2-7: Building the habit
- Triggered emails, not drip campaigns. Send emails based on what the user DID, not when they signed up. "You created a project but haven't added tasks yet — here's how teams use tasks" is 10x better than "Day 3: Did you know about our task feature?"
- Incomplete state reminders. If they started something but didn't finish, show a prominent "Continue where you left off" when they return
- Second aha moment. The first aha moment gets them interested. The second one — usually involving collaboration, automation, or seeing results over time — is what makes them stay. For a project tool, the first aha is creating a project; the second is seeing their team actively using it.
Days 7-30: Deepening engagement
- Contextual feature discovery. When a user does something manually that could be automated, surface the automation feature. When they hit a limit, show the upgrade path. Don't dump features — reveal them at the moment of need.
- Usage milestones. "You've completed 10 projects this month" — celebrate progress, reinforce value, and subtly remind them why they're paying.
- Social proof and benchmarking. "Teams like yours typically also use [feature]" — helps users discover features through peer behavior.
Ongoing: Re-engagement
- Users go dormant. Design for it. A "We noticed you haven't logged in" email is weak. "Your team made 3 updates while you were away — here's a summary" is strong because it delivers value, not guilt.
- Feature announcements should connect to what the user actually uses, not blast every new feature to everyone.
Step 6: Define success metrics
Onboarding isn't done until you can measure it. Recommend metrics:
- Activation rate: % of signups who reach the aha moment (this is the north star)
- Time to aha moment: Median time from signup to activation event
- Onboarding completion rate: % of users who finish each step (identify where people drop off)
- Day 1 / Day 7 / Day 30 retention: Are activated users actually coming back?
- Trial-to-paid conversion: For freemium/trial products, the ultimate measure
- Setup step abandonment: Which specific steps cause people to leave?
Output format
Adapt your output to what the developer actually needs. Don't force an 8-section plan when they asked a focused question.
If they want a full onboarding design (new product or major redesign):
- Product Understanding — What the product does, who it's for, what product motion it uses (PLG/B2B/B2C). Based on your codebase exploration, not assumptions.
- Aha Moment — The identified moment(s), the reasoning, and the specific user action that represents it.
- Current State Audit — What exists today: the signup flow, empty states, first-run experience. Cite specific files and components you found. If there's no onboarding, describe the raw experience a new user has.
- Critical Path — The minimum steps from signup to aha moment. For each step: what happens, why it's necessary, and what the user feels.
- Onboarding Flow Design — Screen-by-screen walkthrough: what the user sees, what they do, what data is collected and why, how empty states guide them, where progressive disclosure kicks in.
- Beyond Day 1 — The lifecycle: day 2-7 habit hooks, feature discovery triggers, re-engagement strategy.
- Anti-patterns & Risks — Specific issues found in the current code OR risks common to this product type.
- Success Metrics — What to measure, with concrete targets (e.g., "aim for 40%+ activation rate within first session" not just "track activation").
- Quick Wins — 3-5 highest-impact changes that can ship this week. Be specific: "Add an empty state to the Dashboard component at
src/pages/Dashboard/index.tsx that shows a sample project and a 'Create your first project' button" — not "improve empty states."
If they want a critique of an existing flow:
Focus on the audit. Walk through the flow step-by-step, flag specific problems with file/component references, and rank them by impact. End with prioritized fixes.
If they asked a specific question (e.g., "should we add a product tour?"):
Answer the question directly with reasoning, then briefly note related issues you noticed if they're significant. Don't produce a full plan they didn't ask for.
Handling critiques of existing onboarding
If the developer has an existing onboarding flow they want reviewed:
-
Trace the full path in code. Start from the signup/login route. Follow every redirect, conditional render, and modal. Read the actual components — don't rely on descriptions. Note the file paths for everything you find so you can reference them in your critique.
-
Simulate the new user's experience. At each step ask:
- What does the user see? (Read the JSX/template)
- What data is the component fetching? (Read the API calls)
- What happens if there's no data yet? (Check for empty state handling)
- What's the primary CTA? Is it obvious or buried?
- How many decisions does the user have to make?
- What could confuse them?
-
Grade each step. For every screen/step in the flow, assign one of:
- Drives activation — directly moves the user toward the aha moment
- Necessary friction — required (auth, legal) but should be minimized
- Unnecessary friction — can be deferred, removed, or automated
- Harmful — actively pushes users away (confusion, dead ends, information overload)
-
Be specific with fixes. Don't say "simplify the signup form." Say "The signup form at src/pages/Register/index.tsx collects 8 fields. Only email and password are needed before the user can create their first [X]. Move company name (line 45), role (line 52), team size (line 58), and phone (line 63) to a post-activation profile completion step."
-
Prioritize ruthlessly. Rank every issue by: (a) how many users hit it (100% hit the signup form, 30% hit the settings page) and (b) how severe it is (dead end vs minor confusion). A confusing empty state on the main dashboard is a P0. A missing tooltip on settings is a P3.
Reference: What the best companies do
| Company | Aha Moment | Time to Get There | Key Tactic |
|---|
| Slack | Send a message, get a reply in a channel | ~2 min | Pre-creates #general, bot sends first message, guides you to post |
| Notion | Create a useful page from a template | ~1 min | Template gallery as first action, rich empty states |
| Figma | Design something collaboratively in-browser | ~3 min | No install needed, shared file link, real-time cursors |
| Canva | Create a professional-looking design | ~1 min | Template-first approach, drag-and-drop simplicity |
| Linear | Create a project and feel the speed | ~2 min | Import from Jira/GitHub, fast UI makes it click immediately |
| Vercel | Deploy a site from a Git repo | ~1 min | One-click deploy, automatic framework detection |
| Loom | Record and share a video | ~1 min | Browser extension, one click to record, instant share link |
| Calendly | Share a booking link and get a meeting | ~2 min | Pre-generates link, copy-paste to anyone, first booking is magic |
These companies don't just have good onboarding — they architected their entire products around making the aha moment reachable in minutes. Study the pattern, not just the tactics.