design systems    /    CASE STUDY

Stabilising a growing marketplace by restructuring a fragmented booking system

Note: This project is under NDA. Some details and visuals have been changed to protect confidentiality.

PilatesPass is a marketplace where instructors offer classes, private sessions, courses and memberships across multiple studios. As the platform grew, new service types were added quickly to meet demand. Each addition worked in isolation, but together they introduced increasing complexity into the core booking experience.

Over time, the system became unweildy. Similar bookings followed different paths, UI patterns behaved inconsistently, and small variations multiplied into ongoing maintenance work for engineering. The experience still functioned, but it was becoming fragile.

I was brought in to redesign the booking system by identifying the common structure underneath the variations and redesigning it as a single, flexible model that could support growth without accumulating further complexity.
ROLE: Lead Product Designer
DURATION: 12 months
PLATFORM: Web & Mobile
STAGE: Seed
Photograph of someone using a macbook. The screen shows homepage for PilatesPass.
Three mobile wireframes for PilatesPass on the customer side
- Search page
- Search filters
- Listing page

Overview

PilatesPass had reached a point where adding new booking formats was becoming expensive in terms build time and operational cost.

Each new service type introduced slightly different booking logic, one-off UI patterns and additional edge cases for engineering to support. Individually, these decisions made sense, but collectively, it meant the system was harder to maintain and extend, and felt inconsistent for users.

The business needed a booking system that could enable the team to add new formats without fragmenting.

The problem

After an analysis of the booking process, I found three issues affecting the user experience and the team’s ability to scale:

  • Multiple booking flows solving the same problem
    Group classes, private sessions, courses and workshops each followed different booking paths, despite sharing most of the same underlying logic. Engineering were maintaining several versions of essentially the same flow, increasing effort and risk with every change.
  • Inconsistent patterns reduced predictability
    UI components such as calendars, pricing displays and confirmation states behaved differently depending on the service type. This made the experience harder to learn for clients and increased the likelihood of booking errors and support intervention.
  • Growing operational and engineering overhead
    As the number of bookings grew, the founders were frequently stepping in to resolve booking issues or explain edge cases. Engineering velocity slowed as more time was spent maintaining variations rather than extending the product.
  • Avoid overbuilding while designing for growth
    Create foundations that supported future complexity, without modelling every edge case upfront.

My concern was that each new booking method would increase complexity, slow delivery, and make the system harder to trust. Therefore, the platform needed a single booking model that could support flexibility without creating ongoing cost.

The goals

Before making changes to the booking experience, I aligned with the founders and engineering on what the system needed to support long-term — not just what needed fixing immediately.

The goals were to:

  • Collapse multiple booking flows into a single underlying model
    Reduce duplication by identifying the shared structure beneath different service types.
  • Restore predictability for users
    Ensure bookings behaved consistently so clients could form reliable expectations, regardless of what they were booking.
  • Reduce engineering and operational overhead
    Minimise one-off logic and exceptions so new features didn’t increase maintenance cost.
  • Enable future growth without redesigning the system again
    Create foundations that could support new formats, bundles and pricing models without fragmenting.

The approach

My approach focused on identifying and strengthening the structure underneath the booking experience, rather than optimising individual flows in isolation.

Revealing the common structure

I mapped every existing booking journey including group classes, private sessions, courses and workshops. I then compared where they genuinely differed versus where they had diverged unnecessarily over time. This revealed a single underlying flow hidden beneath multiple variations.

Diagram showing PilatesPass session types including group classes, private sessions, courses & workshops, and virtual livestream sessions, with variations in session composition, pricing models, capacity rules, scheduling patterns, cancellation logic, location types, and redemption rules, highlighting shared booking system needs like availability, scheduling, capacity, pricing logic, and confirmation.

Designing for reuse

Instead of creating new flows for each service type, I defined a small set of reusable stages (such as availability, selection, pricing and confirmation) that could be combined in different ways depending on the booking type. This allowed flexibility without duplication, and made it easier for engineering to reason about the system as a whole.

Working in close partnership with engineering

I worked closely with engineering to understand which parts of the system were worth refactoring immediately and which could be addressed incrementally. We prioritised changes that reduced exception handling and unlocked faster delivery, while avoiding unnecessary disruption to instructors already using the platform. We sequenced the work to ensure we stabilised the core booking model first. Then we could focus on extending it with new formats.

Design strategy

My strategy was to reduce complexity by design. Instead of managing differences between booking types, I focused on defining how the booking system should behave in all cases.

One booking model, multiple configurations

