• Home
  • Projects
  • About
Substack

Hash Code: a team programming competition [2014-2023]

November 1, 2024
A person on stage throwing a cube-shaped microphone to the audience.

Hash Code was a team programming competition by Google that ran from 2014 to 2023.

I co-created this event at Google France and led the volunteer engineering team that ran and developed the competition over nine annual editions. In 2023, Hash Code was sunset along with the rest of Google’s Coding Competitions program.

Organizing Hash Code and watching it grow from 200 local participants to over 128,000 global contestants was as instructive as it was fun! This post is an attempt to capture some of the fun history of Hash Code as I remember it.

These are my personal notes, not official communication from Google.

What was Hash Code?

Hash Code was a team programming competition with problems inspired by actual challenges faced by Software Engineers at Google. The very first Hash Code problem was optimizing the routes of Street View cars capturing imagery of a city, something that my colleagues at Google France were indeed working on at the time.

The KU Leuven #hashcode hub is ready to participate with a full house tonight! Good luck to all teams! #kuleuven #hype pic.twitter.com/avVYxZ8nfC

— Thomas De Backer (@mosterdt) March 1, 2018

What made Hash Code special was the community-building experience it provided:

  • Teams: Contestants worked in teams of two to four people, practicing collaboration and teamwork.
  • Hubs: Teams gathered in self-organized local meetups, typically run at universities or developer groups, giving people an opportunity to make in-person connections.
  • Global unity: Everyone worked on the same problem at the same time during one big online round each year, making each edition a big worldwide event.

Quick pizza break and back to hacking @Andela_Kenya @Andela #hashcode2016 pic.twitter.com/LZpnzQRqnK

— Anthony Nandaa (@ProfNandaa) February 11, 2016

Why Hash Code?

The sunny courtyard of the Google office in Paris at 8 rue de Londres

Back in 2013, the engineering team at Google Paris was new, relatively small, and growing fast. As newcomers, we felt we could benefit from more outreach, including building more connections with French students and universities. And what do you do when you want to build connections with someone? Obviously, you invite them over for a pizza-and-coding session!

In a brainstorming session, we agreed on three pillars that ended up guiding Hash Code through all of its history:

  • Accessible at all levels: We made problems open-ended, so it was easy to develop a naive solution first and iterate from there. This made the competition accessible to participants at all levels, not just algorithm experts.
  • Reasonably realistic: We made it a team event because engineers usually work in teams.
  • Scrappy: Hash Code started as a side-project for a few engineers, so we couldn’t build anything too fancy in terms of the competition system.

The competition history

Hash Code 2014: the first edition

Registered participants: 200 (France-only)

After deciding on the competition formula, we set up a website and sent invitations to local universities. The first paragraph read:

Google Paris is excited to organize Hash Code, a programming competition where you will tackle a real-life challenge created by Google engineers. Using the programming language(s) and tools of your choice, your task is to develop an original solution to the problem using your coding and algorithmic skills. You will work in teams of two to four members and winning teams will be awarded cool Google prizes.

The Hash Code website, 2014

At the time one of the engineering teams at Google Paris was working on optimizing routes of Street View cars taking imagery of a city. We took this idea and adapted it into Hash Code first competition problem .

A diagram from the 2014 Hash Code problem statement, showing a simplified city map with streets and intersections that Street View cars need to cover.

Street View routing from Hash Code 2014

The event was a two-day affair: Friday afternoon introduction and practice round, Saturday for the main competition. The practice round was invaluable: teams could test their setup and teamwork, while we verified the infrastructure (e.g. electricity supply in the room, not just the scoring system).

Participants of the first Hash Code competition in 2014, coding on their laptops in the Google France canteen.

Hash Code 2014 in the Google France canteen

Things went well. I remember the focused silence of the canteen in which 200 students worked on solving the car routing problem. In one of the more playful solutions, the Street View cars were scheduled to drive routes that resembled the word “Google” when viewed from above.

This type of playfulness later became a bit less frequent during Hash Code onsite finals, as the competition expanded its reach and became more competitive.

The author, Przemek, speaking to the participants at the first Hash Code competition in 2014.

The author at Hash Code 2014

Our one major issue: pizza shortage. We took the office food team’s guidance and multiplied by two for student appetites. This turned out to not be enough!

Hash Code 2015: technical issues

Registered participants: 1,538 (France, Luxembourg, Belgium, Switzerland)

The main limitation of the first edition was physical space. At 200 participants, our canteen at Google Paris was packed. We wanted everyone interested to be able to participate, while preserving the local feel of the event.

Our solution: Hash Code “hubs.” We invited universities and developer groups across France to organize Hash Code events of their own at their own location (and with their own pizza). We provided the competition problem and the online scoring system (including a per-hub scoreboard), to help create an engaging local experience. The best scoring teams in the Qualification Round were to be invited for the Final Round at Google Paris.

