Commentaries | Logistical Improvements

Madsen
10 min readApr 13, 2024

--

Not infrequently I will make mention of ideas for features or improvements that I envision being in the future of the amateur Dota league.

The emphasis on the future bit here is due to three main considerations:

  1. Simply retaining the status quo as an admin is generally enough of a time sink, particularly considering that also entails dealing with unavoidable circumstances and issues that pop up, alongside doing the usual — so committing even more time to working on improvements — the short term value of which is sometimes debatable — falls by the wayside. In particular, this means that the little downtime that exists between seasons (and isn’t being spent prepping for the next event) is reserved for not thinking about the amateur video game tournament you run as a hobby.
  2. I lack the individual know-how to implement a good chunk of the things I’d like to see happen, and even ignoring the aspect of control that I personally don’t prefer to give up, having to involve others (who might not care as much about contributing to your hobby — which is perfectly reasonable) further complicates things. Both from the more objective perspective of having someone volunteer their time and expertise for no compensation, as well as the more personal side of being uncomfortable depending on someone to be at your beck and call to troubleshoot whatever issue might pop up.
  3. None of these things are currently being worked on, or have a roadmap that allows me to state that they’re features we’re actively working on or that we’d be looking to implement in the next given period. I’ve done some cursory exploration of these ideas and what would go into making them happen, and thus have an okay (at best) understanding of how viable they may or may not be — but ultimately, they are just that: ideas.

…which, in practice, leaves me resigning to the notion that these are matters to look towards to down the line. Whether that be as part of something I’m involved in or not isn’t of much concern, but I’d like to get aspects of my vision for what a better Dota league might look like out there. And hey, someone will inevitably read this and maybe try their hand at something — but that’s very much not an expectation here. I’m mostly just blogging for blogging’s sake, yknow?

Lobby Automation

This is probably the thing I mention most often out of the bunch, and for good reason. I’ll elaborate on how I see this working first, and mention the benefits it’d yield from a quality of life experience, both for players and admins.

The way the inhouse bot works already overlaps a decent bit with what I’d like to see happen for normal Clarity League matches; the baseline is simply just creating the lobbies and then inviting players who need to be in it. The former point entirely eliminates the need for captains to fiddle with lobby setup — and, conversely, removes the room for error that leads to a number of penalties every season. On that note, automated lobbies would also auto-implement penalties, which leads me into a bit of a tangent — one that doesn’t particularly pertain to the overall topic at hand, so if that’s all you care about, feel free to skip it.

Namely, one major issue you’ll run into admining an amateur league with no stakes and no persistent rosters is that your penalization options are few and far between. You can penalize individual players with bans, but banned versus not banned is a very binary set of options compared to the very wide range of things someone can do; you’re thus left to hand out either somewhat draconian bans, or let problematic situations and behaviors slip. Thus you look towards the team as a whole, and realize your options are still few: you can dole out one of three draft penalties, varying marginally in severity, you can issue a retroactive forfeit of one match in a series, or the full series, or you can deduct points (which is different from issuing a forfeit in that it doesn’t potentially award points to another team). Everything past the draft penalties however faces the same issue as the ban conundrum: the offenses that warrant a penalty exceeding reserve draft time reductions, but not quite deserving forfeits or point reductions, are much more numerous. You’re thus often left with draft time penalties being your main option, which is where this tangent becomes relevant: people don’t really care about it.

I don’t just mean, people don’t feel impacted by reserve time penalties; they’re not massive issues, but can cause a headache. No, what I’m moreso referring to is the problematic nature of enforcing draft penalties to through.

See, a significant consideration throughout much of Clarity’s ruleset is removing the onus from active players and captains to make decisions that may be harmful to potential opponents. It’s part of why we flatly refuse, for example, the possibility of someone allowing their opponents to play with a second standin — make an allowance one time, and suddenly pressure exists on everyone to accept this in their own situations, or otherwise face scrutiny from individuals in the community. It’s a very easy way to cultivate a toxic environment (much more so than it already can be), so eliminating the possibility for rulebooking, as it’s known, eliminates the spread of that particular brand of toxicity.

Let’s bring this back to automated lobbies — when captains are solely faced with the obligation to set up lobbies, implementing announced penalties becomes one of the very few instances where the onus to make a potentially harmful decision falls on the captain of a team. We don’t really have the resources to commit to having a staff member check every lobby, so very often, teams will simply play without an announced penalty. In practice, this devalues the one realistic tool we as staff have to penalize teams, and often serves to reduce it to simply being a ticker until a team incurs enough penalties to suffer a forfeit through escalation of punishments.

With automated lobbies, this issue doesn’t exist. The penalty is set, and neither captain has any control over it. Of course, this also allows us to remove a gargantuan chunk of the ruleset, because we don’t have to bother worrying about what to do when a team messes up lobby settings. Frankly it’s just unfortunate that you can’t make a bot set a team in the lobby — though you can certainly have it yell and scream in the ingame lobby chat until both teams set the team they’re supposed to, and refuse to start until that happens.

Similarly, this would trivialize disputes over tardiness. The clock hits 25 start time, one team has 5 people in slots and the other doesn’t — beep boop, you’ve received a forfeit. Concerns over people trying to cheat this by, say, occupying the other teams slots, or bringing in other people to fill up slots, are alleviated by the bots ability to recognize who’s supposed to be in the lobby and in which slot. This does admittedly lead into one further consideration.

The one headache here are standins. A lobby bot would invite a list of names approved for that given match, based on the team list (which we could update for Free Agents). That, however, doesn’t include standins. The system would thus require some manner of standin approval mechanism; the obvious answer to this would be to enable staff members to approve a standin, temporarily replacing the missing player on the lobby whitelist with the standin for that game. This, while overall possible, does invite issues in a couple scenarios, ones that aren’t particularly uncommon.

