Overview

Scheduling for coaching platform

Scheduling is the most used tool in the coaching and consulting industries and a key feature of the SAAS all-in-one platform for coaches, Profi.io. Due to the increasing number of bugs, legacy code, and outdated logic, we at Profi.io have decided to revisit this feature and simultaneously close the most requested feature requests from our roadmap.

Industry

Scheduling, SaaS B2B coaching platform.

Timeline

9 months

My role

Product Designer, I was responsible for all design decisions in this project and executed all of the design.

Collaborated with

Product Manager, UX Researcher, CTO, Development Team, Project Manager, QA Team, Customer Success Team representative.

Overview

Scheduling for coaching platform

Scheduling is the most used tool in the coaching and consulting industries and a key feature of the SAAS all-in-one platform for coaches, Profi.io. Due to the increasing number of bugs, legacy code, and outdated logic, we at Profi.io have decided to revisit this feature and simultaneously close the most requested feature requests from our roadmap.

Industry

Scheduling, SaaS B2B coaching platform.

Timeline

9 months

My role

Product Designer, I was responsible for all design decisions in this project and executed all of the design.

Collaborated with

Product Manager, UX Researcher, CTO, Development Team, Project Manager, QA Team, Customer Success Team representative.

Overview

Scheduling for coaching platform

Scheduling is the most used tool in the coaching and consulting industries and a key feature of the SAAS all-in-one platform for coaches, Profi.io. Due to the increasing number of bugs, legacy code, and outdated logic, we at Profi.io have decided to revisit this feature and simultaneously close the most requested feature requests from our roadmap.

Industry

Scheduling, SaaS B2B coaching platform.

Timeline

9 months

My role

Product Designer, I was responsible for all design decisions in this project and executed all of the design.

Collaborated with

Product Manager, UX Researcher, CTO, Development Team, Project Manager, QA Team, Customer Success Team representative.

Problem

Losing clients

One day, the team realized we were losing control over bugs in our core scheduling functionality, impacting customer satisfaction and churn rate.

Unpredictable legacy codebase

We lost 2 big corporate clients and 50% of all customers were marked as a high churn risk because of the buggy scheduling functionality. Bugs were unpredictable, legacy codebase didn’t allow to solve arising issues.

Functionality gap

Some customers couldn’t use platform scheduling because it doesn’t fulfill their needs. Some of them use Calendly or other 3d party tools. We poorly handled their flows. 
Due to a feature gap in scheduling flows we lost some new deals.

Problem

Losing clients

One day, the team realized we were losing control over bugs in our core scheduling functionality, impacting customer satisfaction and churn rate.

Unpredictable legacy codebase

We lost 2 big corporate clients and 50% of all customers were marked as a high churn risk because of the buggy scheduling functionality. Bugs were unpredictable, legacy codebase didn’t allow to solve arising issues.

Functionality gap

Some customers couldn’t use platform scheduling because it doesn’t fulfill their needs. Some of them use Calendly or other 3d party tools. We poorly handled their flows. 
Due to a feature gap in scheduling flows we lost some new deals.

Problem

Losing clients

One day, the team realized we were losing control over bugs in our core scheduling functionality, impacting customer satisfaction and churn rate.

Unpredictable legacy codebase

We lost 2 big corporate clients and 50% of all customers were marked as a high churn risk because of the buggy scheduling functionality. Bugs were unpredictable, legacy codebase didn’t allow to solve arising issues.

Functionality gap

Some customers couldn’t use platform scheduling because it doesn’t fulfill their needs. Some of them use Calendly or other 3d party tools. We poorly handled their flows. 
Due to a feature gap in scheduling flows we lost some new deals.

Goals

Reduce customer churn and boost satisfaction

by minimizing the occurrence of issues

by minimizing the occurrence of issues

Enhance platform engagement and retention

by transitioning customers from third-party tools and resolving their cases

Solution

Rebuilt scheduling functionality with third-party solution

