summaryrefslogtreecommitdiffstats
path: root/content/post/advent-of-code-from-a-community-event-organizers-perspective.md
blob: 105c4d95fcd5731bf3988d82cf3517993e15f4b1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
---
title: Advent of Code from a community event organizer's perspective
description: "A look into what went on under the hood to pull off the Python Discord celebration of Advent of Code 2020."
author: "Janine (Kutiekatj9)"
date: 2021-03-24
featured_image: "/post/advent-of-code-from-a-community-event-organizers-perspective/cover.png"
---


## What is Advent of Code?

Advent of Code is one of Python Discord's favorite events that happens each
year. An [Advent
Calendar](https://en.wikipedia.org/wiki/Advent_calendar?ref=blog.pythondiscord.com)
of small programming puzzles that are released each day from December 1st to
December 25th. The puzzles can be solved in any language, although we're
obviously partial to the python solutions. The problems are designed for a
variety of skill sets and skill levels, but it overall it gets harder as it
goes on. If you want to find out more about the event, you can take a look
here: https://adventofcode.com/about

## How Python Discord participates

All of us at Python Discord love Advent of Code. It's a great event that gets
people to learn, improve, and/or flex their coding skills with a community
event. We see a lot of people learn about new ways to accomplish fun and
interesting puzzles. Regex? Vim shortcuts and macros? Brute forcing with
powershell? All different solutions our server members have come up with.

Part of how we engage our server is by having a community leaderboard that can
be viewed in server. It pulls the data from the Advent of Code leaderboard
itself, creates a fun and engaging environment.


## The Curse and Blessing of Server Growth

I stepped into the Event Lead role 3 weeks before December 1st. Not a whole lot
of time, but we've run the event before so the prep shouldn't be too bad. I
spent the first week just getting acquainted with how the previous Advent of
Code was run and reading through any of the feedback we received. I also spent
some time getting familiar with Advent of Code itself! This was the first time
I had ever heard of it, nevermind participated.

Fun fact about Advent of Code: an individual leaderboard has a limit of 200
people. I was curious about how many people we had the previous year. After
some digging in archived channels and pestering our admins, I found out that
the 2019 Python Discord leaderboard had 177 people on it. The server in
December 2019 had 30,000 people in it. At the time of planning the 2020 AoC
event, we had over 100,000 members.

Time for some back-of-the-envelope math! 2019 had 177 participants with 30,000
people. Let's assume the % participation rate (0.0059 participants/server
member) stays the same year to year. From that ratio and applying it with our
current server size, we should expect roughly 590 people who want to join the
Python Discord leaderboard for the 2020 event. Ah, here lies the rub:
leaderboards are capped at 200 people.

## Plan A

I contacted the wonderful Advent of Code organizers to see if we could get an
increase for our leadboard. I asked (2 weeks away from the event) if they could
increase it and unfortunately it wasn't technically feasible at that time.

... Time for Plan B!

## Plan B

It's clear we need multiple leaderboards. One thing the admin team and I agreed
on was that we still wanted one combined leaderboard for the server as a whole.
Having a cohesive and non-fragmented community is important to us, especially
for events that we encourage beginners to join. But we can't get really not
have multiple leaderboards, so the next step was to hack together the
leaderboards into one combined one. We knew we needed to update `@Sir Lancebot`
to grab the information from all the the various leaderboards we have (which
all have different session cookies that are required to access information
through the API), combine it into one leaderboard, and then *re-score the
entire leaderboard*. This has to happen everytime we need an update to the
leaderboard.  (AoC organizers, if you're reading this don't worry! We had a
cooldown for when we would actually query the API.)

Also, we realized we had to do all this a week before the event: code it, test
it, review it, and deploy it. Not a great start for the first event I was
officially leading.

One of our wonderful owners Sebastiaan stayed up late several nights to get the
code working with caches, cooldowns, re-scoring logic, and the actual
displaying of the leaderboard. December 1st, midnight Eastern US time, we saw
our leaderboard go live! Overall the event was a great success. 447 people in
the server completed at least one day and a substantial amount completed all
the puzzles as well. I don't think we would've seen such great engagement
throughout the event without the combined leaderboard. A lot of the
1-hour-after-puzzle-release conversation was comparing positions on the
leaderboard, solutions, and talking about different approaches to the puzzle.


## Takeaways

- You can never start planning too early!
- Advent of Code is a great experience and a great event to help strengthen
  community. Definitely try it out in the future if you haven't.
- Sebastiaan is a fantastic human being who deserves cookies~
- Server growth is awesome, but you've got to be prepared for what that brings.