Skip to content

An onboarding flow that guides trial users to value

A redesigned SaaS trial onboarding experience with progressive checklists, sample data, and inline guidance that turns signups into active subscribers.

Good morning, Priya Live data

Fernhook · 3 sources · setup finished Monday · sample data replaced on first sync

Search reports, events…⌘KNew report Thu, 09/17/2026PR

Visitors · 7 days

12,860

Website snippet + Segment

Signed up

684

5.3% of visitors

Verified email

571

83.5% of signups

Reports built

3

1 saved view · 3 teammates invited

Visitors by day

Your data · 09/11 – 09/17
Fri 09/11Sat 09/12Sun 09/13Mon 09/14Tue 09/15Wed 09/16Thu 09/17

Setup

5 of 6 · 1 skipped
Connect a data sourceFri 09/11
Choose a starter workspaceFri 09/11
Invite your teamFri 09/11
Build your first reportMon 09/14
Save a viewTue 09/15
Connect your warehouseReturn

Your reports

3 reports · 1 saved view
Signup funnelWhere do visitors drop off between landing and a verified signup?Mon 09/14
Traffic overviewWhere did this week’s visitors come from?Tue 09/15
Weekly retentionHow many people come back in the weeks after they sign up?Tue 09/15
Funnel · paid campaignsSaved view of Signup funnel, filtered to paid campaignsTue 09/15

Sources

12,400 rows on first sync
Segment
CSV upload
Website snippet
WarehouseSkipped

Team

3 invited
DWDanaAdmin
MOMarcusEditor
LBLenaViewer

The shape of the work

Industry
Professional Services
Duration
10 weeks
Cooperation model
Fixed price, phased
Services
UX auditOnboarding flowActivation design
Integrations
HubSpotDocuSignXeroGoogle Workspace
Technologies
Next.jsTypeScriptTailwind CSSPostgreSQLMixpanelSegment
Team
1 Project lead2 Product designers1 UX researcher

Client name withheld under NDA. Engagement details are shown to the extent our agreement permits.

The screens

Every surface, in order

CairnlySetting up Fernhook
  1. 1Connect sources
  2. 2Choose a starter
  3. 3Invite your team
  4. 4Pick a first report
Finish laterPR

Step 1 of 4

Connect your first sources

Start with anything you can connect yourself. None of these need admin credentials, and nothing has to be configured before rows arrive.

Sources connected

3

Segment, CSV upload, website snippet

Rows in

12,400

First sync · 4:52 – 4:57 PM

Configured so far

Nothing

Columns mapped for you · edit anytime

Connected

12,400 rows
SegmentSource fernhook-web · last 30 days replayed7,180rows · 4:57 PMConnected
CSV uploadtrial-signups-aug-2026.csv · 14 columns mapped3,960rows · 4:53 PMConnected
Website snippetPage views and clicks · installed by you1,260rows · 4:57 PMConnected

Share of rows by source

Rows arriving

First sync
4:524:534:544:554:564:57

Cumulative rows, PM. Your dashboards fill in from these once the first sync finishes.

More sources

Optional · each stays on your checklist
Data warehouseSkippedNeeds a host, a service user and credentials from whoever administers it.
Billing exportConnectAdds plan and revenue to reports. Connect when you are ready.
Server APIConnectSend server-side events with a write key from Settings.
Skipped the warehouse? It stays on your checklist until you return to it.Continue · choose a starter

Step one: three sources connected and 12,400 rows in, before anything has to be configured.

CairnlySetting up Fernhook
  1. Connect sources
  2. 2Choose a starter
  3. 3Invite your team
  4. 4Pick a first report
Finish laterPR

Step 2 of 4

Choose a starter workspace

A starter opens on a working dashboard straight away. Until your first sync finishes, it runs on sample data, labeled as sample on every chart.

Product funnelA SaaS or app with signups
Marketing siteTraffic, campaigns and top pages
SubscriptionsTrials, plans, upgrades and churn
Blank workspaceNo sample · only what you build
Not sure? Every starter can be changed later. Nothing you connect is tied to the starter you pick.

What you will see first · Product funnel