Due to existing time constraints and limited resources Development team chose to go with third-party solution (Cal.com API) rather than in-house development.

Solution

Rebuilt scheduling functionality with third-party solution

Due to existing time constraints and limited resources Development team chose to go with third-party solution (Cal.com API) rather than in-house development.

Solution

Rebuilt scheduling functionality with third-party solution

Due to existing time constraints and limited resources Development team chose to go with third-party solution (Cal.com API) rather than in-house development.

+

API

Design challenge

How can we integrate a third-party API while maintaining existing patterns and ensuring consistency?

Third-party solutions don't allow us to replace only the codebase, so we had to address the challenge of adjusting the interface and user flows as well. With most of our clients already using scheduling functionalities, the main challenge was how to rebuild it cautiously to avoid disrupting their existing workflow and causing confusion or distraction. Issues which we were faced with:

01

How can we keep prebooking events?

The third-party API lacks the functionality to save events without participants in advance.
However, this feature is crucial for our clients who need to schedule group sessions for the upcoming week or month. We had to figure out a way to keep this functionality for them.

02

How can we add availability at session level?

One of the top requests from our users was the ability to set up custom availability for a particular session, while also saving availability settings at the user level. Here, we encountered a lack of flexibility in this functionality within the third-party solution, which we needed to address.

03

How can we handle steps order constraints?

The existing flow on Profi.io allows team admins to choose a session host first while scheduling, as they usually remember the host of the session but not the session name. However, the third-party API requires choosing the host only after the session is selected. We needed to solve this challenge, as using scheduling for team admins, especially for teams at scale, was otherwise impossible.

04

How can we combine similar flows together?

Offer a service and schedule a session are two flows with almost the same steps. The difference lies only in the first step: in the first case, we need to show all types of services, including packages, sessions, and programs, while in the second case, we need to show only sessions. We wanted to find an elegant solution so the flows are consistent across the platform.

05

How can we handle recurring constraints?

We needed to find a way to provide more flexible recurrence settings. The Calcom API allows setting up recurrence only on the practitioner side, but we knew that our users wanted to grant this choice to their clients as well.

06

How can we save the Time Block feature?

We had a feature that allowed blocking of any time in your calendar. This was a convenient way for practitioners to prevent clients from booking without altering their entire schedule. However, this functionality wasn’t supported by the Calcom API, we didn’t want to withdraw it, as it was highly valued by our users for its flexibility and ease of use.

Design challenge

How can we integrate a third-party API while maintaining existing patterns and ensuring consistency?

Third-party solutions don't allow us to replace only the codebase, so we had to address the challenge of adjusting the interface and user flows as well. With most of our clients already using scheduling functionalities, the main challenge was how to rebuild it cautiously to avoid disrupting their existing workflow and causing confusion or distraction. Issues which we were faced with:

01

How can we keep prebooking events?

The third-party API lacks the functionality to save events without participants in advance.
However, this feature is crucial for our clients who need to schedule group sessions for the upcoming week or month. We had to figure out a way to keep this functionality for them.

02

How can we add availability at session level?

One of the top requests from our users was the ability to set up custom availability for a particular session, while also saving availability settings at the user level. Here, we encountered a lack of flexibility in this functionality within the third-party solution, which we needed to address.

03

How can we handle steps order constraints?

The existing flow on Profi.io allows team admins to choose a session host first while scheduling, as they usually remember the host of the session but not the session name. However, the third-party API requires choosing the host only after the session is selected. We needed to solve this challenge, as using scheduling for team admins, especially for teams at scale, was otherwise impossible.

04

How can we combine similar flows together?

Offer a service and schedule a session are two flows with almost the same steps. The difference lies only in the first step: in the first case, we need to show all types of services, including packages, sessions, and programs, while in the second case, we need to show only sessions. We wanted to find an elegant solution so the flows are consistent across the platform.

05

How can we handle recurring constraints?

