Good news everyone!

I bet you heard Professor Farnsworths voice in your head just then, didn’t you.

Our monthly Mario Kart Tournament is going strong. We’ve just finished our fifth season, with strong intentions to immediately start a sixth. Our plush shells are slowly building up a real sense of history, getting covered in the names of people who have won a tournament so far. Its really great to see.

The races continue to be a bright spot each day, acting both as social lubricant and as a way to rest and recuperate from the stresses of the morning.

Like any Agile organisation though, we’re still iterating and improving on the formula, hence this follow up post.

Tooling Around

When we first started the tournament, we were just using a Google Sheet to capture scores and calculate rankings. As we finished each season, we just created a new sheet (well, we copied the old one and cleared its data). It was a relatively simple system, where each race was a row of data, and the ELO calculation was done via some spreadsheet magic.

It was pretty good to be honest, but it was just a spreadsheet. We’re mostly software engineers, so we took that as a challenge. It didn’t help that the spreadsheet implementation of the ELO algorithm was pretty intense too, and somewhat hard to maintain and reason about.

For a replacement piece of software, the initial requirements were as simple as the sheet:

  • The ability to record races (participants, score, etc)
  • The ability to calculate a ranked list of players

The engineer that ended up implementing the tool went above and beyond though, and also included basic season and participant management (including disqualifications, which are super useful for when people have to pull out of the tournament for reasons) and alternate scoring algorithms.

There’s still a bunch of improvements that we want to make (like easily inputting scores from a chatbot, overall ELO ranking (i.e. not seasonal), charts of ranking changes and so on), but it is pretty amazing already.

Orchestral Score

Speaking of alternate scoring algorithms...

After the first season (where we used a pretty naïve combination of average score + knockouts), we’re mostly been using ELO.

Now that we have a custom tool, its much easier to implement another algorithm that sits in parallel to the existing ones, which gives us a lot of freedom to try new things. For example, last season we started out by implementing a different scoring algorithm based around the concept of average win rate.

As races are run, the system determines how likely you are to beat every other participant as a percentage score. If you’ve never raced someone before, it will infer a win rate by using other people who you have raced against (i.e. a fairly basic transitive relationship), until it you actually do race them. If it can’t do that, it will just use your average.

Your win rate percentage against all other participants in the season (a score between 0-100) is then summed together and all the sums are ranked numerically.

As a whole, it was a decent enough algorithm, but as more and more races were run, changes to the scores because less and less meaningful, as each subsequent race had less and less of an impact on your average.

It was a pretty accurate long term representation of how you stacked up against the other people, but it was slow to change if you improved. It was also really boring from a tournament point of view, and didn’t really allow for comebacks and upsets, which are the most interesting bits.

In the end, we just used ELO again, but that doesn’t mean it wasn’t worthwhile.

You’ll never get any better if you don’t try new things.

Spanner? Meet Works

In order to keep things interesting, we’ve also added season specific conditions and constraints, rather than just racing the same way every time.

For example:

  • Season 3: 150cc (mirror), Standard Kart, Shy Guy
  • Season 4: 150cc, Sports Bike, Yoshi
  • Season 5: 150cc, Free For All
  • Season 6: 200cc, Frantic Items, Free For All

This has honestly had a bit of a mixed reception.

Some people are happy to be disrupted and learn how to play a style different than they might normally be used to.

Other people are unhappy about having to change just to participate. This comes down to a few different reasons include comfort level (“I like racing like this, why change”), desire to get better at one particular build instead of getting average at many and just pure enjoyment or lack thereof (“Its called Mario Kart, not Mario Bike”).

I personally enjoy the conditions and constraints, because I think it keeps everything from getting stale, but I can see the other side of the argument as well.


And that’s kind of it for the update on our Mario Kart Tournaments.

All in all I think it continues to be a great social activity that helps people get to know one another and provides a nice non-cerebral break in the middle of the day.

Having said that, our first season had the most participation by far, so I think the competitive nature of the tournament (and the improving skills of the regular combatants), is erecting something of a barrier to entry for the people who aren’t quite as competitive.

I have some ideas about how we might be able to deal with that, but I’m not entire sure how effective they will be.

For example, if it was a requirement that anyone in the top four was unable to participate in the next season until they trained a protégé, that might encourage highly competitive people to induct new members into the group.

Or they might just stop playing completely, which would be unfortunate and make me sad.