Sample data
1TrafficA quarter of weekly visitors · 13 weeks
2Signup funnelFive steps from visit to upgrade
3Weekly cohortWho comes back in weeks 1–5

Labelled

“Sample data” on every sample chart and total

Removable

One action removes it, from the banner or Settings

Replaced

Your 12,400 rows take its place · never mixed

Opens in about a second · no configurationUse Product funnel

Step two: picking a starter workspace, with what you'll see first spelled out beside it.

Product funnel

Starter dashboard · every figure on this page is sample data

Search reports, events…⌘KData sources Fri, 09/11/2026PR
Sample dataPinecrest Notes, a made-up app · 13 weeks, 06/15 – 09/13/2026Your first sync is running · 12,400 rows from 3 sources replace this sample when it finishes. Nothing is mixed.Remove sample

Visitors

Sample data

312,500

13 weeks

Signups

Sample data

9,430

3.0% of visitors

Upgraded

Sample data

690

7.3% of signups

Week-4 retention

Sample data

41%

Cohorts of 08/03 and 08/10

Weekly visitors Sample data

Week of
06/1506/2907/1307/2708/1008/2409/07

Signup funnel Sample data

Step conversion
Visited312,500—
Signed up9,4303.0%
Created a project5,71060.6%
Invited a teammate2,24039.2%
Upgraded69030.8%

Weekly cohort Sample data

Returning users by week
Week ofUsersW0W1W2W3W4W5
08/03742100%58%47%43%41%40%
08/10718100%56%46%42%41%
08/17764100%59%48%44%
08/24751100%57%47%
08/31780100%60%
09/07733100%

Next on your setup

2 of 6 done
Invite your team
Build your first report
Save a view
Connect your warehouseSkipped

The sample workspace: a full dashboard of plausible numbers, labeled as sample, before any live data has landed.

CairnlySetting up Fernhook
  1. Connect sources
  2. Choose a starter
  3. 3Invite your team
  4. 4Pick a first report
Finish laterPR

Step 3 of 4

Invite your team

Pick what each person can do before they arrive. The role is spelled out below, so nobody is guessing what Editor means.

3 invitations sent

Invitations

Sent 5:04 PM · links expire in 7 days
PersonRoleWhat they can doStatus
DWDana Whitfielddana@fernhook.coAdmin Everything, including sources, sample data and rolesInvitation sent
MOMarcus Oyelaranmarcus@fernhook.coEditor Builds and saves reports · cannot touch sourcesInvitation sent
LBLena Brandtlena@fernhook.coViewer Reads dashboards and reports · changes nothingInvitation sent
Add another email addressViewer Send

What each role can do

Applies to everyone in Fernhook
CanViewer· 1Editor· 1Admin· 1
See dashboards and reports
Build, edit and save reports—
Save views and share them—
Edit shared dashboards—
Connect or remove data sources——
Remove sample data——
Invite people and change roles——
Only Admins can connect sources or remove sample data.Skip for nowContinue · pick a first report

Step three: three invitations sent, and what each role can actually do stated on the page.

CairnlySetting up Fernhook
  1. Connect sources
  2. Choose a starter
  3. Invite your team
  4. 4Pick a first report
Finish laterPR

Step 4 of 4

Pick a first report

Nine reports, each described by the question it answers. Pick one and it opens on your own data.

Mon 09/14 · 9:12 AM
Where do visitors drop off between landing and a verified signup?Signup funnel
Where did this week’s visitors come from?Traffic overview
How many people come back in the weeks after they sign up?Weekly retention
Which source brings signups that go on to verify?Signups by source
Which features do new accounts use in their first week?Feature adoption
Which pages do people read right before they sign up?Top pages
Which campaigns bring visitors who stay past day one?Campaign performance
What do people do in the session where they upgrade?Upgrade paths
Which plan do converting trials choose?Plan mix

Preview · Signup funnel Live data

Your data · Fri 09/11 – Sun 09/13

Where do visitors drop off between landing and a verified signup?

Five steps, from your website snippet and Segment events · three days of data so far

Visited4,220—
Viewed pricing1,12026.5%
Started signup33429.8%
Signed up22667.7%
Verified email18883.2%