We needed to find a way to provide more flexible recurrence settings. The Calcom API allows setting up recurrence only on the practitioner side, but we knew that our users wanted to grant this choice to their clients as well.

06

How can we save the Time Block feature?

We had a feature that allowed blocking of any time in your calendar. This was a convenient way for practitioners to prevent clients from booking without altering their entire schedule. However, this functionality wasn’t supported by the Calcom API, we didn’t want to withdraw it, as it was highly valued by our users for its flexibility and ease of use.

Design challenge

How can we integrate a third-party API while maintaining existing patterns and ensuring consistency?

Third-party solutions don't allow us to replace only the codebase, so we had to address the challenge of adjusting the interface and user flows as well. With most of our clients already using scheduling functionalities, the main challenge was how to rebuild it cautiously to avoid disrupting their existing workflow and causing confusion or distraction. Issues which we were faced with:

01

How can we keep prebooking events?

The third-party API lacks the functionality to save events without participants in advance.
However, this feature is crucial for our clients who need to schedule group sessions for the upcoming week or month. We had to figure out a way to keep this functionality for them.

02

How can we add availability at session level?

One of the top requests from our users was the ability to set up custom availability for a particular session, while also saving availability settings at the user level. Here, we encountered a lack of flexibility in this functionality within the third-party solution, which we needed to address.

03

How can we handle steps order constraints?

The existing flow on Profi.io allows team admins to choose a session host first while scheduling, as they usually remember the host of the session but not the session name. However, the third-party API requires choosing the host only after the session is selected. We needed to solve this challenge, as using scheduling for team admins, especially for teams at scale, was otherwise impossible.

04

How can we combine similar flows together?

Offer a service and schedule a session are two flows with almost the same steps. The difference lies only in the first step: in the first case, we need to show all types of services, including packages, sessions, and programs, while in the second case, we need to show only sessions. We wanted to find an elegant solution so the flows are consistent across the platform.

05

How can we handle recurring constraints?

We needed to find a way to provide more flexible recurrence settings. The Calcom API allows setting up recurrence only on the practitioner side, but we knew that our users wanted to grant this choice to their clients as well.

06

How can we save the Time Block feature?

We had a feature that allowed blocking of any time in your calendar. This was a convenient way for practitioners to prevent clients from booking without altering their entire schedule. However, this functionality wasn’t supported by the Calcom API, we didn’t want to withdraw it, as it was highly valued by our users for its flexibility and ease of use.

Ideation

Defining a scope and user flows

Ideation

Defining a scope and user flows

Ideation

Defining a scope and user flows

4

Roles

Platform admin, Team admin, Team member, Client

4

Roles

Platform admin, Team admin, Team member, Client

4

Roles

Platform admin, Team admin, Team member, Client

4

Service types

Individual session, Group sessions, Package, Program

4

Service types

Individual session, Group sessions, Package, Program

4

Service types

Individual session, Group sessions, Package, Program

3

Session types

Round-robin,
Collective,
Personal

3

Session types

Round-robin,
Collective,
Personal

3

Session types

Round-robin,
Collective,
Personal

20

New features

including: Recurrence, Overriding dates, 
Guests, Minimum notice, Auto-confirm, Time-slot intervals

20

New features

including: Recurrence, Overriding dates, 
Guests, Minimum notice, Auto-confirm, Time-slot intervals

20

New features

including: Recurrence, Overriding dates, 
Guests, Minimum notice, Auto-confirm, Time-slot intervals

Solution and key design elements

Session Page: More settings, yet still concise and easily discoverable

We added many new settings and combined two types of sessions — Individual and Group —unifying their logic. Despite the increase in settings, the new anchor navigation and expandable settings design ensure that the Settings Page remains easily discoverable and gives users the impression that it’s easy to set up.

Solution and key design elements

Session Page: More settings, yet still concise and easily discoverable

We added many new settings and combined two types of sessions — Individual and Group —unifying their logic. Despite the increase in settings, the new anchor navigation and expandable settings design ensure that the Settings Page remains easily discoverable and gives users the impression that it’s easy to set up.

