Skip to content

SaaS UX Principles ​

Great SaaS UX removes friction between the user and the value they're paying for every month.

Why This Matters ​

Every SaaS product lives or dies by retention, and retention is driven by usability. If users struggle to find value, they churn --- no matter how powerful your backend is.

RoleWhy You Should Care
🏒 OwnerPoor UX is the #1 driver of churn in the first 90 days. Every friction point costs revenue.
πŸ’» DevUX patterns determine component architecture. Building the wrong patterns means costly rewrites.
πŸ“‹ PMFeature adoption depends on discoverability. A buried feature is the same as no feature.
🎨 DesignerSaaS UX has unique constraints (multi-tenancy, roles, billing) that generic web design ignores.

The Concept (Simple) ​

Think of SaaS UX like designing a cockpit. A pilot needs dozens of instruments, but they're arranged so the most critical information is always visible, related controls are grouped together, and rarely-used functions are accessible but out of the way.

Your SaaS app is the same. Users have jobs to do. Your UX should make the most common jobs effortless and the complex jobs possible --- without cluttering the view.

The core equation:

User Value = (Feature Power x Discoverability) - Friction

If friction exceeds perceived value at any point, the user leaves.

How It Works (Detailed) ​

Multi-Tenant UX Considerations ​

Multi-tenancy means many organizations share your platform, but each must feel like they own it. This creates unique UX challenges.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              YOUR SAAS PLATFORM              β”‚
β”‚                                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
β”‚  β”‚ Tenant Aβ”‚  β”‚ Tenant Bβ”‚  β”‚ Tenant Cβ”‚     β”‚
β”‚  β”‚         β”‚  β”‚         β”‚  β”‚         β”‚     β”‚
β”‚  β”‚ - Logo  β”‚  β”‚ - Logo  β”‚  β”‚ - Logo  β”‚     β”‚
β”‚  β”‚ - Theme β”‚  β”‚ - Theme β”‚  β”‚ - Theme β”‚     β”‚
β”‚  β”‚ - Data  β”‚  β”‚ - Data  β”‚  β”‚ - Data  β”‚     β”‚
β”‚  β”‚ - Users β”‚  β”‚ - Users β”‚  β”‚ - Users β”‚     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
β”‚                                              β”‚
β”‚  Shared: UI Components, Patterns, Features   β”‚
β”‚  Isolated: Data, Branding, Permissions       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key multi-tenant UX rules:

  • [ ] Tenant data must never leak into another tenant's view
  • [ ] Branding customization (logo, colors) should feel native, not bolted on
  • [ ] Switching between workspaces/orgs must be fast and obvious
  • [ ] The "whose data am I looking at?" question should always be answerable at a glance

Dashboard Design Patterns ​

Dashboards are the home screen of SaaS. A well-designed dashboard answers: What happened? What needs my attention? What should I do next?

ASCII Wireframe --- Standard SaaS Dashboard Layout:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  [Logo]    Dashboard   Projects   Reports    [?] [Bell] [Avatar] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚            β”‚                                             β”‚
β”‚  SIDEBAR   β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚            β”‚   β”‚  KPI #1  β”‚ β”‚  KPI #2  β”‚ β”‚  KPI #3  β”‚  β”‚
β”‚  Dashboard β”‚   β”‚  $12.4k  β”‚ β”‚  847     β”‚ β”‚  94.2%   β”‚  β”‚
β”‚  > Overviewβ”‚   β”‚  +12% β–²  β”‚ β”‚  -3% β–Ό   β”‚ β”‚  +1% β–²   β”‚  β”‚
β”‚  > Metrics β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚            β”‚                                             β”‚
β”‚  Projects  β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  Team      β”‚   β”‚          MAIN CHART / GRAPH        β”‚   β”‚
β”‚  Reports   β”‚   β”‚                                    β”‚   β”‚
β”‚            β”‚   β”‚    β•±β•²    β•±β•²                        β”‚   β”‚
β”‚  ────────  β”‚   β”‚   β•±  β•²  β•±  β•²    β•±β•²               β”‚   β”‚
β”‚  Settings  β”‚   β”‚  β•±    β•²β•±    β•²  β•±  β•²  β•±           β”‚   β”‚
β”‚  Help      β”‚   β”‚ β•±            β•²β•±    β•²β•±             β”‚   β”‚
β”‚            β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚            β”‚                                             β”‚
β”‚            β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚            β”‚   β”‚ RECENT       β”‚ β”‚ ACTION ITEMS      β”‚   β”‚
β”‚            β”‚   β”‚ ACTIVITY     β”‚ β”‚                   β”‚   β”‚
β”‚            β”‚   β”‚ - Item 1     β”‚ β”‚ - [ ] Task A      β”‚   β”‚
β”‚            β”‚   β”‚ - Item 2     β”‚ β”‚ - [ ] Task B      β”‚   β”‚
β”‚            β”‚   β”‚ - Item 3     β”‚ β”‚ - [x] Task C      β”‚   β”‚
β”‚            β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Dashboard pattern comparison:

PatternBest ForAvoid When
KPI Cards + ChartMetrics-driven products (analytics, finance)Users don't have numeric goals
Activity FeedCollaboration tools (Slack, Notion)Data is more important than events
Task ListProductivity tools (Asana, Todoist)Users need to monitor, not act
Kanban BoardWorkflow tools (Trello, Jira)No clear status progression
Empty CanvasCreative tools (Figma, Miro)Users need guidance

Settings and Configuration UX ​

Settings are where SaaS complexity hides. Poorly organized settings frustrate power users and confuse new ones.

SETTINGS ARCHITECTURE
=====================

β”œβ”€β”€ Account (personal)
β”‚   β”œβ”€β”€ Profile
β”‚   β”œβ”€β”€ Notifications
β”‚   β”œβ”€β”€ Security (password, 2FA)
β”‚   └── Appearance (theme, language)
β”‚
β”œβ”€β”€ Workspace (shared, admin-only)
β”‚   β”œβ”€β”€ General (name, logo, URL)
β”‚   β”œβ”€β”€ Members & Roles
β”‚   β”œβ”€β”€ Billing & Plans
β”‚   β”œβ”€β”€ Integrations
β”‚   └── API Keys
β”‚
└── Feature Settings (contextual)
    β”œβ”€β”€ Project defaults
    β”œβ”€β”€ Workflow rules
    └── Custom fields

Rules for settings UX:

  1. Separate personal from workspace settings --- users get confused when these are mixed
  2. Show settings in context --- a notification toggle next to the feature is better than buried in a settings page
  3. Use sensible defaults --- most users never change settings, so defaults ARE the experience
  4. Confirm destructive changes --- deleting a workspace needs more friction than changing a display name
PatternStructureBest ForExample
Sidebar + Top BarFixed sidebar for sections, top bar for global actionsComplex apps with many sectionsSlack, Jira
Top Nav OnlyHorizontal navigation, no sidebarSimple apps with few sectionsStripe, Mailchimp
Sidebar OnlyCollapsible sidebar, no top navData-heavy dashboardsMetabase, Grafana
Contextual NavNavigation changes based on sectionApps with distinct modulesHubSpot, Salesforce

Navigation decision flowchart:

How many top-level sections?
β”‚
β”œβ”€β”€ 3-5 sections ──────────> Top Nav Only
β”‚
β”œβ”€β”€ 6-12 sections ─────────> Sidebar + Top Bar
β”‚
β”œβ”€β”€ 12+ sections ──────────> Contextual Nav with Sidebar
β”‚
└── Varies by role ────────> Role-Based Nav
    (see Chapter 18: ../04-design/18-designing-for-roles.md)

Empty States, Loading States, Error States ​

These "in-between" states make up a huge portion of the actual user experience. Ignoring them creates a product that feels broken.

Empty States --- Turn nothing into an opportunity:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                         β”‚
β”‚          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚
β”‚          β”‚   [  icon  ]  β”‚              β”‚
β”‚          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚
β”‚                                         β”‚
β”‚       No projects yet                   β”‚
β”‚                                         β”‚
β”‚   Create your first project to start    β”‚
β”‚   tracking progress and collaborating   β”‚
β”‚   with your team.                       β”‚
β”‚                                         β”‚
β”‚        [ + Create Project ]             β”‚
β”‚                                         β”‚
β”‚   or  Import from CSV                   β”‚
β”‚                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Empty state checklist:

  • [ ] Explains what would normally appear here
  • [ ] Tells the user how to populate it
  • [ ] Provides a clear primary action (button)
  • [ ] Optionally offers a secondary path (import, template)
  • [ ] Does NOT just show a blank page or "No data"

