Finding scrims is a solved problem in the worst possible way. The "solution" is a human being, usually the team captain, sitting in three different regional Discord servers at 8pm copy-pasting "Plat-Dia EU, looking for a Bo1 tonight" and refreshing until someone bites. We have automated matchmaking for ranked solo queue in basically every competitive game. We have none of it for the thing serious teams do more than anything else: arrange practice against other teams.
I build Supatimer, a Discord scheduling bot for competitive teams, and the single most requested thing after "generate our lineup" is "find us an opponent." So I have been designing an automated scrim matchmaking system, and it turns out to be a genuinely interesting problem. This is a build-in-public post about why it does not exist yet and how I am approaching it. It is not shipped. It is the next thing.
Why scrim matchmaking is harder than ranked matchmaking
Solo-queue matchmaking has it easy. It controls both sides of the queue, every player is interchangeable on the time axis (you queue, you get a game in two minutes), and the only real variable is skill.
Scrim matchmaking has none of those luxuries:
- You are matching teams, not players. A "team" is 5-7 humans with their own availability, and the team is only matchable for the specific windows where enough of them are actually free with a viable comp.
- Availability is the dominant constraint, not skill. Two evenly-matched teams are useless to each other if one plays 19:00-21:00 CET and the other only after 23:00. The hard filter is "when can both teams field a real roster at the same time," and that changes every single week.
- Skill is fuzzy and self-reported. There is no single team MMR. You have an average rank, a peak, a recent trajectory, and a captain's optimistic opinion. Matching purely on average rank produces stomps.
- Reputation matters. A team that no-shows or ragequits scrims should drift down the desirability ranking. Ranked does not care if you are pleasant; scrims absolutely do.
So the matching function is not "find a team of equal skill." It is closer to "find a team whose available, comp-viable windows overlap with mine, whose skill band is close enough to be useful, weighted by reliability." That is a constraint-heavy optimization problem layered on top of data most bots do not even collect.
The unlock: you need the availability data first
Here is the thing I had to build before matchmaking was even possible: the availability layer. You cannot match two teams on overlapping windows if you do not know either team's windows.
Supatimer already collects this for the scheduling feature. Players tap a weekly calendar in Discord, the bot knows each player's roles and roster status, and it can already tell you "this team can field a comp-viable five on Tuesday and Thursday 20:00-22:00 CET this week." That dataset, multiplied across many teams, is exactly the input a matchmaker needs. The scheduling feature was, in retrospect, the data-collection phase for the matchmaking feature.
That is why I think this has to come from a scheduling tool rather than a standalone "scrim finder." Most finder bots are glorified classified-ad boards: a channel where captains post and hope. A few web apps (Esports Planner and various scrim-finder sites) go further and collect some availability, but the matching still lives on a website, outside the Discord where your team actually coordinates. The combination I am after - availability collected natively in Discord through the same buttons players already tap, then matched automatically - is the part that does not really exist yet. Matching on top of real, Discord-native availability data is a different problem from posting on a board.
How I am modeling the match
The current design, roughly:
For team A looking for a scrim in window W:
candidate teams = teams whose comp-viable availability
overlaps window W
filter: skill band within tolerance of A
region / acceptable latency
not on A's recent-opponent cooldown
reliability score above floor
score: overlap quality (how clean the shared window is)
+ skill closeness
+ reliability
+ variety (prefer new opponents within reason)
surface the top matches to both captains for confirmation
Crucially it is opt-in and human-confirmed. The algorithm proposes; two captains agree. Nobody gets auto-committed to a scrim. The goal is to collapse the 40 minutes of cross-server cold-posting into "here are three teams free when you are, around your level - want to ping them?"
The honest status
This is in development, not live. The availability and lineup half is shipped and free right now; the matchmaking half is the thing I am building on top of it. I am writing this partly to think out loud and partly because if you run a competitive team and have opinions about what would make automated scrim matching actually useful (or useless), I want to hear them before it ships, not after.
If you want to see the part that already works - weekly availability and automatic lineups for competitive teams across 21 games - it is at supatimer.com. The matchmaking is next.
I'm Raven, the developer behind Supatimer. I am building scrim matchmaking in the open. Tell me where this design is wrong on the Supatimer Discord.
Top comments (0)