Solution and key design elements

Session Page: More settings, yet still concise and easily discoverable

We added many new settings and combined two types of sessions — Individual and Group —unifying their logic. Despite the increase in settings, the new anchor navigation and expandable settings design ensure that the Settings Page remains easily discoverable and gives users the impression that it’s easy to set up.

Solution and key design elements

Session Page: More settings, yet still concise and easily discoverable

We added many new settings and combined two types of sessions — Individual and Group —unifying their logic. Despite the increase in settings, the new anchor navigation and expandable settings design ensure that the Settings Page remains easily discoverable and gives users the impression that it’s easy to set up.

Before

After: 9 new settings were added, along with sticky anchor navigation for quick access, and switchers that save space when turned off.

Solution and key design elements

Availability at session level

To unblock many use cases, we covered the following user story: 'As a coach, I want to be able to set up different available times for different sessions.' In collaboration with engineers, we found a way to modify the third-party API, enabling our users to create availability directly from the session page. Additionally, we ensured that this availability does not appear in the list of all schedulers unless users choose to display it. Keeping the list of all schedulers clear and concise was especially important for team admins who need to view all team members' availabilities.

Solution and key design elements

Availability at session level

To unblock many use cases, we covered the following user story: 'As a coach, I want to be able to set up different available times for different sessions.' In collaboration with engineers, we found a way to modify the third-party API, enabling our users to create availability directly from the session page. Additionally, we ensured that this availability does not appear in the list of all schedulers unless users choose to display it. Keeping the list of all schedulers clear and concise was especially important for team admins who need to view all team members' availabilities.

Solution and key design elements

Availability at session level

To unblock many use cases, we covered the following user story: 'As a coach, I want to be able to set up different available times for different sessions.' In collaboration with engineers, we found a way to modify the third-party API, enabling our users to create availability directly from the session page. Additionally, we ensured that this availability does not appear in the list of all schedulers unless users choose to display it. Keeping the list of all schedulers clear and concise was especially important for team admins who need to view all team members' availabilities.

Solution and key design elements

Availability at session level

To unblock many use cases, we covered the following user story: 'As a coach, I want to be able to set up different available times for different sessions.' In collaboration with engineers, we found a way to modify the third-party API, enabling our users to create availability directly from the session page. Additionally, we ensured that this availability does not appear in the list of all schedulers unless users choose to display it. Keeping the list of all schedulers clear and concise was especially important for team admins who need to view all team members' availabilities.

Solution and key design elements

Booking from client side

I adjusted the Calcom booking widget logic to meet our needs, adding the ability to choose where to start - either by selecting a practitioner or by choosing a session. I also added step indications for clarity, form and payment steps as important parts of the booking flow, and incorporated a login feature.

Solution and key design elements

Booking from client side

I adjusted the Calcom booking widget logic to meet our needs, adding the ability to choose where to start - either by selecting a practitioner or by choosing a session. I also added step indications for clarity, form and payment steps as important parts of the booking flow, and incorporated a login feature.

Solution and key design elements

Booking from client side

I adjusted the Calcom booking widget logic to meet our needs, adding the ability to choose where to start - either by selecting a practitioner or by choosing a session. I also added step indications for clarity, form and payment steps as important parts of the booking flow, and incorporated a login feature.

Solution and key design elements

Booking from client side

I adjusted the Calcom booking widget logic to meet our needs, adding the ability to choose where to start - either by selecting a practitioner or by choosing a session. I also added step indications for clarity, form and payment steps as important parts of the booking flow, and incorporated a login feature.

Team Booking Widget: the user can start by choosing a service or selecting a practitioner.

Badges that visually differentiate Programs and Packages

Login and adding quests

Ability to insert an intake form into the booking process

Team member Booking Widget

Choosing date and time

Checking details and policies before payment

Checkout

Final confirmation

Solution and key design elements

