Skip to main content
Build Log

September 24, 2026

Software problems I saw running a gym

Before I wrote software for a living, I owned a gym. People assume the hard parts were sales or 5am classes. No — the hard parts were software problems wearing gym clothes.

Billing is where trust goes to die

Membership billing sounds like a solved problem until you meet the edge cases: pauses for injuries, failed cards on the 1st, prorated upgrades, the member who paid cash for three months in 2019 and is now a ghost row in the system. Every gym platform I used treated these as exceptions. They're not exceptions — they're Tuesdays. The lesson I took into commerce engineering: model the messy states first-class or your front desk becomes the reconciliation layer, and your front desk is one stressed human with a spreadsheet.

The spreadsheet is the real database

Every gym runs on an official system and a shadow spreadsheet that actually knows the truth — who's injured, who gets the legacy rate, which kid's parent picks up at 6. The official tools couldn't hold that context because their schemas were rigid. This is why I'm now a believer in flexible, merchant-defined data on commerce platforms — the modern equivalent of letting the gym owner add their own columns without waiting for a vendor roadmap.

Scheduling is an inventory problem

Class capacity is inventory with feelings. Waitlists, no-shows, “I'll definitely come Thursday” — it's overselling-and-restocking, the same math as e-commerce inventory, except the SKU complains when you oversell it. Nobody built it that way, so owners duct-taped booking apps to billing apps with zero shared state and reconciled by memory.

How I'd build it now

A commerce platform as the spine — memberships as subscriptions, classes as sellable inventory, flexible metafield-style data for the shadow spreadsheet, and event-driven automations for the human moments: card fails → grace period → a kind message, not a lockout. Small composable tools over one monolith that does everything badly. Basically: treat a gym like the commerce business it is, instead of like a calendar with a cash register.

The through-line to what I build today — discount engines, checkout logic, integrations — is the same lesson from both the gym and the barbell: the edge cases aren't edge cases. Program for the missed reps.

Written by a software engineer who can't sit still. More teardowns in the Build Log, more sweat in the Workout Library.