Visit → signup

5.4%

Biggest drop

Pricing → start

Signups verified

83.2%

Opening it finishes step four. You can build the other eight anytime.Open Signup funnel

Step four: nine reports, each described by the question it answers, with the chosen one previewed.

Signup funnel Live data

Fernhook · live data from 3 sources · 09/11 – 09/17/2026

Search reports, events…⌘KSave view Thu, 09/17/2026PR
Last 7 days Split by: none Filter Conversion window: 1 dayUpdated 10:02 AM

Split this funnel by source

You connected three sources. Split by source to see which one brings the signups that go on to verify.

Split by sourceNot now
Don’t show this again · tip 1 of 1

Visitors

12,860

7 days

Signed up

684

5.3% of visitors

Verified email

571

83.5% of signups

Biggest drop

Pricing → start

29.9% continue

Funnel · step conversion

Your data · 5 steps
Visited12,860—
Viewed pricing3,41026.5%
Started signup1,02029.9%
Signed up68467.1%
Verified email57183.5%
Reached the step Dropped before it% is from the step before

Visitors by day

09/11 – 09/17
1.8kFri
1.3kSat
1.1kSun
2.1kMon
2.3kTue
2.3kWed
1.9kThu

Thursday so far · 12,860 visitors in 7 days

The walkthrough on live data: one tip pinned to the control it's about, never a wall of text.

Introduction

The brief

The product had signups, but users dropped off before reaching their first dashboard. We redesigned onboarding to guide people directly to value.

An analytics product with healthy trial signups and an activation rate under forty percent, which the team had been treating as a pricing or an audience problem for two quarters. The engagement started by auditing a thousand trial signups end to end, which located the loss precisely. It wasn't spread across onboarding. It sat on the first screen after signup.

Product Design

What people were running into

01
  1. 01

    New users were greeted by an empty workspace and complex setup steps, causing over 60% of trial signups to abandon before completing setup.

    That first screen was an empty workspace with a connect-your-data button. To see anything at all, a new user had to obtain API credentials from a system they might not administer, so a meaningful share of trials ended at a task the trialist couldn't personally complete. Sixty percent abandoned before finishing setup, and most of those never returned.

    We built a progressive onboarding flow featuring interactive setup checklists, pre-populated sample data, and contextual in-app guidance.

The solution

Design decisions

Audited user activation friction across 1,000 trial signups

Tracing a thousand signups put the loss on one screen, not spread across onboarding where the team had been looking for two quarters.

Designed a progressive checklist UI with sample data workspaces

New workspaces seed with a realistic quarter of sample data, clearly labeled and removable in one action, so the first screen is a working dashboard.

Built contextual walkthrough tooltips for key configuration steps

Guidance fires on funnel milestones, appears once, and is instrumented so a prompt nobody acts on gets removed before it accumulates.

Measured activation lift via Mixpanel funnel cohorts weekly

Activation was read weekly per signup cohort, and the sample-data change ran to half the cohort for three weeks before it went to everyone.

Process

Phase by phase

  1. Phase 1: Onboarding Friction & Funnel Audit

    User Drop-Off & Usability Analysis

    Audited first-run user experience, account activation drop-off points, and initial configuration friction across 1,000 new signups.

    • Funnel Friction Audit
    • Drop-off Heatmap
    • Usability Matrix
  2. Phase 2: Progressive Setup Checklist UX

    Progressive Setup & Sample Data UI

    Designed an interactive progressive setup checklist giving users immediate time-to-value with sample data dashboards.

    • Progressive Onboarding UI
    • Figma Design Specs
    • Sample Workspace Mockups
  3. Phase 3: In-App Walkthrough Engine

    Contextual Guidance & Tooltips

    Built interactive in-app walkthrough steps and contextual helper tooltips for complex workspace settings.

    • Interactive Walkthrough Engine
    • Tooltip Component System
    • Micro-animations
  4. Phase 4: Funnel Launch & Cohort Tracking

    Production A/B Trial & Activation

    Shipped new onboarding flow, driving a +34% lift in 14-day trial activation rates and 45% fewer support tickets.

    • Activation Analytics Dashboard
    • A/B Test Sign-off
    • Production Release
