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.


Short week, short post.

Late last year, a colleague of mine brought their Nintendo Switch + Mario Kart into the office, with the plan to have a few casual games on a Friday afternoon to wind down after a long week.

Last Friday, we just finished the second season of our official office tournament.

There is a big difference between those two statements, and I’m going to use this post to explore that difference and write about how and why we did what we did, and some of the benefits (beyond fun) that we saw.

Round 1, Fight!

Progressing from that initial Friday, there was a small group of people who played regularly, usually during lunch time. We’d found that we’d gotten to know each other much faster and more effectively through racing than we ever had through any company sponsored BBQ’s or similar events. That familiarity had even knocked down a couple of walls that had grown (unintentionally) between a few areas of the business, and we were all much more open and communicative than we’d ever been before.

So why not offer the same opportunity to everyone else in a somewhat structured fashion?

Mario Kart is a rare gem of a game. Incredibly low barrier to entry, but a high skill cap. Anyone can receive a quick lesson on what buttons do what and get in and have some fun, but it takes some serious practice to get really good. Not only that, but games are generally quick (which is good for flow) and fun to spectate as well as participate.

Perfect for a competitive tournament involving a decent number of people.

The first iteration was simple:

  • Scores at the end of each set of races are recorded per player
  • Scores are averaged over time
  • After some calibration, races are organised by score bands
  • Eventually, bottom two (out of four) in each set of races is knocked out
  • Continue until we have two sets of finals (runner up and grand)
  • Winners get to write their name on some plush shells

I’m summarising the first tournament in the points above of course. We actually started with just “lets record races and somehow find a winner” and then iterated from there.

That first tournament took us about a month and a half to run to completion. Races were organised and booked into peoples calendars as appropriate (mostly during lunch), and the finals were organised on a Friday with drinks and snacks for all to come and watch the festivities.

Competition was fierceand everyone had a great time.

A lot of people commented afterwards that they now knew more people after a month than they had in the entire time they’d been working for us, which was exactly what we’d aimed to accomplish in the first place.

Some Shows Never Get a Second Season

With the first tournament behind us, it was time to reflect and improve. We actually had a few informal retrospectives with a bunch of the participants (and non-participants), discussing what went well and what went poorly.

For example:

  • The knock outs had been particularly harsh, where one bad race could see you kicked out of the tournament altogether, even if you’d been racing well up until that point. It also limited interest because it was so brutal and final. Once you were out, there was really no motivation to keep racing
  • The score averaging was okay, but it was really just a poor mans ranking system
  • Because the races were organised around score bands, and the bottom two were knocked out, if you couldn’t get all four people in the band together (which happened a lot) the tournament was a bit stuck
  • The tournament had dragged out a little bit, from a combination of the previous point and because we started before the Christmas break

Keeping those things in mind, it was time for Season 2, where we had two main improvements in mind:

  • Complete the entire tournament, start to finish, in one month
  • Rather than average scoring + knockouts, use an ELO ranking system. People could race whenever and whoever they wanted, and as long as the race was recorded, rankings would be adjusted appropriately
  • Top four players by rank go into the grand final
  • Next four go into the runner up final (which I’d taken to calling the grandiose final)

This worked a hell of a lot better, as people could keep racing all the way, and even a series of bad races could be overcome through sheer dogged persistence (and winning obviously).

It took less effort to run (no need to schedule races and chase people down), and we got the same sorts of organisational benefits as last time (familiarity, morale, etc).

The Ramifications Of Your Actions

One interesting side effect that we didn’t notice until later was that the social break in the middle of the day, where we focused on doing something vaguely physical (instead of mental) refreshed everyone, and energised them for the afternoon. A bunch of different people let me know that they felt more productive in the afternoons after they raced/spectated compare to the days when they didn’t.

Of course, it wasn’t all peaches and cream.

The lunchtime races could be somewhat disruptive to those not participating (cheering and whatnot), so the participants had to be careful to modulate ourselves, and to strictly follow our time limits (none of this “just one more race malarkey”). Also, there might have been a few times where our executives were worried about what sort of impressions we were giving to our board of directors (when they were visiting), but a few honest conversations about the benefits smoothed those things over. Hell, the CEO actively participated in the first tournament, which was great to see.


In essence, what started purely as a bit of Friday fun, quickly progressed into a valuable social activity for getting to know people across our entire organisation.

We have no intention of stopping, so there will almost certainly be a Season 3, and it will probably be even better than the last one.

I mean, we’re an agile organisation that prides itself on being able to adapt and adjust our approaches based on our learnings, so there’s no reason we wouldn’t apply that here too. We’re technical too, so we might even build some sort of thing to help us administer and track the tournament.

Maybe image recognition for the recording of scores and automatic booking of races for matched participants? That sounds pretty cool. Or a Hipchat/Slack bot to help us administer things. So many possibilities.

We’re software engineers after all.

Hell, I’m surprised someone hasn’t tried to write a bot to race for them yet.