Back to blog

Design

UX in SaaS Products: Designing for Retention

7 min readEnviaIT Engineering

Every SaaS founder obsesses over acquisition. Landing pages get A/B tested to death, ad spend gets optimized weekly, and sales funnels get reviewed in every board meeting. But here is the uncomfortable truth: if your product feels bad to use, none of that matters. Users churn silently, and no amount of marketing can fix a broken experience.

At EnviaIT, we have seen this pattern play out across dozens of projects. The products that win long-term are the ones that invest in UX not as decoration, but as a core business strategy. In this article, we break down the UX principles we apply when designing SaaS products that retain users month after month.

Onboarding: the first five minutes decide everything

Your onboarding flow is the single highest-leverage UX investment you can make. Research consistently shows that users who complete onboarding successfully are 3-5x more likely to become long-term customers. Yet most SaaS products treat onboarding as an afterthought — a generic wizard with five steps that asks for information the product already has.

What good onboarding looks like

Good onboarding is not a tutorial. It is a guided path to the user's first moment of value. That means different things for different products:

  • In a project management tool, it is creating their first task and seeing it on a board
  • In an analytics platform, it is seeing their first dashboard with real data
  • In Nudato (our event management platform), it is publishing their first event and seeing the attendee-facing page

We follow a simple framework:

1. Ask only what you need RIGHT NOW (defer the rest)
2. Show, don't tell (interactive > video > text)
3. Celebrate the first win (confetti is optional, but feedback is mandatory)
4. Offer an escape hatch (never trap users in a flow)

Progressive onboarding vs. front-loaded onboarding

Front-loaded onboarding dumps everything on the user at once. Progressive onboarding introduces features when they become relevant. We strongly prefer the latter.

For Nudato, we designed a contextual onboarding system that triggers feature introductions based on user behavior:

// Simplified contextual onboarding trigger
const onboardingTriggers = {
  "first-event-created": {
    feature: "attendee-management",
    tooltip: "Now let's add your first attendees",
    position: "sidebar-attendees",
    delay: 500,
  },
  "first-attendee-added": {
    feature: "notifications",
    tooltip: "Set up notifications to keep attendees informed",
    position: "settings-notifications",
    delay: 1000,
  },
};

This approach increased Nudato's activation rate (users who complete their first core action) by 34% compared to the previous wizard-based onboarding.

Information architecture: if they cannot find it, it does not exist

Information architecture (IA) is the invisible skeleton of your product. Get it wrong, and users will feel lost even in a feature-rich application. Get it right, and everything feels intuitive.

The three-click myth and what actually matters

The old rule of "everything should be reachable in three clicks" is misleading. What matters is not the number of clicks but the cognitive load at each decision point. A five-click path where every step is obvious beats a two-click path where the user has to guess.

We use these principles when structuring SaaS navigation:

| Principle | What it means | Example | |-----------|---------------|---------| | Group by user goal | Organize around what users want to do, not how the system works | "Manage Events" not "CRUD Operations" | | Progressive disclosure | Show only what is relevant at each level | Dashboard shows summaries; details on click | | Consistent patterns | Similar actions should look and behave the same everywhere | All list views have the same filter/sort/search pattern | | Visible breadcrumbs | Users should always know where they are and how to go back | Breadcrumb navigation + clear page titles |

Progressive disclosure in practice

Progressive disclosure is the principle of revealing complexity only when the user is ready for it. It is one of the most powerful tools in SaaS UX because your product will inevitably grow more complex over time.

Here is how we apply it at three levels:

  1. Page level: The main view shows a summary. Advanced options are behind a "More" or "Advanced" toggle.
  2. Feature level: Basic features are visible by default. Power-user features appear after the user demonstrates familiarity.
  3. Settings level: Essential settings are on the main page. Rarely-changed options are nested one level deeper.

The goal is not to hide features. It is to present the right feature at the right time to the right user.

The states nobody designs: loading, empty, and error

Here is a quick test of UX maturity: open your product and check what happens when there is no data, when something is loading, or when something fails. If the answer is "a blank screen" or "a generic error message," there is significant room for improvement.

Empty states

Empty states are onboarding opportunities in disguise. Instead of showing "No items found," tell the user what this section is for and how to get started.

// Bad empty state
<div className="text-gray-400 text-center py-12">
  No events found.
</div>

// Good empty state
<div className="text-center py-12">
  <CalendarIcon className="mx-auto h-12 w-12 text-gray-300" />
  <h3 className="mt-4 text-lg font-medium text-gray-900">
    No events yet
  </h3>
  <p className="mt-2 text-sm text-gray-500">
    Create your first event and start managing attendees,
    schedules, and notifications in one place.
  </p>
  <Button className="mt-6" onClick={openCreateModal}>
    Create your first event
  </Button>
</div>

Every empty state in Nudato includes: a relevant illustration, a brief explanation, and a primary action button. This small change reduced support tickets asking "where do I start?" by over 40%.

Loading states

Users perceive loading differently based on how it is presented. A blank screen feels broken. A spinner feels slow. A skeleton screen feels fast.

We follow this hierarchy:

  1. Optimistic updates (instant feedback, sync in background) for actions like toggling a setting or marking a task complete
  2. Skeleton screens for initial page loads and data-heavy views
  3. Progress indicators for operations that take more than 2-3 seconds (file uploads, bulk operations)
  4. Spinners only as a last resort for unpredictable wait times

Error states

Error handling UX is where most products fall apart. The default developer instinct is to show the raw error or a generic "Something went wrong." Neither helps the user.

Good error messages follow a simple formula:

  • What happened (in plain language)
  • Why it happened (if known)
  • What the user can do about it (specific action)