CairnlyInternal · GrowthActivationExperimentsGuidance rulesRead weekly from Mixpanel funnel cohortsJT

Sample workspace as the first screen after signup

Half of each weekly signup cohort · 3 weeks · then everyone · primary metric: 14-day activation

Shipped to everyone

Who saw what, by signup cohort

A cohort is read once its 14-day window closes
Signed up week ofFirst screenSplitWindow closedStatus
07/06/2026Sample workspace · or empty workspaceSampleEmpty07/20/2026Read
07/13/2026Sample workspace · or empty workspaceSampleEmpty07/27/2026Read
07/20/2026Sample workspace · or empty workspaceSampleEmpty08/03/2026Read
07/27/2026Sample workspaceSample08/10/2026Rollout

Measured per signup cohort, so a marketing push that fills one week cannot flatter activation.

Where the loss was · audit before the test

1,000 trial signups traced end to end
1Signed up1,000 traced
2First screenEmpty workspace · connect your data
3API credentialsFrom a system they might not administer
4Finished setup60% abandoned before this

Activation was under 40%. The loss wasn't spread across onboarding: it sat on the first screen after signup.

Result at rollout

Per signup cohort
+34%14-day trial activationPer signup cohort
−64%Time to first reportMedian, signup to a report rendered
+19%Trial-to-paid conversionMeasured at 30 days
−45%Onboarding support ticketsMilestone tooltips

Setup time

Median
Under 3 minutesInside one sitting, so nobody has to choose to come back
The contested call was the sample data, so it ran to half the cohort for three weeks first.
On screen

The experiment readout: each weekly signup cohort split half sample workspace, half empty workspace for three weeks before everyone got it, the audit that located the loss, and the result at rollout.

Progressive Setup Checklist

Guides new users step-by-step through workspace configuration with visual completion progress.

The checklist is derived from the workspace's actual state, so a step completed in passing is already ticked and nothing asks twice. Progress persists per workspace, not per session, which is what let a setup started on Friday finish on Monday. Steps can be skipped and returned to; the previous linear wizard trapped anyone missing a credential.

What shipped
  • Steps derived from real workspace state
  • Progress persisted per workspace, so setup survives the weekend
  • Every step skippable and returnable

Set up Fernhook

5 of 6 done · 1 skipped

Each step is checked against what is actually in this workspace, not against a tour you clicked through.

Tue 09/15 · 2:45 PM
Connect a data sourceFound3 sources sending rows · 12,400 on first syncFri 09/11Skip · Reopen
Choose a starter workspaceFoundWorkspace uses the Product funnel starterFri 09/11Skip · Reopen
Invite your teamFound3 invitations exist on this workspaceFri 09/11Skip · Reopen
Build your first reportFoundSignup funnel rendered on live dataMon 09/14Skip · Reopen
Save a viewTicked in passingFoundYou saved “Funnel · paid campaigns” from the report toolbar. Nothing to do hereTue 09/15Skip · Reopen
Connect your warehouseWhyNeeds admin credentials · stays here until you returnSkipped Fri 09/11Return to step

Any step can be skipped and returned to, in any order.

Progress lives on the workspace

Not in a browser session, so a Friday setup finishes on Monday.

  1. Fri 09/11 · 4:52 PM

    Setup started

    Connected 3 sources · skipped the warehouse

  2. Fri 09/11 · 5:06 PM

    Closed the tab at 3 of 6

    Starter chosen · 3 invitations sent

  3. Mon 09/14 · 9:08 AM

    Picked up at step four

    Signup funnel opened on live data

  4. Tue 09/15 · 2:41 PM

    “Save a view” ticked

    From a view saved in a report, not here

Why not a wizard

Linear wizard

No way past a step that needs a credential you do not have.

Checklist

Skip it, keep going, and come back when an admin has helped.

On screen

The setup checklist read from the workspace itself: “Save a view” ticked in passing from a report, the warehouse skipped and waiting, and progress that started on Friday and finished on Monday.

Sample dataPinecrest Notes, a made-up app · 13 weeks, 06/15 – 09/13/2026Your first sync is running · 12,400 rows from 3 sources replace this sample when it finishes. Nothing is mixed.Remove sample

