Skip to content
Zach O'Donnell
All writing

Building League Island

What started as a bracket tracker became a league-management product: roadmap, subscriptions, support, and the workflows organizers actually finish.

Zachary O'Donnell · · 2 min read

League Island started because running tournaments in spreadsheets does not survive contact with a second team captain. It is an independent product I have been building since leaving my full-time analyst role: a place for organizers to run registration, scheduling, competition, and communication without inventing a new process for every event.

The commercial lesson is the same one I use in analytics work. A feature is finished when someone can complete the job and you can tell whether they did.

The job to be done

Organizers need a branded home for a league, a way to take entries, a schedule that respects conflicts, a result people trust, and a path to get paid if the event charges. Players need to register and to know when they play. Those workflows came before public analytics or broadcast extras.

Multi-tenancy was the architectural decision that matched the customer. Each host has a site and an admin scope. A player in two leagues is not one global identity with one roster.

Saying no in the roadmap

I sequenced a vertical slice: create the event, register, schedule, compete, publish the result. Payments waited on a real onboarding gate so a host could not turn on fees they could not collect. Adding a second game, pickleball alongside League of Legends, stayed cleaner by keeping hosts game-scoped instead of filling every screen with exceptions.

Discord and Riot are there because organizers and players already live in them. They are downstream systems. Tournament state still has to be right if a message fails to send.

Support, docs, and analytics

Help content lives in the product, split by role, because a rule that is not next to the button becomes a support ticket. Product analytics watch the lifecycle — registration, published schedules, completed matches — rather than vanity visits.

Subscriptions and paid registration run through Stripe, with money reconciled from webhooks. I would rather call payments unfinished than imply a checkout button is an operating model.

Building League Island is how I practice product ownership directly. It is not a substitute for the commercial analytics work. It is evidence that I can take a user need through a decision, a system, and a support path.