How I Won a Month-Long Hackathon in 3 Hours

By cheating*

*Terms and conditions apply (quite literally)

I'm not much of a hackathon guy. Partly because I see them as a waste of time, partly because I'm far too pessimistic to think that I'd be able to put together anything 'win-worthy' in such a short period of time.

But on March 16th, I came across this post on the GCP subreddit:

Official Google Cloud Code_Love_Hackathon | 10k Prizepool

Being someone who is fairly experienced in the ways of GCP (formerly Associate Cloud Engineer/Professional Cloud Architect certified), I figured this would be a fun break from the never-ending marathon that is building a startup (uFincs, by the way).

The hackathon overview outlined the details:

  • 4 different project categories:

    1. "The Next Level of Love" = build an app that makes developer lives easier

    2. "The Next Level of Gaming" = build a game of some sort

    3. "Spreading the Love" = build a messaging app of some sort

    4. "Wildcard" = build whatever you want, duh

  • Besides the per-category themes, you also had to make use of the new GKE "Autopilot" mode, along with the GCP Cloud Code IDE extension

  • A prize pool of $10k USD distributed as $2k to each category winner, along with $2k in a bonus category for "Best use of GKE Autopilot"

  • Lasts from March 29th to April 21st (basically a month, if you include pre-official start time)

First of all, this is the first month-long hackathon that I've ever seen. I mean, I guess it makes sense given the (virtual) times we live in, but still, I thought that was a pretty excessive timeline. 

Secondly, the requirements seemed rather easy. I'm decently experienced with GKE, so just making it easier by tacking on Autopilot meant that all I had to worry about was choosing a category to enter in.

For reference, GKE's new "Autopilot" mode just relieves you, the cluster operator, from having to worry about managing nodes. Instead of getting billed based on nodes, you get billed based on how much CPU/RAM each pod is allocated (except it costs a lot more, strictly comparing compute resources).

Just another layer of abstraction in the never-ending game of "The Cloud".

Finally, while $2k per category is a pretty nice chunk of change, it definitely wasn't enough to warrant building a fully custom project and certainly didn't warrant a month's worth of work.

As the start date of the hackathon approached, I brainstormed some ideas but ultimately decided that it wouldn't really be worth my time. The better ROI here was prepping uFincs for launch, so I decided to just continue on with my marathon instead. 

In the meantime, I registered for the hackathon and joined the related Slack team just to keep an eye on updates (and on the competition).

One Month Later