I designed a single booking model that could be configured based on the offering, including group classes, private sessions and courses,. This allowed different service types to share the same underlying logic while still meeting instructor needs.

The key decision was to treat variations as configuration, not exceptions.

Diagram titled 'Interaction model' showing a high-level customer booking journey divided into three steps: Select ticket type, Select date & time, Review & confirm, each with goals, key information, and system behavior details.

Predictable interactions across all bookings

Inconsistencies had crept in as new features were added. Calendars, pricing displays and confirmation states behaved differently depending on context, making the system harder to learn and trust.

I standardised these patterns so the same interactions behaved the same way everywhere. This reduced user error, increased confidence, and made the system easier for both users and engineers to reason about.

Designing components as system building blocks

Components were redesigned to work across scenarios rather than for individual screens. Calendars, pricing logic and progress indicators were built to scale across single sessions, multi-session bookings and bundles.

This reduced duplication and ensured new features could be introduced by recombining existing building blocks instead of starting from scratch.

Interface for reusable booking modules including two calendar views for November 2025—standard and with capacity rules showing availability—and two time selector dropdowns with standard and capacity rules states.

Helpful system behaviour

Where certain combinations were not possible or required special handling, those rules were encoded directly into the booking flow. Instead of relying on manual fixes, the system guided users towards valid configurations and prevented errors early.

This reduced operational intervention and increased confidence for both clients and instructors.

Three mobile screens from PilatesPass app showing class setup with basic info form, weekly class schedule with booking status, and promotions management with discount codes.

Collaboration and influence

Stabilising the booking system required close, ongoing collaboration with the founders and engineering, particularly because the platform was actively growing while the work was underway.

Partnering with the founders

The founders were focused on supporting new service types and keeping instructors happy, which created pressure to add flexibility quickly. My role was to help step back from individual feature requests and focus on the underlying system.

I framed decisions around a longer-term view and how each new variation affected maintenance effort and future delivery speed. This helped us to align on the need to invest in a single booking model rather than continuing to add one-off solutions.

Working closely with engineering

I partnered with engineering throughout the project to understand where complexity had accumulated and how the system was being maintained day to day. Instead of handing over isolated designs, I shared flows, system rules and rationale early so we could reason about the architecture together.

This collaboration helped us to identify duplication across booking flows, reduce exception handling and prioritise refactors that unlocked faster delivery. By aligning on the structure first, we were able to improve the booking experience without disrupting instructors.

The outcome

The work shifted PilatesPass from a collection of one-off booking flows to a single, stable system that could support growth without increasing complexity.

A single, scalable booking system

Multiple overlapping booking journeys were consolidated into one shared model. New service types could be introduced through configuration rather than custom logic, reducing duplication and long-term maintenance costs.

More predictable booking for clients

Consistent interaction patterns, clearer validation and stronger system feedback reduced hesitation and confusion. Clients were able to book across different service types with confidence, without having to relearn the experience each time.

Reduced operational and engineering overhead

Fewer exceptions meant fewer booking errors and less manual intervention from the founder and support team. Engineering spent less time maintaining edge cases and more time delivering new features.

Faster rollout of new offerings

Because the underlying structure was already in place, new formats could be launched more quickly without redesigning or rebuilding the booking flow each time.

A stronger foundation beyond booking

The improved components and patterns were reused across search, scheduling and instructor workflows, increasing consistency across the wider product.

Measurement

We tracked booking-related support questions, instructor confusion during setup, time to implement new service formats, and booking completion behaviour. Across all areas we found fewer issues, faster delivery, and a booking system that felt stable and ready for scale.

Reflection

This project reminded me how quickly complexity compounds when systems grow through one-off decisions. What started as reasonable flexibility had slowly become structural drag.

The key to success was stepping back to identify the commonalities across the different booking types, and designing for reuse and predictability. The result was a booking system that became easier to use, easier to maintain, and easier to extend.

Photograph of someone holding a mobile phone. The screen shows the booking confirmed page for PilatesPass

More projects

PRODUCT DESIGN   /   Complex workflows

Reducing buyer uncertainty in a complex B2B marketplace

Led the redesign of search, listings and checkout so buyers could make confident purchasing decisions without needing help from the customer support team.

View case study
Photograph of someone using a macbook. The screen shows search page for Circulate.
Illustrations of the Keebo app - onboarding steps.

PRODUCT STRATEGY   /   PRIORITISATION

Strengthening product strategy to fix a leaky funnel and unlock growth

Worked with the founder and wider teams to understand where people were dropping out of onboarding, focus the roadmap, and get the product ready for Series A.

View case study