Namely, the two that spring to mind right off the bat are:

  1. Teams requiring standins very close to, or past, the start time would be faced with the potential delay of having to wait for staff to respond, which can contribute to receiving time based penalties. In my view, the solution to this would be to allow for captains to interact with the bot and whitelist standins as needed. That does, in turn, set up for a subsequent potential issue:
  2. People sometimes come back to play. The standin becomes unnecessary, but the complication then becomes how to approach that for the bot. You could simply whitelist the standin on top of the roster members, but without replacing whitelisted roster members with the standin, that then allows the standin to slip into the slot in place of another person on the team. This presumably is solved by requiring one of two combinations of players in slots in the lobby — either the original roster, or the original roster with the standin in place of the missing player, which then allows the original player to come back in without causing issues.

I’m certain there’s other niche situations I’m not quite thinking of at this very moment, but I’m not sure that any of them are unsolvable.

A further potential issue, one that there’s multiple paths to resolving, is the matter of reschedules — be it to other days, or simply a couple hours or minutes before or after the original start time. The first option is to have captains figure it out as usual, and have staff members approve it and formally change the start time for the scheduled lobby. The second would be to arrange for the bot to allow captains to do it on Discord, though that’d still require some manner of staff approval — unless this functionality was sophisticated enough to disallow captains from arranging a reschedule that wouldn’t be approved by staff in accordance with the rules.

Obviously, this all comes to being a gargantuan boost to quality of life for everyone involved, just off the above, but there’s also minute other improvements that this all creates.

Automatic lobby creation and player invitation could be set to happen, say, 10 or 15 minutes ahead of start time. This not only then acts as a reminder, but also eliminates issues people occasionally have with finding lobbies. You could take it a step further and tie Discord notifications into it, replacing to a large extent the need for captains to wrangle their players. You’d never have to ask who won flip game 1, an admin would never have to answer what you do for game 3 flip, so on, so forth.

The obvious point to address here is that this altogether makes for a pretty significant amount of work, and I don’t know that something like this — particularly with all the minute functionality possibilities I mention — is worth the time it’d take someone for the sake of making their friendly neighborhood video game tournament marginally more convenient. If I do ever bring monetization into Clarity though, this is the kind of thing I’d look to fund.

Standin Search

This is fairly straightforward on its face, but similarly convoluted in how involved a project it’d probably be.

Picture this: we feed a list of everyone who has played Clarity, linking their Discord ID to their Dota profile. You check that they’re still on the Clarity server. Their current MMR and activity status is retrieved from the Opendota API, be it from their current rank or an approximation based on their recent solo queue pubs if there are any. Banned players are removed, players actively participating in the current season are removed, people who opt out of this whole thing are removed (alternatively, this becomes an opt-in instead, which is probably…healthier for the community, but worse for results).

You’re left with a list of known community members, who are on paper available that day (based on not playing the season and not having opted out), with a rough MMR listed.

You need a standin, you run the script/ping/DM the bot/however else it might run, it produces a list that you can then use as a baseline in your standin search.

Now, of course, this could be argued to be perhaps a bit…invasive, in some regards, but frankly it’s purely an automation of what admins do when you ask them for help finding a standin. Perhaps it’s smarter to have this be still limited in accessibility to staff, but there’s value to the concept nonetheless — and again, I’m just putting ideas I’ve had out there.

Sheet Integration of API Data

This is a point that’s seen some discussion in the context of double-checking pre-Glicko MMR, in light of the fact that we don’t have any way to obtain verification of pre-7.33 MMR (particularly relevant for first timers).

That being said, that use case will become irrelevant after season 8 — but there’s plenty more neat things that this allows for.

One idea that was talked about very early on during Clarity’s setup was simply extracting more info on players for draft sheets using the Opendota API, with the idea then being hero stats, in a sort of “signature hero” way — think Liquipedia pages for pros. I’d judge this specific use case as falling squarely into the category of neat, but not necessarily very useful.

That’s something that I’m down to embrace, though. Rather than additionally cluttering the main player lists with data of dubious value, the sheet could instead feature a new tab, exclusively for this kind of stat — and it’d double as both extra info and, honestly, pretty cool content.

You could tack on more or less anything. What’s this players most played heroes in the last 6 months? What are their most played heroes in the Practice lobby type (which is what all amateur league games fall into) in the last year? What percentage of their total matches are played in which region? How many ranked matches has this person played in the last 6 months? What is their most played lane/role, according to the parsing of the service? Fuck it, what’s their GPMs and XPMs, what’s their total match counts, so on, so forth.

It’s my very strong suspicion that this’d become a community favorite feature fairly quickly, based on my prior status as a prolific content creator in the space — people love seeing their own name, especially paired with little tidbits that they might not think to look at themselves. Yes, that usually relates moreso to having someone write something about them, but I’m willing to bet a majority of players would enjoy having access to something like this. It’s a conversation starter as well, given you could sort some of these columns, and there’d still be some tangible value from it for captains planning drafts.

In fact, what I’d really like to see is a further riff on the idea, with an emphasis on using the API to collate and archive player data for Clarity events in particular. The way I imagine this working involves also some amount of manual legwork in creating a separate sheet that documents team rosters (by role), and pairing them with the final finish of the team in the season. This sheet would then additionally include players’ performance info per season, ultimately leaving you with an archive documenting the progression of any given player’s Clarity tenure from season to season.

Of course that’d make for another involved project, but I really do adore the concept of extensive archiving, particularly in scenarios where doing it manually would make for an excruciating amount of work.

Unlisted

--

--