Loading States:

ApproachWhen to UseImplementation
Skeleton screensContent layout is predictableGray placeholder blocks mimicking final layout
SpinnerAction is quick (<2s) and layout is unknownCentered spinner with optional message
Progress barAction is long (>3s) and progress is measurableDeterminate bar with percentage
Optimistic UIAction will almost certainly succeedShow result immediately, roll back on failure

Error States --- Be helpful, not cryptic:

BAD:                              GOOD:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  β”‚              β”‚                             β”‚
β”‚  Error 500       β”‚              β”‚  Something went wrong       β”‚
β”‚                  β”‚              β”‚                             β”‚
β”‚  An error        β”‚              β”‚  We couldn't save your      β”‚
β”‚  occurred.       β”‚              β”‚  changes. This is usually   β”‚
β”‚                  β”‚              β”‚  temporary.                 β”‚
β”‚                  β”‚              β”‚                             β”‚
β”‚                  β”‚              β”‚  [ Try Again ]  [ Contact ] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

In Practice ​

Common SaaS UX Anti-Patterns ​

Anti-PatternProblemBetter Approach
Feature dumpingEvery feature on the dashboardProgressive disclosure --- show basics, reveal advanced
Modal overloadModals for every interactionUse inline editing, slide-over panels, or dedicated pages
Settings graveyardOne giant settings pageCategorized settings with search
Notification spamEvery event triggers a notificationSmart defaults, let users configure granularity
Forced onboarding10-step tour before any valueOptional, contextual tips that appear when relevant
Mystery iconsIcon-only nav with no labelsAlways pair icons with labels, or show labels on hover
Infinite scrolling tablesNo pagination on data tablesPaginate, or virtualize with clear row counts
Blank empty states"No data" with no guidanceInstructional empty states with CTAs

Real-World Example: SaaS Dashboard Redesign ​

A project management SaaS had 40% of users never returning after day one. Analysis showed:

  1. Dashboard was empty on first login --- no projects, no guidance
  2. Navigation had 14 top-level items --- overwhelming for new users
  3. Settings mixed personal and org --- users accidentally changed org settings

Changes made:

  1. Added onboarding empty state with sample project option
  2. Collapsed navigation into 5 groups with expandable sub-items
  3. Split settings into "My Account" and "Organization" tabs
  4. Added contextual tooltips on first visit to each section

Result: Day-1 retention improved from 60% to 78%.

UX Principle Comparison: SaaS vs Consumer Apps ​

PrincipleConsumer AppSaaS App
OnboardingFun, game-likeValue-focused, role-aware
NavigationBottom tabs, simpleSidebar, complex hierarchy
PersonalizationAlgorithmicPermission-based
EngagementPush notifications, streaksWorkflow integration, team activity
ComplexityHidden, progressiveSurfaced for power users, hidden for new users
Data densityLow --- one thing at a timeHigh --- tables, charts, multi-panel layouts
Error handlingRetry silentlyExplain clearly, offer manual override

Key Takeaways ​

  • SaaS UX is not generic web design --- multi-tenancy, roles, and billing create unique constraints
  • Dashboards should answer three questions: What happened? What needs attention? What do I do next?
  • Settings must separate personal from workspace concerns and use sensible defaults
  • Empty, loading, and error states are not edge cases --- they are a large portion of the actual experience
  • Navigation complexity should match your product's complexity, not exceed it
  • Every anti-pattern in the table above is an active churn risk

Action Items ​

RoleNext Step
🏒 OwnerAudit your current empty states. Are any pages blank with no guidance? Each one is a churn risk.
πŸ’» DevImplement skeleton loading screens for your three most-visited pages. See your component library structure in Chapter 17.
πŸ“‹ PMMap your navigation structure. If you have more than 7 top-level items, plan a consolidation sprint.
🎨 DesignerCreate a "state inventory" --- document every empty, loading, and error state in the app and ensure each one is designed intentionally.

Next: Chapter 17 --- Design System Basics | Related: Chapter 18 --- Designing for Roles

The Product Builder's Playbook