For the Qualification Round, you can participate from anywhere using your own computer and Internet connection. However, in order to make the qualification round more exciting, universities, engineering schools and individuals can organize hubs to gather participants.

(The Hash Code website)

In a sense, this formula worked out too well. Our ad-hoc scoring system created a year earlier had scalability limitations that we didn’t fully understand before the event. These limitations became apparent when ~1500 contestants attempted to submit solutions at the same time:

Server logs from the 2015 Hash Code competition, showing a flood of error messages indicating the scoring system is overloaded.

Server logs of the overloaded scoring system.

Ironically, the competition problem for the round was about data center reliability.

The evening was saved by a Google Form. Contestants could continue submitting solutions while we spent the next day feeding those submissions back to the scoring system to calculate results.

A screenshot of the emergency Google Form used for submitting solutions during the 2015 Hash Code competition after the main scoring system failed.

Emergency backup submission form.

While the evening of the competition was very tense because of the breakage, we were reassured by the feedback from the participants and hub organizers – despite the glitch, people had a good time! On our side, we firmly resolved to be better prepared for the next year.

At least the onsite Final Round worked out well, featuring a fun problem about coordinating Loon balloons .

It was a lot of fun and balloons #HashCode2015 pic.twitter.com/Hl0Yxd8zJy

— Cecile (@CecileHbh) March 30, 2015

Hash Code 2016: scaling up

Registered participants: 17,307 (EMEA)

For Hash Code 2016, we wanted to expand the competition geographically, for the first time inviting participants from most of the EMEA (Europe, the Middle East and Africa) region. With the technical issues of 2015 fresh in mind, we knew that we needed a bigger boat—that is, a scoring system that could scale.

Our original Python/Django/MySQL stack was great for development speed, but didn’t scale under load. For 2016, we rebuilt the system using App Engine with Datastore as the backing database. Datastore is great for scalability. Things that would be slow in traditional SQL databases are simply impossible with Datastore. This makes application design harder, but the resulting service is pretty robust.

A screenshot of the second-generation Hash Code Judge System UI, showing a scoreboard with team names, countries, and scores.

Second-generation Hash Code Judge System

A graph showing the Judge System handling 4,500 queries per second during the 2020 competition, demonstrating its scalability.

The same Judge System handling 4,500 queries-per-second in 2020

Hash Code 2017: iterate

Registered participants: 26,420 (EMEA)

A wide shot of a the Google Paris courtyard filled with participants competing in Hash Code 2017.

With the new system in place, the 2017 edition focused on quality-of-life improvements. We expanded the Judge System with push-notification banners, per-country scoreboards, better hub manager experience, and more automated testing.

For problems, we focused on making the Qualification Round easy to understand. After 2016’s challenging Delivery drone routing problem, we created an optimization task featuring YouTube videos and pretty simple output spec, increasing solution submissions by 3x!

We also ran a new practice problem about optimally cutting pizza into slices 🍕.

Seems that someone is cutting pizza... 🍕 #hashcode2017 #ready4hashcode @Google pic.twitter.com/EHCGzXfD7x

— Ana Roig Jiménez (@anicacortes) February 16, 2017

Hash Code 2018: road to Dublin

Registered participants: 37,778 (EMEA)

A wide shot of the event space at Google Dublin during the 2018 Hash Code Finals, filled with competing teams.

For the 2018 edition, we ran a Qualification Round problem inspired by self-driving cars, a hot topic at the time.

Since our office space at Google France was closed for renovation, we moved the finals to Google Dublin. We created an urban planning problem referencing the newly re-architected Grand Canal Dock area where Google Dublin is located.

Another Hash Code first: two Google Dublin volunteers who helped with the 2018 Final Round met during the event and later married in the summer of 2021.

Hash Code 2019: going global

Registered participants: 70,865

By 2019, we’d been discussing going global for at least three years. After some debate on the competition format, we decided to preserve Hash Code’s “unity of time”: the feeling of participating together in one global event.

To stay approachable, we kept the 4-hour programming round. This is because longer marathons are less appealing to beginners. To preserve unity of time, we stuck with a single Qualification Round.

On February 28, 2019, Hash Code became a global programming competition! We ran a fun, easy-to-explain problem about arranging a photo gallery in the most “interesting” way possible.

