Custom Alerts for ELEMNT

Custom Alerts allows users to send themselves interval-based alerts on a Wahoo GPS bike computer

My biggest feature launch at Wahoo, Custom Alerts enables users to create fully-customizable alerts at single or repeatable intervals. Food, drink, fun. Anything you might need a reminder of on the road or on the trail.

In the span of a year, I took this feature from concept to sketches, designs and iterations, tested it ruthlessly with developers and QA, then launched it into the world.

For this case study, I am missing all designs that were in Sketch. That includes iterations.

Team

Product Owner: Megan Powers

Lead UX/UI Designer: Mackenna Lees

Supporting UX/UI Designer: Lauren Pangborn

Bike Computers Hardware team

 

 Custom alerts are truly customizable 🍻

Which makes it so great that I’ve seen SO many beer-related alerts in the wild.

About this project

 

As an ELEMNT user, I want to use the ELEMNT companion app to set up custom alerts to fire every X miles/km and/or Y minutes while I’m riding

Problem

Wahoo needed to find a way to let users set up personalized alerts/notifications in order to stay up to date with competition in the market.

Early on, this feature needed to support alerts that are time-based, distance-based. Later into the project, calories-based was added.

Example use cases:

  1. (Complex) Every 20 minutes I want a reminder to drink, every 30 minutes I want a reminder to eat, and every five miles I want a reminder to relax my shoulders.

  2. (Simple) Every 20 minutes I want a reminder to drink.

Process

  1. Brainstorm use cases; consider users from casual commuters up to pro elite racers. Think about how I would use the feature in my own training.

  2. Plan for how the user accesses the UI for these custom alerts on mobile—and how they edit, manage, and even delete them. Use existing components when possible.

  3. Dive into the pixels, but first make sure designs flow correctly. Design for the bike computer.

  4. Iterate, polish, test.

The companion app + ELEMNT combo

Set up on your phone, see it on your bike computer during your ride

Workout-specific capabilities on ELEMNT (that users configure on the companion app):

Pair (Bluetooth) sensors

Pick a pre-made planned workout

 

Choose or make a GPS route to load

NEW Select custom alerts

 
 
 
 

Brainstorming & Sketching

 

Use cases

Early concepts from Wahoo’s product team kind of limited the feature to food & drink. Which is great—and is representative of how the majority of our users will use the feature.

However, if we’re calling this custom alerts, we should enable users to make them TRULY custom and in accordance with their needs. We need to support everything.

After reviewing use cases, I decided the best way to move forward with custom alerts for its initial launch was to include (1) a single-fire alert (happens once and only once ), and a repeatable interval alert (like eating every 1 hour).

These set my precedents for moving forward with the design process.

 
 

I brainstormed hundreds of reasons to set an alert for yourself during a ride.

These are just a few ideas from that exploration.

“I need a reminder to _____________ (every / once) ______________”

 

Drink electrolyte bottle

Eat cherry Clif Bar

Eat _____ calories

Relax my shoulders

Put on my rain jacket

Take my medication

Keep my chin up

Beat the sun

30 minutes into workout

I see the red barn at mile 56

I burn ______ calories

25 minutes (repeat)

I reach Poulsbo (~3 hours in)

At 9am sharp

On the hour

12 hours into the race

Sketching and ideas

For a while I found myself sketching custom alerts as situation-based events that were assigned to a ride type. So many of the use cases I came up with could be determined as hyper-specific. For example, alerts needed during a race are/can be different than alerts on a casual 2-3 hour ride. The needs are different.

Many of the sketches I was doing were two-factor:

  1. Playing with where the bulk of this feature sits in the existing companion app structure

  2. Determing which patterns felt right for configuring an alert

 
 
 
 
 

Early iterations of dropdowns

I was hesistant (at first) to make the value truly custom and wanted to offer presets to conserve the user’s time.

 

Designs in pixels

Unfortunately I am missing examples of my highly iterative designs for this project. What you’ll see below is live implemented in-app with a walk-through of iterative process and decisions

 

Companion app set-up of custom alerts includes…

 

Add an alert

First time UX

Components of the add modal

Alert Management

Toggle alerts on and off

Edit alerts

Delete alerts

Settings

Enable sounds and LEDs


Add an alert

The most core piece of the experience — adding a new, specific-to-you alert. Simple is best.

 
 
 

Via the Workout tab;

Select custom alerts

