How I (almost) Won a Month-Long Hackathon (in a month)
By Expending Way Too Much Effort
Another year, another hackathon. This time, much like last time, I ended up (almost) winning. Except this time, rather than spending only 3 hours to win $2k, I spent over a month to win the same prize. Why? Well, let's just say there was an even bigger prize at stake...
Enter: the GCP "Easy as Pie" Serverless Hackathon.
$20k prize pool. $10k grand prize. 5 "runner-up" $2k prizes. All in the name of trying out the latest and greatest in GCP serverless tech: Cloud Functions, Cloud Run, and Cloud Workflows.
Unlike the last hackathon — which had a much more specific theme — this hackathon's theme was much simpler: just use the serverless tech and build something... Cool. Creative. Interesting. Maybe sprinkle in some machine learning if you're feeling it.
Well, I was certainly feeling it. These serverless techs were definitely something I had familiarity with (with the exception of Workflows, which was new to me), so this seemed like a great opportunity to flex some tech muscles and put together something a bit more worthy of a $10k grand prize than my last 3 hour "project".
However, it didn't start out that way. Initially, just like the last hackathon, I wanted to take one of my existing projects — the Dank Meme Classifier seemed like a perfect fit this time — deploy it, and call it a day. But as I went over the judging criteria, I decided to think about things some more:
How has the team effectively utilized at least one Google Cloud Serverless product — Cloud Run, Cloud Functions, or Workflows?
How easy is the application to use?
How advanced is the prototype presented?
How soon could your project go to market?
Return on Investment (ROI):
Is the project cost-effective?
Is the project worth pursuing?
If I wanted to win the grand prize, I'd have to look at maxing out all of these criteria. The Dank Meme Classifier would get close, but I had my concerns about the ROI category: I didn't really think it would be considered a "project worth pursuing". Additionally, while it was a "complete" product, it wasn't a particularly "advanced" one.
As such, I started brainstorming. I still wanted to use the Dank Meme Classifier as a base, but wondered how it could be expanded to be more "advanced"...
How about a game? What if we gamify classifying memes?
Yep, that was my brilliant idea: The Dank League of Memeing Battlegrounds. A game where you're given 10 memes, a timer, and the ability to swipe them up and down to guess if they're dank or not. And how do we know if they're actually dank or not? Using the dank meme classifier!
So how does that idea do on the judging criteria? Well, Technical Execution would be effectively flawless. Cloud Run will host the Frontend (React App) and Backend (Flask API) just like is done for the Dank Meme Classifier, and Cloud Workflows will replace PubSub to coordinate the litany of Cloud Functions that are used for ingesting and processing memes from Reddit. Gotta make sure to use all three services cause that'll clearly win more points.
As far as ease of use and how advanced the 'prototype' would be, well, that's just all about building, so just gotta execute to prove those right.
Same thing as far as Completeness goes.
Now, that pesky ROI category... the project was always going to be cost-effective — as long as we look at things from an infrastructure POV — since these serverless services are basically free at the scale we use them.
But is the project worth pursuing? Well, it's more worth pursuing than just the Dank Meme Classifier, so that was good enough for me. Of course, this is almost assuredly what did me in in the end as far as not winning the grand prize, so... no.
In any case, a game about swiping memes up and down was it.
Once the idea had been manifested, the project just became the usual building process: Sketch out the UI. Build some Figma mockups. Put together a giant to-do list. And Just. Start. Grinding.
First up was getting all of the Cloud Functions for the meme ingestion pipeline re-deployed and refactored to work with Cloud Workflows. As I mentioned, they were originally built to work with PubSub, but I found Workflows basically perfect for this use case of passing data between a bunch of Functions. Of course, I also wanted to expand the number of Functions being used for... you know, 'judging' purposes.
Next up was building the new Frontend. Decided to go with NextJS this time just to get some more experience with it (the ongoing hotness and all that), but it was just the usual process of "build each page, make them functional, yada yada". Nothing but fun, grindy React + Sass here. Of course, making the game actually work wasn't completely trivial, but it also wasn't all too difficult once I threw
react-spring at the problem.
And really, that's what makes an app feel "polished": lots and lots of (
react-spring) animations. If you want the secret to wowing the judges, the answer is always "add more animations".
After several weeks of off-and-on coding, I had a working game. Much wow.
But of course, the actual app is only one component of a hackathon project. As everyone knows, it's the presentation that really matters. And just like for the app, I decided to take my presentation up a notch this time.
Just to compare things, this is the video I submitted for last year's hackathon.
And this is what I submitted this year.
This year's video is an improvement in every single way possible over last year's.
For example, last hackathon's video was literally a single take, completely made up on the fly, using basic screen recording and my laptop's built-in mic. No edits, no effects, no nothing; I just needed to record a demo as fast as possible to submit before the deadline.
This year, though, not only did I script the video... not only did I use a proper dedicated microphone... not only did I do multiple takes... not only did I screen record dedicated a-roll/b-roll... not only did I spend much more than just 10 minutes on it...
I literally taught myself (the basics of) video editing and Final Cut Pro to stitch everything together.
That's right, using the proceeds from my first hackathon win, I ended up buying my first Mac (an M1 Macbook Air) and unlocked access to Apple's line of Pro creative apps — Final Cut being the obviously useful one here. Quite poetic that it would end up playing a big part in 'winning' me my next hackathon.
Of course, that's just the technical side of the presentation. The creative half was coming up with the utterly 'humorous' branding and messaging. It's one thing to build a joke project; it's quite another to full-commit and market it as one.
And with that, I had a complete project submission! Twas a fun month putting everything together and learning the basics of video editing.
But now, for the final results...
Serverless Hackathon winners announced | Google Cloud Blog
Yep, I 'only' won one of the runner-up prizes (or, as they put it, "Best in Show" prizes). I can only speculate, but I would bet serious money that the reason I didn't end up taking home the grand prize was that my project idea was too much of a joke. Heck, the blog post even goes out of its way to say that the judges awarded the Dank League of Memeing Battlegrounds an "A+" for execution, so it only seems like the logical (and utterly unsurprising) conclusion.
In the end, was it worth it? Well, the ROI was certainly several orders of magnitude worse relative to my first hackathon win, but it was still (kinda) a win, so... probably.
Would I have done anything differently? No. Should I have done anything differently? Well yeah, guess I should have chosen a more serious project idea! A useful/serious project idea combined with my level execution would almost certainly guarantee a grand prize win.
But where's the fun in that?
Till next (hackathon) time.