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.