Designing with constraints: I can't change the step order, so how can I handle it?

Solution and key design elements

Designing with constraints: I can't change the step order, so how can I handle it?

Solution and key design elements

Designing with constraints: I can't change the step order, so how can I handle it?

Solution and key design elements

Designing with constraints: I can't change the step order, so how can I handle it?

Before the rebuild, users can choose Client, Host, and Service in any order.

Integrating a third-party solution imposed a hard constraint: steps had to follow a specific order.

1.Enabling a team admin to choose by host

Use case

“As a team admin with 20+ hosts, I don’t remember which type of session provides by particular host, so when I schedule a session I want to select a host first.”

Solution

Since the session list must be shown first, I added a filter that allows filtering all sessions by practitioner, so team admin can see only the sessions provided by the chosen host.

2.Providing indicators for clarity

Use case

Scheduling can be initiated from CRM or a client card, where a client is already preselected.

Solution

I added an indicator to show that the client has been previously selected and this information is saved.

3.Combining two similar flows for consistency

Use case

Offering a service and scheduling a session involve almost identical steps. The main difference is that in scheduling, only sessions should appear in the list, while in offering, the list can include Packages and Programs. Additionally, sessions that clients have already purchased need to be displayed while sheduling.

Solution

To ensure consistency, I made these flows visually similar and adjusted the scheduling flow by adding a filter for Clients. This filter allows Practitioners to easily find sessions already purchased by a particular client within the scheduling flow.

Usability testing

Usability testing: key learnings and changes

Usability testing

Usability testing: key learnings and changes

Usability testing

Usability testing: key learnings and changes

copy here

Usability testing

Usability testing: key learnings and changes

1. Scheduling a recurrent session has become easier

Learning

During usability testing, we confirmed our concerns about availability constraints. The Calcom API only allows setting up recurrence frequency on the practitioner side, which causes several issues:

❌ Practitioners must create a new Service each time they want to change the recurrence
❌ This results in numerous duplicates of the same Service
❌ It's easy for users to overlook this step when creating a Service.

Solution

Data from usability testing revealed that we cannot proceed without implementing recurrence at the appointment level. Therefore, the delivery date was postponed, and we refined the solution:

✅ Recurrence at the appointment level allows practitioners to use one Service for different schedules.
✅ It eliminates duplicates of the same Service.
✅ Choosing recurrence at the scheduling step is hard to overlook.

Before

After

2. Confusing setting has been improved

Learning

The Hosts and Location section confused test participants, and the Scheduling Type section raised many questions during the tests. Participants couldn’t figure out what this section allowed them to set up.

Solution

I added icons to illustrate every option, making it more scannable, and preselected the first option as the most popular one so users don’t need to choose it when they first create a service. Additionally, we updated the copy to make it clearer.

Before

After

3. Design of the slide out has been altered to better serve high volume cases

Learning

All participants raised a concern about high volume of services cases and the convenience of choosing a service from the long list.

Solution

I regrouped the list of services by type (which respondents identified as the most useful criterion) and added a filter by type of service for quicker searches. Additionally, we enabled search by the name of the package and program, not just by the name of the session.

Before

After

🎉 Results

New scheduling reduces churn risk and boosts platform engagement

🎉 Results

New scheduling reduces churn risk and boosts platform engagement

🎉 Results

New scheduling reduces churn risk and boosts platform engagement

🎉 Results

New scheduling reduces churn risk and boosts platform engagement

↓30%

Decreased churn risk

↓30%

Decreased churn risk

↓30%

Decreased churn risk

↓30%

Decreased churn risk

4.9/5

avg user satisfaction rate

4.9/5

avg user satisfaction rate

4.9/5

avg user satisfaction rate

4.9/5

avg user satisfaction rate

↑60%

increase in weekly bookings

↑60%

increase in weekly bookings

↑60%

increase in weekly bookings

↑60%

increase in weekly bookings

In addition, we've started to receive positive feedback from our clients 💙