Skip to content
← Back to insights

Booking Isn't Loyalty. Showing Up Is.

Insights · Financial Services · Loyalty System · 7 min read ·

A member books the 7pm ride class on Tuesday. Life happens. She cancels at 6:45, or worse, just doesn't show up at all. In her app, nothing changes. No points, no progress, no dent in her tier. The bike she reserved sat empty for an hour, but as far as the loyalty system is concerned, that class never existed.

That's not a bug. It's the whole point.

The tempting shortcut that doesn't hold up

If you're designing a rewards system for a studio or gym, the easy version writes itself: member books a class, member gets points, done. It's simple to build, simple to explain, and completely wrong for what a fitness app is actually trying to encourage.

Booking is intent. Showing up is behavior. A loyalty program that rewards intent ends up rewarding people for reserving spots they never use, which is exactly the opposite of what a studio wants. Every booked-but-empty bike is a seat someone else couldn't take, a class that looked full on the schedule but wasn't. Reward that, even accidentally, and you're paying members to make your scheduling problem worse.

Where the line actually gets drawn

The fix sounds almost too obvious once you say it out loud: points aren't earned at booking. They're earned at attendance, confirmed the moment someone actually walks in and checks in for class, not the moment they tap "reserve" on their phone.

To make that work, the system has to treat every booking as landing in one of three buckets, and only one of them pays out anything:

Attended. The member showed up and was checked in on-site. This is the only status that triggers points, and it triggers both the quarterly status points and the permanent lifetime points at once. Cancelled. The member backed out ahead of a fair cutoff, commonly somewhere in the twelve-hour range before class start. No points were ever issued, so there's nothing to reverse; the credit that paid for the class simply goes back into the member's account, ready to be spent on a different booking. No Show. The member didn't cancel and didn't show up. Staff mark it manually after the fact, and the credit used for that booking is forfeited rather than refunded, since the spot was held and effectively wasted.

That three-way split does more work than it looks like it should. It means a late change of plans and a genuine no-show aren't treated the same way, which matters because they aren't the same behavior. One is a member being considerate of a deadline. The other is a seat that quietly disappeared for everyone else.

The one moment that has to work

Of course, this only works if the check-in moment itself is frictionless. In practice, that's a staff member scanning a QR code at the door, which confirms the person is physically there before anything gets credited. Staff also have the ability to book a member in directly at the front desk, so a walk-in doesn't get penalized just for not using the app that day.

It's a small piece of the flow, easy to overlook when you're mapping out tiers and milestones, but it's the hinge the entire system swings on. Get that scan-and-confirm step clunky or unreliable, and members start losing points they earned fair and square, which is a far worse experience than never earning fast rewards in the first place.

The same instinct shows up elsewhere in the app

Once you notice this pattern, a design decision built on the same instinct as booking-versus-attendance is easy to spot elsewhere. When a member picks a seat for a class, they get a short window, a few minutes, to lock it in before the system releases the spot back to everyone else. The seat doesn't belong to the tapper the moment they tap it. It belongs to them once they've actually confirmed it in the time given, the same "commit, don't just gesture toward committing" logic that governs whether a class earns points at all.

Neither of these is really about points or seats specifically. Both are about the same underlying question: what counts as a real action versus a placeholder for one, and building the reward, or the seat hold, or the credit, around the real thing instead of the placeholder.

What this looks like from the member's side

None of this needs to be explained to end users as a policy. It should just feel intuitive: show up, get credit. Cancel with reasonable notice, get your credit back. Don't show up at all, and the credit is simply gone, no lecture attached. The absence of punishment for honest cancellations is doing a lot of quiet work here. A member who cancels politely in advance isn't made to feel bad about it. A member who genuinely forgets doesn't get an angry notification, just a booking that quietly resolved itself as a no-show.

It's tempting to add extra friction on top of that (a warning banner, a cooldown period, a three-strikes rule) but the moment you do, you've built a system that punishes people for not showing up, instead of one that simply rewards people for showing up. Those sound like the same thing. They aren't, and members feel the difference.

The takeaway

The most effective part of this design isn't a clever algorithm. It's a single, deliberate choice about when to trust that a class actually happened, then building everything else, credits, points, even seat holds, on top of that one moment. Reward the click, and you're measuring intentions. Reward the walk-in, and you're measuring the studio at work.

Bring us your RFP, your scoped brief, or the problem.

We respond within one business day.

We support multi-quarter scopes and mission-critical systems.