Manage selections

 

Main custom alerts modal

First time UX / onboarding

Main toggle on/off page

Create alert

Add an alert set to time, distance, or calories burned

Alert auto toggled to on;

Go for your ride!

Select custom alerts

Workout tab

 

First time onboarding

Modal

Add alert modal

Modal

All fields are required

Modal
 

First time user experience — onboarding

Previously our users weren’t able to add anything custom like this in the companion app. They were able to grab routes and workouts (but those were already made somewhere else).

For a first-time experience, I felt users needed some guidance as to how cool this is; example use cases and prompting to make it your own.

 
 
 
 

Add — bottom drawer modal

I iterated a lot with how best to organize & display the add custom alert content.

At the end of the day, a bottom drawer modal was the easiest to complete a full “add alert” in the least amount of time.

  • Proximity to the bottom of the screen for easy tapping

  • Not needing the full screen worth of real estate

 
 
 

Components of the bottom drawer modal

 

Limited text box

 

Our bike computers are compact; a character limit was a necessity. After trial and error, 50 chars was a good long message length.

Add a “ghost” message to the empty state (“Finish a water bottle”) to spur ideas.

 

Interval field + type dropdown

Interval is limited to integers 0 — ∞ and brings up a number keyboard only. Decimals are allowed.

Type was designed as a drop-down — there is a huge possibility that more “trigger types” get added to this feature down the line. My goal was to make sure the feature pliable if subject to additions.

Frequency picker

 

After iterations (dropdown, changing the modal contents entirely for each of these options picked), selecting between a single or repeated fire alert was done best on a simple 2-up picker that didn’t alter the rest of the modal

  • Alerts set as “only once” will be parsed as [alert message] + “AT” + {INTERVAL} + {TYPE}

  • Alerts set as “repeated” will be parsed as [alert message] + “EVERY” + {INTERVAL} + {TYPE}

 
 

Manage selections

Alerts that you’ve created for yourself stay on this “choose” page unless you need to edit or delete them. It looks very similar to an alarms app.

The most common use case for custom alerts is a rapid on/off of pre-made alerts that a user needs for that specific workout or race.

By enabling a quick toggle for on & off, and stowing editing/deleting elsewhere, we saved the user a few seconds each time they go to use the feature.

 

When a user has alerts toggled to ON they will see "X alerts selected" on their main workout tab

 


 
 
 

Edit alerts

 

Editing in the “Manage” page allows for an accordion expand-and-collapse for each custom alert that allows each field to be edited in-line!

  • Edit message (expanded message box to fit the longest message possible)

  • Frequency picker (same)

  • Interval and type inputs

  • Delete button

I took a huge amount of inspiration from Android clock/alarms for this in-line editing behavior, mostly the repeat and day-specific alarm settings that are nested in the expand behavior

 
 

Accordion behavior

 
 
 
 
 

Alerts page — Manage button

Modal

Manage alerts — expands/collapses

Full page

In-line editing or deleting

Full page

Delete alerts

If you’re gonna edit in-line—you might as well be able to delete in-line.

Deleting an alert can happen in 3 different ways:

  1. In-line delete button

  2. Multi-select delete

  3. Swipe to delete (iOS behavior)

 

Delete while in in-line edit mode

 
 
 

Delete en masse

 
 

Settings

ELEMNT companion app already had a section under Settings for Alerts. This previously only including text messages, emails, and phone calls.

Adding custom alerts here made the most sense, but I nested it so that it had space for more multiple settings for the feature.

LEDS and Sounds

I decided to keep LED and sound patterns the same as a traditional notification (text) on ELEMNT. I feared adding a third notification sound (in addition to text and call) would be too much.

 

Nested under Alerts category

 
 
 

On the bike (computer)

Reminder: this device is not a touch screen!

Various sizes of messaging (50 char limit)

On an ELEMNT bike computer, the design requirement is for a notification of any type to only take up ~one half of the screen real estate, from the bottom.

Design on-device didn’t need to be complicated. It should follow what notifications already do, and then dismiss/mute behavior should be its own mini-feature.

50 char limit across all devices

While designing for this feature, I needed to set a char limit for alerts. Comparing to our smallest font size on each device, I found the char limit was a healthy 50 chars on each.

I set font size requirements for all lengths of messages across 3 devices (ROAM, BOLT, BOLT 2.0, ELEMNT).

 

