Ludum Dare Postmortem
Over the weekend I participated in Ludum Dare 41. If you don't know, Ludum Dare is a game jam that takes place over 48-72 hours where teams and individuals attempt to make a game from scratch based on a theme they've just been told. It's a pretty casual affair meant more for personal development than for prizes or competition.
Game Jams and Hackathons are opportunities to try new things and aggressively experiment in a controlled environment. Some of those experiments work, and some of them don't, but the process is often more important than the result.
I've been pretty busy recently, so I cheated. Just a bit.
I didn't make a game, and while I started (mostly) from scratch, the concept I worked on has been on my back-burner for several years.
I still had a blast though, and the whole experience has been pretty energizing.
What I built
If you knew me in college you probably remember that I spent most of my senior year theorizing about an AI I called Piglet - a weird, esoteric creature that tried to learn how to play video games by playing them.
Piglet herself was originally developed in 48 hours in another hackathon. Then I spent around 4 years trying to figure out how to make Piglet work the way I wanted her to.
This turned into a little bit of a rabbit hole. A number of personal projects were originally spun off of Piglet.
I wanted Piglet to be able to livestream her progress, but there wasn't a good Game Boy Color emulator that ran in Javascript. So I forked one to make it streamer friendly. I wanted to be able to embed my stream on my own site instead of Twitch, which led to me learning a bunch about data compression and stream latency. And so on and so on.
But eventually Piglet just kind of stalled out, not because I had lost interest, but because I literally didn't know how to make Piglet work. The ideas turned out to be too esoteric and weird even for me to handle, and without a strong background in AI I had to reinvent a bunch of wheels.
Every time I'd think of a new way to solve some problem I would scribble it in a notebook, stick it in a drawer, and then leave it until I could think of something else to add.
So for Ludum Dare I finally sat down and moved Piglet out of the realm of theoretical, and built an extensible environment for her to experiment on while I check to see if any of my ideas have any weight at all.
What I have now is extremely primitive, but for the first time in 4 years I finally have a baseline to work with and a clear direction forward for me to start experimenting again.
What went well
Hackathons aren't about results though - they're about the process. I was surprised to find how much I missed doing this type of unstructured programming, and there are a number of things that I think went particularly well.
To start with, I livestreamed the vast majority of my development on Twitch (roughly 13 hours over the course of two days).
I've had an on-and-off relationship with developing live. On one hand, it's tiring and I don't have much of a community or audience. On the other hand, it seems on average to make me more productive. I spent most of the week leading up to Ludum Dare streaming, but I had never done a stream lasting for this long before.
My (surprising) takeaway is that there's a potential benefit to coding this way even without an audience, although it's not something I want to do all the time. I may continue to stream regularly in the future, and will almost certainly stream my next hackathon.
I also benefited from an increased amount of experimentation on the tech side of things: in particular, I finally started using Vue, and I was surprised how much I like it!
Vue has (for the most part) a pretty well-written API. It's very unopinionated, so you don't need to use it as a framework - you can drop it in for one or two components if you want to. It's smart enough to solve annoying problems (two-way data-bindings) and then get the heck out of the way so I can keep the interesting parts of my project structured the way I want.
I don't like that my end result fails so hard without Javascript, which is one of the reasons I've never used it for a static site. In general, if your static site requires Javascript to render, you're doing something wrong - and anyway, Vue doesn't seem to help much with actual layout.
Overall though my experience was very positive and I'll likely use Vue again the next time I want to build a web app.
What went poorly
When I left college I lost a large programming community of collaborative, interesting people, united out of a pure love for technology, learning, and experimentation. For the most part, I've never fully replaced that community, and participating in Ludum Dare made that painfully obvious to me.
Hackathons at RIT were really something special, and while it was still a ton of fun to participate in this one, it didn't really match the experiences I used to have staying up till midnight in a room filled with other classmates and programmers.
I benefit tremendously from being able to bounce ideas off of people and I benefit tremendously from having peers that inspire me and that take an interest in the things I build.
The next time I participate in a hackathon, I'll likely try to either go to a physically hosted location local to me, or I'll try to put together a community of other people and recreate that physical location via Twitch or something similar.
Another thing I missed was having more pressure; I participated in Ludum Dare largely out of self-motivation. There was no peer pressure, and unlike at RIT, there were not demonstrations or demos at the end to make me worry about building something that demoed well.
For better or worse, I've learned that I thrive in high-stress environments. Because I didn't plan to enter my finished project into the official database of Ludum games, I was never forced to make hard choices about which features to cut, and I wasn't forced to get nearly as inventive as I often was during RIT hackathons, which in part were exciting because they were cathartic and pushed me to both my biological and mental limits as a programmer.
This is a tough point to articulate. I don't plan to introduce more arbitrary deadlines into my dev process, but I do plan to get more involved in competitions, demos, and other activities that allow me to rely on external sources for motivation, rather than just internal ones.
In Short
Hackathons are a ton of fun and this won't be the last one that I do. If you know me well enough to contact me, and you ever want to participate in one alongside me, feel free to reach out.
It's also exciting to see Piglet showing so much promise. The code that I was actually able to release into the wild is really just the tip of the iceberg, and I'm looking forward to sharing more in the future.
While Piglet is still largely theoretical, I'm now much more confident that the theory is actually possible, and I'm much more confident that I have the tools and ability to build it.