Bad:  "Error 422: Unprocessable Entity"
Good: "We couldn't save your changes because the event date
       is in the past. Please choose a future date."

Bad:  "Network Error"
Good: "We're having trouble connecting. Check your internet
       connection and try again. Your changes are saved locally."

Accessibility: not optional, not difficult

Accessibility is often treated as a nice-to-have that gets deferred indefinitely. This is a mistake, both ethically and commercially. In the EU alone, accessibility requirements for digital products are becoming legally binding under the European Accessibility Act (EAA), which takes effect in June 2025.

The good news: if you follow modern frontend practices, you are already most of the way there. Here are the fundamentals we enforce on every project:

The non-negotiable accessibility checklist

  • Semantic HTML: Use button for actions, a for navigation, proper heading hierarchy (h1 > h2 > h3). This single practice solves 50% of accessibility issues.
  • Keyboard navigation: Every interactive element must be reachable and operable via keyboard. Test by unplugging your mouse for 10 minutes.
  • Color contrast: Minimum 4.5:1 ratio for body text, 3:1 for large text. Use tools like the WebAIM contrast checker.
  • Focus indicators: Never remove the focus outline (outline: none on interactive elements is an anti-pattern). Style it instead.
  • Alt text for images: Descriptive for informational images, empty (alt="") for decorative ones.
  • ARIA labels: For custom components that lack semantic HTML equivalents (custom dropdowns, modals, tabs).
// Accessible modal pattern
<dialog
  aria-labelledby="modal-title"
  aria-describedby="modal-description"
  role="dialog"
>
  <h2 id="modal-title">Delete Event</h2>
  <p id="modal-description">
    This action cannot be undone. All attendee data will be
    permanently removed.
  </p>
  <div className="flex gap-3 mt-6">
    <Button variant="secondary" onClick={onClose}>
      Cancel
    </Button>
    <Button variant="destructive" onClick={onConfirm}>
      Delete permanently
    </Button>
  </div>
</dialog>

Design systems: consistency at scale

As a SaaS product grows, maintaining visual and behavioral consistency becomes increasingly difficult. Feature teams diverge, one-off components multiply, and the UI starts to feel fragmented. A design system solves this by providing a shared vocabulary of components, patterns, and guidelines.

When to invest in a design system

Not every project needs a full design system from day one. Here is our rule of thumb:

  • MVP / 1 developer: Use an existing component library (shadcn/ui, Radix, Headless UI) with a consistent theme
  • Growing product / 2-5 developers: Extract common patterns into a shared component library with basic documentation
  • Mature product / 5+ developers: Invest in a proper design system with tokens, component specs, usage guidelines, and a dedicated maintainer

What a design system actually contains

A practical design system is more than a component library. At minimum, it includes:

  1. Design tokens: Colors, spacing, typography, shadows, border radii defined as variables
  2. Component library: Buttons, inputs, modals, tables, cards with documented variants and states
  3. Layout patterns: Page templates, grid systems, responsive breakpoints
  4. Content guidelines: Tone of voice, capitalization rules, date/number formatting
  5. Interaction patterns: How confirmations work, how errors display, how navigation behaves
/* Design tokens as CSS custom properties */
:root {
  /* Color palette */
  --color-primary-500: #2563eb;
  --color-primary-600: #1d4ed8;
  --color-neutral-50: #f8fafc;
  --color-neutral-900: #0f172a;
  --color-danger-500: #ef4444;

  /* Spacing scale */
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-4: 1rem;
  --space-6: 1.5rem;
  --space-8: 2rem;

  /* Typography */
  --font-sans: 'Inter', system-ui, sans-serif;
  --text-sm: 0.875rem;
  --text-base: 1rem;
  --text-lg: 1.125rem;
}

Metrics that matter: measuring UX impact

You cannot improve what you do not measure. But vanity metrics like "page views" or "time on site" tell you almost nothing about UX quality. Here are the metrics we track to evaluate whether our UX investments are working:

Activation rate

Definition: The percentage of new users who complete the core action that correlates with long-term retention.

This is the most important early metric. For Nudato, activation means "created and published at least one event." For a CRM, it might be "imported contacts and sent a first email." Identify your activation event, then measure relentlessly.

Retention curves

Definition: What percentage of users come back after day 1, day 7, day 30?

A healthy SaaS product shows a retention curve that flattens — users who make it past the first week tend to stay. If your curve keeps dropping, your UX is not delivering sustained value.

Task success rate

Definition: What percentage of users who start a key workflow actually complete it?

We instrument critical flows (onboarding, event creation, attendee import) and measure completion rates at each step. Drop-offs indicate UX friction points.

Support ticket volume by category

Definition: What are users confused about?

If you see clusters of tickets about the same feature, that is a UX problem, not a training problem. We review support categories monthly and feed them directly into our design backlog.

Customer Effort Score (CES)

Definition: "How easy was it to [accomplish task]?" on a 1-7 scale.

We embed CES surveys after key interactions. It is a leading indicator of churn — users who report high effort today will churn tomorrow.

Putting it all together

Great SaaS UX is not about pixel-perfect designs or trendy animations. It is about reducing friction at every step of the user journey:

  1. Onboard progressively so users reach their first win quickly
  2. Structure information so features are discoverable without being overwhelming
  3. Design all states — empty, loading, error — with the same care as the happy path
  4. Build accessibility in from the start, not as a retrofit
  5. Use a design system to maintain consistency as the product and team scale
  6. Measure outcomes with metrics that connect UX quality to business results

The products that retain users are not necessarily the ones with the most features. They are the ones that feel effortless to use. That does not happen by accident — it happens by treating UX as an engineering discipline with the same rigor you apply to your backend.


Want to build a SaaS product users love? Let's talk about how we approach design and development together.