Remove sample data

Removes the 3 sample dashboards and 13 weeks of sample events from Fernhook. Your sources, invitations and reports stay exactly as they are.

One action · Admins onlyRemove sample

Weekly visitors

Sample data

Now · before the first sync finishes

13 wk

of traffic

5-step

funnel

6 wk

cohort

Replaced, never mixed

When your first sync finishes, sample rows are deleted and every chart re-points to your sources.

Visitors by day

Live data

After · your data only, 09/11 – 09/17

0 sample rows in this chart12,860 visitors

Rules the sample keeps

Labeled on every chart and every total
Never shares a chart or a sum with live data
Removable in one action, from the banner
Replaced by your data on first sync
On screen

The sample banner with its one-action remove open, and the sample chart beside the live chart that replaces it when the first sync finishes. The two never mix.

Pre-Populated Sample Workspaces

Provides instant interactive analytics dashboards so users see value before connecting live data.

A new workspace is seeded with a realistic dataset (a quarter of plausible traffic, a funnel, a cohort), so the first screen is a working dashboard instead of an empty state asking for an integration. The sample is clearly labeled and removable in one action, and connecting real data replaces it outright. Keeping the two from mixing was the risk this approach had to close.

What shipped
  • Workspaces seeded with a realistic quarter of sample data
  • Sample clearly labeled and removable in one action
  • Real data replaces the sample, never mixes with it

Weekly retention Live data

Your third report · created Tue 09/15 at 2:41 PM

Source: paid campaigns Since 09/11 Save view

Save this as a view

That’s your third report. Save the filters you keep reapplying, and this report opens the same way next time.

Save viewNot nowDon’t show again
Shown once. Dismissing it is permanent.

Returning users by week since signup

100%Week 0
54%Week 1
45%Week 2
41%Week 3

Your reports

1Signup funnel
2Traffic overview
3Weekly retention

The third report is the milestone this prompt waits for.

Guidance rule

saved-views-tip

Fires on
3rd report created in the workspace
Never on
A timer, or a first login
Shows
At most once per person
Dismiss
Permanent · kept in prompt history
Tracked
shown · acted · dismissed
Retired if
Nobody acts on it

Event log · Tue 09/15

2:41:08 PMreport_createdcount = 3
2:41:09 PMprompt_shownsaved-views-tip
2:41:31 PMprompt_actedview saved
2:41:31 PMchecklist_stepsave-a-view → done

Every event is sent to Mixpanel with the prompt’s name.

Contextual In-App Guidance

On screen

The saved-views prompt pinned to its button when the third report is built, with a permanent dismiss, beside the rule that fires it once and the events it sends to Mixpanel.

Surfaces subtle feature walkthroughs and tooltips exactly when users reach key milestones.

Guidance fires on milestones taken from the funnel, never on a timer or a first-login flag: the tooltip about saved views appears when someone builds their third report, which is exactly when it's useful. Every prompt is dismissible permanently, appears at most once, and is instrumented in Mixpanel, so a prompt nobody acts on gets removed before it can accumulate.

What shipped
  • Prompts fire on funnel milestones
  • Each appears once and is permanently dismissible
  • Instrumented, so unused prompts get removed

What moved after the redesign

+34%

Activation rate

-64%

Time to first report

+19%

Trial-to-paid conversion

Activation is fourteen-day, measured per signup cohort so a marketing push can't flatter it. Time to first report is the median from signup to a rendered report, including the sample workspace. That's the point: seeing a report is the activation event whether or not the data is yet the user's own. Trial-to-paid is measured at thirty days.

Client name withheld under NDA. Figures are approximate, drawn from the engagement’s own reporting.

Principles that held

  • Interactive progressive setup checklist lifted 14-day trial activation by +34%.

    Activation moved because the first screen stopped asking for something many trialists couldn't personally provide. The blocker was permissions, not motivation.

  • Sample data workspaces reduced initial setup friction down to under 3 minutes.

    Three minutes matters because it fits inside one sitting. A setup that spans two sittings depends on the user choosing to come back, and most didn't.

  • Contextual in-app tooltips reduced onboarding support inquiries by 45%.

    The tooltips that reduced support were the ones tied to a milestone. The same content shown on first login had tested flat the previous year.

