|
| 1 | +--- |
| 2 | +layout: ../../layouts/BlogPostLayout.astro |
| 3 | +categories: |
| 4 | + - programming |
| 5 | +date: "2025-03-01" |
| 6 | +unlisted: true |
| 7 | +title: The Joy of Hackathons |
| 8 | +--- |
| 9 | + |
| 10 | +I love [hackathons](https://en.wikipedia.org/wiki/Hackathon). They remind me of |
| 11 | +the pure joy that can come from programming, from making something |
| 12 | +[fun](https://www.jollycode.org/) or [interesting](https://neal.fun/) or useful |
| 13 | +just by typing the right incantation of code. Or these days, by giving the right |
| 14 | +prompt to a [LLM](https://en.wikipedia.org/wiki/Large_language_model). |
| 15 | + |
| 16 | +When programming for a job, it can be easy to lose some of that joy. Real world |
| 17 | +software engineering involves so much more than the core act of creating |
| 18 | +something that sort of works. But most hackathons are all about that spirit. |
| 19 | + |
| 20 | +## Freedom and Constraints |
| 21 | + |
| 22 | +The magic of hackathons comes from two seemingly contradictory factors: freedom and |
| 23 | +constraints. |
| 24 | + |
| 25 | +The freedom comes from being able to decide what you want to work on and how you |
| 26 | +want to do it. For once, you aren't limited to the projects that your company |
| 27 | +deems important. You don't have to particularly care about business priorities |
| 28 | +unless you want to. Even at a technological level, you are hopefully free to use |
| 29 | +things that aren't officially supported. You can experiment. You can make a |
| 30 | +proof of concept for something that you know is a good idea. You can challenge |
| 31 | +how things are typically done. |
| 32 | + |
| 33 | +But hackathons are also about constraints. The main one is time. Online |
| 34 | +hackathons can ran for a while, but most in-person ones limit you to a few days |
| 35 | +at most. This limits the scope of what you can do, which forces you to focus and |
| 36 | +act quickly. |
| 37 | + |
| 38 | +Hackathons can also have themes. And they might revolve around a few |
| 39 | +technologies or concepts. For example, the annual |
| 40 | +[Js13kGames](https://js13kgames.com/) competition is a challenge to create the |
| 41 | +best web game that fits in a 13 kilobyte ZIP, and each year has a different |
| 42 | +theme. This can help you come up with a good idea, since your brain doesn't have |
| 43 | +to start from an overwhelmingly infinite set of possibilities. |
| 44 | + |
| 45 | +Combining freedom with constraints in this way means that you have agency but |
| 46 | +are also forced by circumstance to actually create something. |
| 47 | + |
| 48 | +## Benefits |
| 49 | + |
| 50 | +Why participate in a hackathon? It can certainly be a lot of work. I've pulled |
| 51 | +almost all-nighters for some hackathons. And a cynical take is that company |
| 52 | +hackathons are just a way for companies to get employees to do a bunch of extra |
| 53 | +work. |
| 54 | + |
| 55 | +But hackathons are fun! I love working on something that I know can't drag on |
| 56 | +for months and can't get interrupted by shifting business priorities. |
| 57 | + |
| 58 | +Hackathons are also a great way to learn something new and to try out new |
| 59 | +technologies in a low-stakes environment. Sure, many hackathons have judging, |
| 60 | +awards, and prizes. But besides a bit of time, you don't really have anything to |
| 61 | +lose by participating. |
| 62 | + |
| 63 | +There's also always the chance that your hackathon proof of concept does become |
| 64 | +something bigger. Maybe it becomes a widely used tool, feature, or product. |
| 65 | +Maybe you can start a company with it. Or maybe you'll just get the satisfaction |
| 66 | +of making something cool. |
| 67 | + |
| 68 | +I was drawn to programming because of the short feedback loops of writing some |
| 69 | +code and quickly getting a result. Hackathons are a version of that. You come up |
| 70 | +with an idea, try to turn it into reality, and almost immediately see how it |
| 71 | +turns out and how others react to it. |
| 72 | + |
| 73 | +## Advice |
| 74 | + |
| 75 | +For those who are convinced that hackathons are worth trying, I have a few tips: |
| 76 | + |
| 77 | +If you don't know of any hackathons to participate in, try looking on [Devpost](https://devpost.com/) or |
| 78 | +[Major League Hacking](https://mlh.io/). |
| 79 | + |
| 80 | +Keep teams small. You want to bias towards speed, and working with too many |
| 81 | +people on a hackathon project introduces too much communication and coordination |
| 82 | +overhead. |
| 83 | + |
| 84 | +Forget many best practices. Your goal is to make something that sort of works. |
| 85 | +For once, you can be wholly justified in not writing any tests, not caring about |
| 86 | +documentation, writing ugly code, ignoring scalibility or security issues, etc. |
| 87 | +The only thing that usually matters is the end result and how well you can |
| 88 | +present it. This is also part of what makes hackathons fun! You have good reason |
| 89 | +to loosen your standards and create something as fast as you can. |
| 90 | + |
| 91 | +## My Experiences |
| 92 | + |
| 93 | +Here's a log of my own hackathon experiences. |
| 94 | + |
| 95 | +### HackPrinceton in 2012 |
| 96 | + |
| 97 | +My first hackathon was [HackPrinceton](https://www.hackprinceton.com/) in 2012. |
| 98 | +I was a senior in college, and I created [my GitHub |
| 99 | +account](https://github.com/dguo) because of this hackathon. I made a movie |
| 100 | +recommendation website called [MovieSeer](https://github.com/dguo/movieseer). |
| 101 | +The [code makes me cringe |
| 102 | +now](https://www.dannyguo.com/blog/a-code-review-of-my-earliest-projects#movieseer), |
| 103 | +but it was still fun to create something from scratch. |
| 104 | + |
| 105 | +I'll never forget it because at the end of the hackathon, I confidently |
| 106 | +volunteered to present first. I did a live demo, and the website hung for what |
| 107 | +felt like an eternity after I pressed the button to generate recommendations. |
| 108 | +When they finally showed up, people politely applauded, but that was my first |
| 109 | +lesson in the [perils of live |
| 110 | +demos](https://www.youtube.com/watch?v=znxQOPFg2mo). I'll always have sympathy |
| 111 | +when things go wrong in other people's demos, since it reminds me of the |
| 112 | +pounding in my heart when an entire auditorium of people was just waiting for my |
| 113 | +website to do something. |
| 114 | + |
| 115 | +My project actually won an award for best use of |
| 116 | +[MongoDB](https://en.wikipedia.org/wiki/MongoDB), which came with a $500 check |
| 117 | +from MongoDB. Which was hilarious to me not only because of my presentation |
| 118 | +issue but also because there was nothing about my project that actually |
| 119 | +benefited from a [document |
| 120 | +database](https://en.wikipedia.org/wiki/Document-oriented_database). I could |
| 121 | +have used [SQLite](https://en.wikipedia.org/wiki/SQLite) or |
| 122 | +[Postgres](https://www.postgresql.org/), and there would have been no practical |
| 123 | +difference. I only used MongoDB because of the potential prize. But in |
| 124 | +retrospect, that was the point of MongoDB sponsoring the prize. |
| 125 | + |
| 126 | +This hackathon also reminded me of the value of a good presentation. The crowd |
| 127 | +favorite was some beer-related mobile app. I don't even remember what the app |
| 128 | +did. Something to do with keeping track of how many drinks you've had. But the |
| 129 | +creator was by far the best presenter, getting the audience to laugh and really |
| 130 | +pay attention. It's not enough to just make something interesting. It's also |
| 131 | +important to be able to talk about it or show it in a way that engages others. |
| 132 | + |
| 133 | +### HackPrinceton in 2013 |
| 134 | + |
| 135 | +In 2013, I went back to HackPrinceton because my company, |
| 136 | +[Bloomberg](https://en.wikipedia.org/wiki/Bloomberg_L.P.), was a sponsor. I have |
| 137 | +three strong memories from it. |
| 138 | + |
| 139 | +The first is one of the best things I've ever seen in any hackathon: [Piano |
| 140 | +Stairs](https://www.instructables.com/Piano-Stairs-with-Arduino-and-Raspberry-Pi/). |
| 141 | +This was a hardware hack that used light-based sensors to turn a staircase into |
| 142 | +a working piano! The creators used a staircase in the middle of the hackathon |
| 143 | +building, so it was impossible to miss, and everyone loved it. |
| 144 | + |
| 145 | +The second is [What Would I |
| 146 | +Say](https://thisisimportant.net/posts/what-would-i-say/), which used [Markov |
| 147 | +chains](https://en.wikipedia.org/wiki/Markov_chain) to generate semi-sensical |
| 148 | +Facebook posts based on your past posts and went viral. |
| 149 | + |
| 150 | +Lastly, I remember there being an award for "Best Fail" because the reward was |
| 151 | +an entire Bitcoin, worth maybe a couple hundred dollars then. I hope the team |
| 152 | +held on to it! |
| 153 | + |
| 154 | +### Bloomberg |
| 155 | + |
| 156 | +Bloomberg held its own hackathon a few years later. I worked with a friend on a |
| 157 | +UI transpiler. For context, the [Bloomberg |
| 158 | +Terminal](https://en.wikipedia.org/wiki/Bloomberg_Terminal) is a desktop |
| 159 | +application that is [rendered using server-side |
| 160 | +JavaScript](https://news.ycombinator.com/item?id=21821327) ([this conference |
| 161 | +talk](https://www.youtube.com/watch?v=ODgs0eWAIKc) also provides some details). |
| 162 | + |
| 163 | +My team made a proof of concept for a program that would take that code and |
| 164 | +convert it into an equivalent [React](https://react.dev/) application with the |
| 165 | +goal of making it possible to run the Terminal (or at least a subset of it) in a |
| 166 | +browser. It was an admittedly simple example, but it worked! |
| 167 | + |
| 168 | +It didn't go anywhere after the hackathon, but people reached out saying they |
| 169 | +thought it was cool. The ego boost was worth staying up almost all night to |
| 170 | +finish it. |
| 171 | + |
| 172 | +### MoMath |
| 173 | + |
| 174 | +In 2018, some friends and I attended a hackathon at the [National Museum of |
| 175 | +Mathematics](https://momath.org/) in NYC. We made a project called Vortex Pool |
| 176 | +that I [wrote about |
| 177 | +here](https://www.dannyguo.com/blog/momath-hackathon-2018-vortex-pool). |
| 178 | + |
| 179 | +### Firefox Quantum Extensions Challenge |
| 180 | + |
| 181 | +Later in 2018, Firefox had a hackathon, and I made a few extensions for the |
| 182 | +"Best Dynamic Theme" category, which used the [theme WebExtensions |
| 183 | +API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/theme). |
| 184 | +I also wrote about [that |
| 185 | +experience](https://www.dannyguo.com/blog/building-dynamic-firefox-themes/). |
| 186 | + |
| 187 | +### SeedFi |
| 188 | + |
| 189 | +In 2020, the startup that I worked at, SeedFi, had a hackathon. I started it by |
| 190 | +fixing a slew of small issues that we already knew about, such as a set of icons |
| 191 | +not being the same size in Firefox. I also remember fixing an issue where iPhone |
| 192 | +users were limited to integers for number inputs as of iOS 13. |
| 193 | + |
| 194 | +Then I added |
| 195 | +[TOTP](https://en.wikipedia.org/wiki/Time-based_one-time_password)-based 2FA. |
| 196 | +This never made it to production, but I mainly did it as a learning experience. |
| 197 | + |
| 198 | +I had some time left over, so I also made a proof of concept for a [command |
| 199 | +bar](https://maggieappleton.com/command-bar) for our website. |
| 200 | + |
| 201 | +### Karmahack |
| 202 | + |
| 203 | +In 2023, [Intuit acquired |
| 204 | +SeedFi](https://www.creditkarma.com/about/releases/intuit-to-acquire-financial-health-startup-seedfi), |
| 205 | +and we joined its Credit Karma business. A few weeks after our onboarding, |
| 206 | +Credit Karma had its |
| 207 | +[Karmahack](https://engineering.creditkarma.com/karmahack-2021-recap-what-makes-a-good-hackathon) |
| 208 | +hackathon. |
| 209 | + |
| 210 | +I had no idea how to build anything in the Credit Karma stack/platform at that |
| 211 | +point, but I still wanted to participate in some capacity. So I went with making |
| 212 | +a browser extension that ran against the [Credit Karma |
| 213 | +website](https://www.creditkarma.com/), since that didn't require me to |
| 214 | +understand how any of it worked under the hood. |
| 215 | + |
| 216 | +I went with the command bar idea again, but I rebuilt it from scratch and added |
| 217 | +some fancy features, like being able to highlight a section of the UI based on |
| 218 | +the query. My demo example was someone looking for their checking account |
| 219 | +number, and the command bar would both take them to the right page and also |
| 220 | +highlight the account number [using |
| 221 | +Driver.js](https://driverjs.com/docs/simple-highlight). |
| 222 | + |
| 223 | +I won third place and got this custom medal. |
| 224 | + |
| 225 | + |
| 226 | + |
| 227 | + |
0 commit comments