← All posts
Building in publicSeptember 24, 2026 · 3 min read

What running Ateamo taught us about building software for clients

KFKevin FrickeLone Star Media
Abstract warm-dark composition: a sage pitch outline with cream dots in a tidy 4-4-2 and one terracotta dot in midfield.

Ateamo is our own league-management app: 12,000 adult players, three leagues. Five lessons from carrying the pager that change how we build for clients.

Most software studios only ever build for other people. We do that too, but we also build, fund and run our own products. The biggest of them is Ateamo, team and league management for adult recreational sports.

Twelve thousand players across three leagues use Ateamo every week. It handles rosters, season scheduling, RSVPs and lineups, payments, notifications and chat. When something breaks at 8:45 on a Saturday morning, nobody else gets the call. We do.

That's the point. Here are five things running Ateamo taught us, and how each one shows up in the work we do for clients.

1. Your users' real system is the group text

Before Ateamo, the plan for a Saturday match lived in four places: a group text that scrolled past the kickoff change, a chat app nobody checked on game day, an email half the roster never opened, and one captain's memory.

The software's competition wasn't another app. It was the group text, which is free, already installed, and good enough right up until the field changes.

That changed what we built. Schedule changes, rain delays and payment reminders now go out as notifications fired by the same system that owns the schedule, instead of relying on someone to remember to post twice. Chat sits next to the roster. Games sync into the calendar players already use (Google, Apple or Outlook) and update when a match moves.

What it means for clients: before we design a feature, we ask what people do today instead. The workaround is the real competitor, and the product has to beat it on convenience, not just features.

2. Money paths deserve the most boring code you own

League fees are the moment a player decides whether the league is run professionally. A double charge or a payment that went through but didn't register is more than a bug. It costs trust, and it lands on a volunteer organizer's desk.

So the payment code in Ateamo is deliberately unexciting. It verifies every notification from the payment provider, it's safe to retry, and it reconciles our records against the provider's. None of that shows in a demo, but all of it shows in production.

What it means for clients: when we scope a project, we treat sign-in, payments and data writes as the riskiest parts, and we build and test them first. We wrote more about this in our guide to choosing a payment gateway.

3. Load arrives on a schedule you don't control

Ateamo's traffic isn't spread evenly. It clusters around game days, registration deadlines and the hours before kickoff, when everyone checks the field at once. A system that feels fine on a quiet Tuesday has to hold up at 8:50 on a Saturday.

What it means for clients: we ask early when your peaks are: a product launch, the end of the month, open enrollment, Black Friday. Then we test for those moments rather than for averages.

4. Every shortcut sends you an invoice later

When you run your own product, you can't hand off the consequences of a shortcut. The quick fix you skipped testing becomes the page you get on a weekend. The unclear code becomes the feature that takes three times longer next season.

Carrying that cost changed our habits. We write down how core flows work. We keep environments separate. We add tests around the parts that would hurt most if they broke. Not because a process document says so, but because we've paid for the alternative.

What it means for clients: we build as though we'll be maintaining the code for years, because often we are. Slick Cactus began as a first build, and we're still the team shipping it today.

5. Saying no is a feature

Every week someone asks Ateamo for something reasonable: a new stat, a custom report, a setting for one league's unusual rule. If we said yes to all of it, the app would get harder to use for everyone. Real product work is choosing what not to build and keeping the core fast and obvious.

What it means for clients: we'll argue with you about the roadmap. Not to be difficult, but because we've learned what a crowded product costs its users. When we push back, we'll explain the tradeoff and leave the decision with you.

Why a client shop runs its own products

People sometimes ask whether our products distract from client work. We think they do the opposite. Ateamo, SessionFYI and KineticMade are where we find out whether our advice holds up. Everything we recommend to clients, we've already had to live with.

If you're building something and want a team that's been on the other side of the pager, see how we work or check out our products. If you run an adult sports league yourself, Ateamo is open for your next season.

Keep reading.