Ways of working

How design and engineering worked together

01
  1. 01

    A cross-functional team of 3 worked on a fixed price, phased basis over 10 weeks, covering UX audit, Onboarding flow, Activation design. We ran a standing mid-week checkpoint and written decisions in place of status meetings. Nothing shipped that they had not seen working first.

    Activation was tracked weekly in Mixpanel against the cohort that signed up that week, so each change was answerable within two weeks instead of at the end. The sample-data decision was the contentious one and was settled by measurement: it was shipped to half the cohort for three weeks before it was shipped to everyone.

The first screen after signup

The blocker was permissions, not motivation

A thousand traced signups put the loss on one screen. It asked for credentials many trialists couldn't personally create. Switch between the old first screen and the new one, or use the arrow keys once a tab is focused.

Median time to first report down 64%

The first screen is a working dashboard, labeled as sample, with the checklist beside it. Credentials can wait; the step is skipped, not a wall.

Product funnel

Starter dashboard · every figure on this page is sample data

Search reports, events…⌘KData sources Fri, 09/11/2026PR
Sample dataPinecrest Notes, a made-up app · 13 weeks, 06/15 – 09/13/2026Your first sync is running · 12,400 rows from 3 sources replace this sample when it finishes. Nothing is mixed.Remove sample

Visitors

Sample data

312,500

13 weeks

Signups

Sample data

9,430

3.0% of visitors

Upgraded

Sample data

690

7.3% of signups

Week-4 retention

Sample data

41%

Cohorts of 08/03 and 08/10

Weekly visitors Sample data

Week of
06/1506/2907/1307/2708/1008/2409/07

Signup funnel Sample data

Step conversion
Visited312,500—
Signed up9,4303.0%
Created a project5,71060.6%
Invited a teammate2,24039.2%
Upgraded69030.8%

Weekly cohort Sample data

Returning users by week
Week ofUsersW0W1W2W3W4W5
08/03742100%58%47%43%41%40%
08/10718100%56%46%42%41%
08/17764100%59%48%44%
08/24751100%57%47%
08/31780100%60%
09/07733100%

Next on your setup

2 of 6 done
Invite your team
Build your first report
Save a view
Connect your warehouseSkipped
Architecture

One event stream behind the checklist and every prompt

Setup progress and guidance are both derived from what the workspace has actually done, so the checklist can never disagree with the product and a prompt can wait for the milestone it's about.

  1. 1 · Source
    Workspace eventsSignup, source connected, report created, invite sentEvery step is a fact about the workspace, never a click in a tour
  2. 2 · Ingestion
    Event streamSegmentOne stream feeds the checklist, the prompts and the funnel alike
  3. 3 · Engine
    Checklist state + milestone rulesNext.js · TypeScriptA step ticks from real state, so one done in passing is already ticked
  4. 4 · State
    Progress & prompt historyPostgreSQL, keyed by workspacePersisted per workspace, and a dismissed prompt never shows again
  5. 5 · Delivery
    Checklist, prompts, funnelIn-app · MixpanelSample data is replaced on connect, and every prompt is instrumented

What could go wrong

Sample data, guidance and measurement safeguards

Sample never touches real data

Every sample chart and total is labeled as sample, and the whole sample is removable in one action. Connecting a real source replaces the sample outright, so no figure is ever part sample, part yours.

Guidance that cannot nag

Prompts fire on funnel milestones, never on timers or a first login. Each one appears at most once and can be dismissed permanently, and each is instrumented in Mixpanel so a prompt nobody acts on is removed before it can pile up.

Measured so nothing flatters it

Activation is read per signup cohort, so a marketing push can't inflate it. The contested sample-data change went to half of each cohort for three weeks before it went to everyone.

Trial signups that never reach a first report? Scope your build in 3 minutes.

Scope your build
Have a project?

Let's talk

Running a large platform, shaping a first MVP, or getting a product ready for a funding round? Tell us where you are. We'll shape the process around it, and stay with you after launch.