This alert is 49 chars, 1 below the limit

 
 

 

**All bike computers had specced requirements for hand-off, but speccing predominantly for the top of the line / newest model was important since BOLT 2.0 is the only full color device and the device font book has the most updated emoji range.

Bolt 2.0

The in-ride experience

 
 
  1. Alerts toggled to “on” on the companion app are ready for a workout.

  2. Once the “START” button has been pressed, all counters are turned on. TIME is accruing, as is DISTANCE. CALORIES are calculated using the appropriate datapoints.

  3. YAY! An alert counter has accrued the amount set. Alert fires and displays message, LEDs flash, piezo buzzer goes off.

  4. Alert message stays on-screen with no set fade time.

  5. User must manually dismiss alert in order to get it to disappear.

  6. Alerts stack on top on one another if not dismissed.

  7. If a user MUTES alerts, no alerts shall fire. Counters are still accruing. User confirms muted state.

  8. If a user sets alerts back to ON, they will fire back on accrued cadences. No past alerts will fire.

  9. If a user finishes a workout with alerts MUTED, that state is persistent for their next ride.

 
 

Mute versus Dismiss

Early iterations of custom alerts had global “off switch” in the companion app. I thought of it as a bunch of small switches, with one big kill switch commanding all of them.

After dev reviews, we decided a switch hierarchy wasn’t intuitive.

The concept was still good to have; it just belonged somewhere that wasn’t in the companion app. It belonged on-device instead, serving as a MUTE button, with a DISMISS for each alert.

Any alerts set to MUTE will not fire (message will not appear, LEDs and sound will not flash/play). However, alert counters still accrue in the background, should the user turn alerts back ON.

 

Mute

Muted alerts do not fire but remain on their counter (++)


Dismiss

An alert stays until dismissed

 

Dismiss Feedback

When racing, a user that receives an alert is often not able to acknowledge it until they’re in a safe setting to do so. For example, a Mountain Bike racer descending downhill. They will be able to execute on the alert (i.e. eat snack) once they’re on safer terrain. Because of this, I decided to keep alerts present UNTIL dismissed manually.

  • I’ve heard mixed reactions about this from users after launch. This style of present-until-dismissed behavior is really novel to our users. Everything prior to this had a fade counter.

  • I do think bringing a setting in for this in future iterations is important. It very much should be up to the user what the dismiss cadence looks like, if at all. For V1, it made sense to bake persistence into the feature. I would imagine this is in users’ hands in future versions.

 
 

Mute via Settings

 

MIDDLE BUTTON PRESS to toggle between these two options

Testing

 
 

Without going into too many details, this feature was relentlessly tested with the dev team to ensure alerts created & toggled to ON were immediately available on ELEMNT for a workout

I also tested the feature on my own rides (pretty much daily) and dabbled with edge cases. Those included:

  • MILE 0 or MINUTE 0

    • I.e. “I want an alert as soon as I start my ride”

  • SMALL DISTANCES ACCRUED

    • I.e. “I want an alert every .1 miles”

    • I needed to test how these stack / fire at micro-cadences

 

The case for emojis 🍕

 
 

Use cases aren’t always what you think!

I remember early on showing the dev team an EARLY iteration of custom alerts on iOS/Android. The first thing they saw was a line that said “Eat two cherry 🍒 gels”

Naturally, their first response was to ask me about it. Are emojis really a requirement for this? Yes. From the beginning, I always knew emojis would start to play a huge role in custom alerts. It’s just a natural part of human language at this point.

It’s extra dev lift, so it’s extra time. But does it feel good? Heck yeah it does! You set these alerts up for yourself, so they might as well be memorable.

 

Designs out in the world

My favorite custom alerts IRL - ultra endurance bike racer Lael Wilcox has a custom alert to kiss her wife, Rue.

Impact + learning

I have truly never done a project that has been in the hands of so many — especially friends and athletes I ride with.

This project taught me so much about give and take and how that plays into the iterative process. It took a lot of trial and error to create the most simple experience possible, and that was with the help of stakeholders, developers, and users to inform what worked and what needed polish. I’m so grateful the feature was brought back to the drawing board after the first real iteration. The feature improved drastically and it was important to take that much needed step back away from how close I was to the work.

I use the feature in my own life/riding, so it’s even more important to me that things just work out the way they were intended. And what a wonderful job everyone did on this!

I can’t wait to see what the team does for this feature moving forward.