---
schema: 1
type: topic
title: Onboarding Flow Design
description: A synthesis of the channel's material about Onboarding Flow Design.
canonical: >-
  https://liquidgold.cc/channel/mobbindesign/explore/topic/onboarding-flow-design-ngflowdesign
markdown: >-
  https://liquidgold.cc/channel/mobbindesign/explore/topic/onboarding-flow-design-ngflowdesign.md
llms: >-
  https://liquidgold.cc/channel/mobbindesign/explore/topic/onboarding-flow-design-ngflowdesign/llms.txt
parent: 'https://liquidgold.cc/channel/mobbindesign.md'
channel: mobbindesign
updated: '2026-10-23T22:20:52.151Z'
language: null
children:
  - 'https://liquidgold.cc/watch/qK7WYCMvjUw.md'
  - 'https://liquidgold.cc/watch/Qsq-Sj_rojU.md'
topicSlug: onboarding-flow-design-ngflowdesign
searchChunks:
  - ordinal: 0
    text: null
    startSeconds: 0
    endSeconds: 11
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=0'
    heldReason: rights
  - ordinal: 1
    text: null
    startSeconds: 11
    endSeconds: 34
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=11'
    heldReason: rights
  - ordinal: 2
    text: null
    startSeconds: 34
    endSeconds: 46
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=34'
    heldReason: rights
  - ordinal: 3
    text: null
    startSeconds: 46
    endSeconds: 91
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=46'
    heldReason: rights
  - ordinal: 4
    text: null
    startSeconds: 46
    endSeconds: 91
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=46'
    heldReason: rights
  - ordinal: 5
    text: null
    startSeconds: 91
    endSeconds: 103
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=91'
    heldReason: rights
  - ordinal: 6
    text: null
    startSeconds: 103
    endSeconds: 137
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=103'
    heldReason: rights
  - ordinal: 7
    text: null
    startSeconds: 103
    endSeconds: 137
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=103'
    heldReason: rights
  - ordinal: 8
    text: null
    startSeconds: 148
    endSeconds: 183
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=148'
    heldReason: rights
  - ordinal: 9
    text: null
    startSeconds: 183
    endSeconds: 195
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=183'
    heldReason: rights
  - ordinal: 10
    text: null
    startSeconds: 237
    endSeconds: 323
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=237'
    heldReason: rights
  - ordinal: 11
    text: null
    startSeconds: 334
    endSeconds: 538
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=334'
    heldReason: rights
  - ordinal: 12
    text: null
    startSeconds: 334
    endSeconds: 538
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=334'
    heldReason: rights
  - ordinal: 13
    text: null
    startSeconds: 334
    endSeconds: 538
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=334'
    heldReason: rights
  - ordinal: 14
    text: null
    startSeconds: 549
    endSeconds: 618
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=549'
    heldReason: rights
  - ordinal: 15
    text: null
    startSeconds: 549
    endSeconds: 618
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=549'
    heldReason: rights
  - ordinal: 16
    text: null
    startSeconds: 629
    endSeconds: 677
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=629'
    heldReason: rights
  - ordinal: 17
    text: null
    startSeconds: 677
    endSeconds: 689
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=677'
    heldReason: rights
  - ordinal: 18
    text: null
    startSeconds: 699
    endSeconds: 711
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=699'
    heldReason: rights
  - ordinal: 19
    text: null
    startSeconds: 735
    endSeconds: 747
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=735'
    heldReason: rights
  - ordinal: 20
    text: null
    startSeconds: 801
    endSeconds: 845
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=801'
    heldReason: rights
  - ordinal: 21
    text: null
    startSeconds: 856
    endSeconds: 877
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=856'
    heldReason: rights
  - ordinal: 22
    text: null
    startSeconds: 888
    endSeconds: 960
    watch: 'https://liquidgold.cc/watch/qK7WYCMvjUw?t=888'
    heldReason: rights
  - ordinal: 0
    text: null
    startSeconds: 0
    endSeconds: 10
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=0'
    heldReason: rights
  - ordinal: 1
    text: null
    startSeconds: 10
    endSeconds: 45
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=10'
    heldReason: rights
  - ordinal: 2
    text: null
    startSeconds: 45
    endSeconds: 56
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=45'
    heldReason: rights
  - ordinal: 3
    text: null
    startSeconds: 68
    endSeconds: 79
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=68'
    heldReason: rights
  - ordinal: 4
    text: null
    startSeconds: 79
    endSeconds: 112
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=79'
    heldReason: rights
  - ordinal: 5
    text: null
    startSeconds: 112
    endSeconds: 123
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=112'
    heldReason: rights
  - ordinal: 6
    text: null
    startSeconds: 157
    endSeconds: 168
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=157'
    heldReason: rights
  - ordinal: 7
    text: null
    startSeconds: 168
    endSeconds: 234
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=168'
    heldReason: rights
  - ordinal: 8
    text: null
    startSeconds: 234
    endSeconds: 245
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=234'
    heldReason: rights
  - ordinal: 9
    text: null
    startSeconds: 291
    endSeconds: 304
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=291'
    heldReason: rights
  - ordinal: 10
    text: null
    startSeconds: 304
    endSeconds: 335
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=304'
    heldReason: rights
  - ordinal: 11
    text: null
    startSeconds: 345
    endSeconds: 412
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=345'
    heldReason: rights
  - ordinal: 12
    text: null
    startSeconds: 422
    endSeconds: 477
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=422'
    heldReason: rights
  - ordinal: 13
    text: null
    startSeconds: 477
    endSeconds: 488
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=477'
    heldReason: rights
  - ordinal: 14
    text: null
    startSeconds: 488
    endSeconds: 533
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=488'
    heldReason: rights
  - ordinal: 15
    text: null
    startSeconds: 569
    endSeconds: 579
    watch: 'https://liquidgold.cc/watch/Qsq-Sj_rojU?t=569'
    heldReason: rights