A month has passed. I had just finished up some big feature development work for uFincs along with dealing with some ops-related tasks that I had been putting off (check out the start of the DevOps Detour series if you're interested in that). I was well on track for launching uFincs in the next week.

It was purely coincidental that on April 21st, the final day of the hackathon, I checked into the Slack channel to see an update saying that it was the last day of the hackathon. It was around 7:00 PM at this time, and the hackathon finished at 3:00 AM my time. 

I made the fortunate decision to log in to the hackathon platform and check out what projects had been submitted. With only ~8 hours to go, surely most teams would have submitted by now (or not, depending on what kind of person you are). And you know what I saw?

A fully open category.

While 3 of the 4 categories had a smattering of submitted projects (no more than 3 or 4 each), the "Next Level of Gaming" category had zero entrants.

This was my opportunity.

If I could submit something, anything, to this category, then I'd be the winner! Obviously. It was just a small matter of submitting what...

Well, this is where the 'cheating' comes into play. See, the official rules for the hackathon didn't say that you couldn't re-use code from an existing project — all you needed was the IP rights to submit the project (heck, you didn't even have to submit any source code). 

Now, is re-using old (open-source) projects against the spirit of a hackathon? Probably.

But money.

So, digging into my portfolio of GitHub projects, I narrowed it down to two:

  1. The Dank Meme Classifier

  2. The Buzzword Bingo

Re-purposing the Dank Meme Classifier into a game of sorts was one of the ideas I had had when first brainstorming for the hackathon, but considering the time constraints, I didn't think it'd be wise to attempt anything of the sort. So I decided that The Buzzword Bingo would be perfect, considering it was already a game!

In fact, The Buzzword Bingo was also already containerized. So really, all I had to do was spin up a new GKE cluster, deploy it, and call it a day!

And at 7:00 PM, that's what I decided to do: I committed myself to getting this project back up and running and submitting all of the necessary components of the hackathon project (namely: some marketing fluff, a demo video, and some slides).

First things first was provisioning a new Autopilot cluster to deploy on. I decided to spin up a separate GCP project to keep everything contained (and so that I could easily tear it all down later). I used Kubails (my home-grown framework for developing GKE-native apps) to provision a new project and quickly deployed a new cluster using the generated Terraform configs — although I had to do some minor tweaks to get the Autopilot settings working since it conflicted with some existing node pool configs.

Within a couple minutes, my new cluster was up and running. I tried to deploy my usual stack of cert-manager and ingress-nginx, but ran into some more conflicts with Autopilot mode. If I remember correctly, one of the deployments tried to make some changes to kube-system, but that namespace seemed to be locked down in Autopilot clusters. I can understand why, but it did make my life a bit harder.

Well actually, it ended up making my life easier. By foregoing cert-manager and ingress-nginx, I was able to just deploy the two services that make up The Buzzword Bingo (a backend WebSocket server and a frontend React app) directly as deployments with individual load balancer services. It was gonna cost me more to run it (since using ingress-nginx would have meant only needing a single load balancer), but this was only going to be for a short time anyways. And with a $2k prize on the line, I figured I could afford it.

And you know what else I figured I could afford? A new domain name. See, I actually do have an always-available version of The Buzzword Bingo (for portfolio purposes), but I run it on GCP Cloud Run because it's basically free (haven't been charged for it yet and I hope you, dear readers, don't end up costing me anything :). But since the version running for the hackathon would be on a different IP, I figured a new domain name couldn't hurt. 

I finally decided on a minor re-branding: http://lovelybuzzwordbingo.com (now defunct). Why "Lovely"? Because the whole theme of the hackathon was "love", and if I was really gonna phone it in, I might as well make this the one on-theme change that I would make. Cause I certainly didn't have the time nor care to make any other changes.

With the domain name bought, the load balancers balancing, and the DNS records… resolving, by 8:00 PM, the Lovely Buzzword Bingo was now open for business!

That was the 'hard' part. Or 'less easy' part. I mean, I can deploy GKE apps in my sleep at this point (or at least, my Cloud Build pipelines can), so the only thing left to do was write up all the marketing fluff for "what the project is", "what problem it solves", "how it does it", yada yada. Having spent the last few months writing marketing copy for uFincs, that wasn't much of a problem (although my many years of bullshitting-through-school-projects certainly helped as well).

Of course, it was oh-so-much easier to write these kinds of things when you're not taking it seriously. I mean, the app in and of itself is pure "not taking it seriously", so at least we were on theme for that (for reference, I originally made The Buzzword Bingo as a joke… for a presentation… in an ethics course… in university).

The only minorly annoying part of the submission requirements was a 3-5 minute 'pitch' video showing off the project. Since we didn't even have to submit the source code, I assumed that this was basically all the judges were basing their decisions on. So I'd have to be utterly deliberate about thoroughly explaining every minute detail of the project.

Or something like that. I'll let you be the judge of just how terrible my pitch was:

No script, no edits, one take — just the way I like it.

In fact, I'll let you be the judge of my whole submission: everything I submitted can be found at the end of this post.

Ultimately, by 10:00 PM, I had my video recorded, my marketing fluffed, and my slides hastily thrown together. Clicked submit and called it a night, hoping that no one else would submit any more 'gaming' projects and that I'd be the de facto winner.

The Next Day

I woke up the next morning to have my worst fears realized: there were more gaming submissions. Not one. Not two. But three more submissions had shown up in the wee hours of the night. 

Ah crap. There go my chances.

Looking over the other submissions (which I won't include here because of 'legal' reasons), some of them definitely looked like they had work put into them. Like, one of them had a whole story for how they came up with the idea, beta tested it, implemented it, and further conducted user testing. I honestly thought that that project had it in the bag.

The worst part of all this is that the gaming category didn't even end up having the fewest submissions; one of the other categories only had two!

Sigh. At least I didn't waste much time putting the whole thing together. And it was certainly hilarious to imagine what the judges would think when they would inevitably have to gaze upon my monstrosity. But I definitely didn't have any hopes of winning at this point.

So I just kind of forgot about the whole hackathon after that. Judging would happen over the next week with the winners being announced on May 3rd as part of a Kubernetes conference. Maybe I'd remember to check the Slack sometime in the future to see how it went down.

Back to uFincs, I suppose.

(And back to uFincs I went, where I finally launched and gained my first paying customers. Check out that story here: uFincs Update #7)

May 3rd

Remember, I had completely forgotten about the hackathon at this point. I was just riding off the high of more-or-less successfully launching uFincs to the world.

So when I received the following email from one of the hackathon coordinators, you could say that I was surprised:

Hey Devin, 

Thank you all for participating in the {Code_Love_Hack}! 

On behalf of Google, I wanted to let you know that we appreciate all the time, effort and dedication that went into creating each amazing project. The judges had so much fun seeing all the apps and games you created!

Without further ado, here are the {Code_Love_Hack} winners:

Challenge #1 - The Next Level of Love
Team Member: [redacted]
Project: [redacted]

Challenge #2 - For the Love of Gaming
Team Member: Devin Sit
Project: Lovely Buzzword Bingo

Challenge #3 - Spreading the Love:
Team Member: [redacted]
Project: [redacted]

Challenge #4 - Wildcard AND For the Best Use of Google Kubernetes Engine Autopilot:
Team Member: [redacted]
Project: [redacted]

Congratulations to the challenge category winners and congratulations to all for creating such wonderful projects!! BeMyApp will be reaching out to the winning teams, as well as the winners of the survey participation drawing.

Hope to see you at a future hackathon! 

And here's the official follow-up post from the GCP blog.

So yeah, somehow, by the grace of all-that-be at Google, I won the gaming category. With 'only' 3 hours of work.

🎉🎉🎉

I can only assume this was possible because the judges were greatly amused by the idea of playing Buzzword Bingo at their next meeting. Or perhaps they just found the other entries to somehow be even worse. I don't know. I doubt they'd tell me even if I asked: the official rules prohibit them from revealing the scores they gave for each project.

In any case, I'd say $2k USD for 3* hours of work is probably the best ROI I'll ever make, at least for a very long time.

And that's how I won a month-long hackathon in 3 hours. By reusing old work, making a big joke out of it, and not taking it seriously at all.

My hackathon win rate is now 100%.

* Obviously it took me more than 3 hours to originally build The Buzzword Bingo, but that’s not exactly the point, is it Mr. Pedant?

Takeaways

So what can you, dear reader, learn from all of this? 

Whatever it is, I certainly don't suggest taking it to heart. 

Disclaimers

There is nothing to disclaim except that there are no disclaimers. I wasn't paid to write this post or promote GCP in any way — I just thought the whole affair was funny.

My Complete Submission

And here's everything that I submitted as part of the hackathon. May it guide all of your future hackathon'ing efforts.

Title

“Lovely Buzzword Bingo”

Short Description

“A game to synergize with your corporate friends at the next holistic team meeting.”

Banner Image

Logo

Video

"The Issue"

“You know, sometimes, when I'm listening to my boss, or my boss' boss, ramble on and on about 'innovation', 'best practices', and 'blockchain', I just want to tune out. I'm sure all of my teammates want to as well, since we're all in the same boat really. So I wanted to build something to both increase our team synergy while improving the alignment between boss and team.”

"Our Magic Solution"

“Lovely Buzzword Bingo (http://lovelybuzzwordbingo.com) is our magic solution. Here, we have something fun and simple that _all_ team members can enjoy: bingo, but with buzzwords. Now we all _have_ to pay attention to what the boss says, otherwise how are we going to get a bingo? Everyone can just pull it up on their laptop, or another monitor, and play along. Truly, team bonding at its finest.”

"How it Works"

1. Visit http://lovelybuzzwordbingo.com

“You'll be presented with a beautifully hand-crafted bingo board, with only the most holistic buzzwords included.”

2. Attend a Company Meeting

“Give the site to all your team mates as well. This is the point where you have to listen to your boss for once. You'll see, in the game, all the people who have connected.”

3. Win!

“Surely, if you were listening, then your boss will spout off enough buzzwords to easily get you a bingo. Congrats! You're a winner! Your random username will be displayed for all to see.”

Slides

https://docs.google.com/presentation/d/1YQanInRIghocVIcVaRSlk0CxId4DtEtVsMyiyQNHfZE/edit?usp=sharing