Last week I took part with @KinnzaZ in a coding competition (#hashcode ) for the first time.
It was a blast, we failed and I wrote a new post about it: https://t.co/KAt0n3A8Xt
A big thanx to @Baot_IL for introducing us to this competition and hosting a hub #hashcodesolved

— Dalia Simons (@SimonsDalia) March 7, 2019

Hash Code 2020: virtual finals

Registered participants: 111,955

By 2020, our scoring system was battle-tested. We also had a pretty stable set of processes to manage the competition that we’ve been developing over the years, including a handy list of backup solutions in case something goes wrong. This list included some pretty unlikely scenarios such as loss of power in the office.

But our plans didn’t include what happened on February 20: YouTube’s live streaming system had a rare outage precisely during our livestream results announcement. What were the chances?

The control room for the Hash Code livestream, with multiple monitors showing video feeds and production software.

Livestream control room

Fortunately, this was not a critical part of the event: the competition itself was over at this time. We unfroze the scoreboard and sent out the livestream recording link over email.

Hash Code livestreams were short video shows for each competition. Contestants could watch them live wherever they were competing, helping create a sense of global participation despite being 100k+ people spread worldwide.

The 2020 finals were planned for Dublin for the third time. But the pandemic struck, forcing us to pivot to online. I participated in the closing ceremony… from my bedroom. We got some very nice messages from the contestants who wanted us to know that they still had a great time ❤️.

A screenshot of a video call for the virtual 2020 Hash Code World Finals, showing the organizers and finalist teams in a grid.

Virtual World Finals announcement call with participants

Hash Code 2021: virtual hubs

Registered participants: 128,410

Max and David, two enthusiastic hosts, announcing the results of the Qualification Round during the 2021 Hash Code livestream.

Max & David, enthusiastic announcers of the Qualification Round results

The 2021 edition was even more affected by the pandemic. We switched to virtual-only hubs to avoid unnecessary risks.

For problems, we intentionally chose topics unrelated to the pandemic: city traffic lights and organizing software projects. With all the disruption created by Covid, we wanted to offer an opportunity to think about something different for a few hours.

The Hash Code community showed up more than ever, reaching 128,410 registered contestants!

Hash Code 2022: new competition platform

A screenshot of the unified Google's Coding Competitions website, showing information about Code Jam, Hash Code, and Kick Start.

In 2022, we completed a major unification of Google’s Coding Competitions stacks.

Coding Competitions consisted of three annual programming contests with different formats:

  • Code Jam: algorithmic puzzles
  • Kick Start: designed for beginners
  • Hash Code: team competition focused on heuristics for computationally hard problems

The three competitions started off independently: Hash Code in France, Kick Start in APAC, Code Jam in the US. The competitions grew over time, and in 2022 we combined them under one global program.

The new, unified competition system had a few advantages. For the participants, it offered a more integrated experience: they no longer needed to switch between two websites (one for registration and another to compete). Internally, it reduced work duplication. The Coding Competitions infrastructure was developed by a dedicated team, freeing the Hash Code volunteers to focus on competition problems.

The sunset

Coding Competitions were sunset in February 2023, as announced in the Google Developers blog post .

A screenshot of the Google Developers blog post titled 'Celebrate Google's Coding Competitions with a final round of programming fun', announcing that the competitions are being sunset.

Problem archive

We set up a problem archive on GitHub. My personal favorites include:

  • Street View routing (Hash Code 2014): The very first Hash Code problem that defined our competition formula. Directly inspired by real optimization work at Google France.

  • Data center reliability (Hash Code 2015): Neat problem capturing fundamental concerns of building reliable systems from unreliable components.

  • Photo slideshow (Hash Code 2019): One of the shortest Hash Code problem statements: just arrange photos into a sequence. And that problem is already NP-hard.

Lessons learned

We learned a lot from Hash Code! Here are key lessons:

Start small and iterate. We never would have tried starting a global programming competition as a side project at Google France in 2013. But starting a local event tailored to our needs with limited resources was worthwhile. From there, Hash Code grew iteratively, allowing us to make changes, learn, and adapt.

The secret ingredient was pizza. Each edition needed a good competition problem and scoring system. But the secret ingredient was always pizza, by which I mean the community feeling behind the competition. It was the teamwork, the opportunity to meet new people, the local hub experience and the buzz on social media that ultimately made each event feel worthwhile.

My favorite stat of each edition was the hub ranking by total score. While not perfectly fair (it favored bigger hubs), it embodied the Hash Code’s spirit, because every single team helped their hub’s standing, even if they scored just 1 point.

A leaderboard showing the top Hash Code hubs of 2020 ranked by the total combined score of all their teams.

Thank you

Thank you to everyone who made Hash Code possible over the years! This includes our fantastic contestants, hub organizers, all my colleagues on the Hash Code team, and volunteers from various functions and geographies across Google.

A special callout is due to the tireless sponsor and organizer of the first editions of the event and the discoverer of the Hash Code pizza coefficient, engineering site lead for Google France, Vincent Simonet.

(Photos in this post courtesy of the Hash Code team, Mathias Kende, and others.)

    Outline

    • What was Hash Code?
    • Why Hash Code?
    • The competition history
      • Hash Code 2014: the first edition
      • Hash Code 2015: technical issues
      • Hash Code 2016: scaling up
      • Hash Code 2017: iterate
      • Hash Code 2018: road to Dublin
      • Hash Code 2019: going global
      • Hash Code 2020: virtual finals
      • Hash Code 2021: virtual hubs
      • Hash Code 2022: new competition platform
      • The sunset
    • Problem archive
    • Lessons learned
    • Thank you
    Substack