---


# Onboarding Flow Design

A synthesis of the channel's material about Onboarding Flow Design.

Canonical: https://liquidgold.cc/channel/mobbindesign/explore/topic/onboarding-flow-design-ngflowdesign
Parent: [Mobbin](https://liquidgold.cc/channel/mobbindesign.md)

Most teams argue about how many screens an onboarding flow should have, and the evidence points somewhere else. In a study of over a thousand onboarding flows, the average app runs 25 onboarding screens, and some of the apps with the longest flows are also among the most successful. The useful question is how quickly a new user reaches the moment the product pays off, and what each screen does to get them there.

## Reach the aha moment, then sell the outcome

### Name the aha moment before you design screens

The framework in the first study is short enough to put on a whiteboard: sign up, set up your account, then reach the aha moment. In the speaker's words, that is where you actually feel the product's value. For Airbnb it is making a first booking, for Netflix it is finding and watching a show, and for Mobbin it is finding a screen or animation you love and saving it. Each definition is specific enough to measure, which is the part a team can act on.

> You sign up, set up your account, you hit the aha moment. That's where you actually feel the product's value.

### Outcome screens beat feature lists

The welcome screens that held the speaker's attention shared one habit: **they sold the outcome instead of listing features**. Timehop's welcome screen shows the product in action on mobile and desktop. Runkeeper uses animation so a user gets a feel for the app without reading a word. Elma lets people try the core experience before creating an account, which the speaker calls rare among apps with AI features. The limit is that these are curated examples. The source reports no conversion numbers for any of them, so the claim rests on observation, not measurement.

## Length matters less than friction and value

### Long flows that feel short

Duolingo runs about 60 screens before sign-up, and the presenter insists the flow does not feel long. The walk-through is concrete: choose a language, start a first lesson, finish it, then create an account. By the time you reach sign-up, you have already gone through 60 screens. Cake Equity faces a harder case. Equity and vesting schedules are dry, so it pairs plain copy and tooltips with small touches, such as a password field that checks off requirements as you type. The presenter's point is that these details make a long flow feel effortless, though the source does not say how much drop-off they prevented.

### Paywalls inside the flow

The second study's founder reports that every contextual paywall tied to a single feature failed his A/B tests, because users concluded they had to buy each feature separately. Moonly moved back to one consistent paywall. Timely shows a full page of social proof before its paywall. Grammarly's tailored pricing plans, based on quiz answers, are credited with almost a 20% lift in plan upgrades. That upgrade figure is the presenter's own, given without a published baseline, so treat it as a hypothesis to test rather than a benchmark.

## Ask at the right moment, and know when to skip

### Permission pre-prompts and friction

Many apps show a custom screen before the OS notification pop-up. The speaker says it apparently improves accept rates significantly, but the source gives no percentage, so the size of the effect is unknown. Web onboarding is also 21% shorter than iOS, which the presenter attributes to mobile carrying more permission and paywall screens. House split its sign-up form into multiple screens and reports a 15% conversion increase. That result runs against the instinct to cut every step, and it suggests friction added in one place can remove friction in another.

### When onboarding is the wrong answer

The most useful disagreement in this material is with the default itself. The speaker says, 'I don't think there's one right or wrong way to design an onboarding flow that's best in class.' For Mobbin and AI chat apps, where the product speaks for itself and the first prompt is where users find value, the best experience may be to get out of the way. The source does not measure outcomes for that approach, so it remains a judgment. The Moonly founder applies the same skepticism to login, asking why it is needed before adding one. That question is a method, not a finding, and it works best when a team tests the answer.

- Name the aha moment for your product and measure whether new users reach it.
- Sell the outcome on welcome screens: Timehop and Runkeeper show the product rather than list features.
- Accept a long flow only when each screen moves the user toward value, as Duolingo's walk-through does across about 60 screens.
- Test one consistent paywall before any contextual paywalls; every contextual variant in Moonly's tests failed.
- Pilot a permission pre-prompt and measure accept rates yourself, since the source gives no effect size.

Start with your current flow, screen by screen, and mark the point where a new user first feels the product's value. Anything after that point is a candidate for cutting. Anything before it should be defended with a number.

## Source videos

- [He Spent $1M on A/B Tests. Here's What Won.](https://liquidgold.cc/watch/qK7WYCMvjUw.md)
- [I Studied 1,460 Onboarding Flows. Here's What I Found.](https://liquidgold.cc/watch/Qsq-Sj_rojU.md)

> Search chunk text is held until public-source provenance is verified.
