Hobby project mission statements
I'm an incurable hobby coder. The rate changes depending on what's happening at work, but it never stops completely. Even during 2018, when I left Hipmunk, joined Asana, and got married, I made:
- Roguelike tools for Swift
- Roguelike tools for Nim
- A roguelike
- Half a web forum in Python
- A TypeScript library that generates imaginary star systems
- An iOS app that plays audio loops for drum practice
- A toy Electron app just to see what it was like
The year before that was similar:
- Roguelike tools for Python
- A roguelike
- An interactive fiction game engine
- An interacive fiction game
- Another roguelike
- A sophisticated web-based MP3 player
I used to throw up my hands once in a while and say, “It's all too much! I have to slow down!” But I don't slow down. So now, instead of trying to slow down, I'm trying to understand myself better and make decisions about what I work on more consciously.
My projects break down cleanly into the categories defined by the contents of my
apps/ # GUI apps for iOS and Mac cli/ # Command line utilities games/ # Games :-) libraries/ # Reusable libraries steveasleep/ # steveasleep.com websites/ # non-steveasleep.com web sites # other stuff: 3p/ # clones of 3rd party libraries irskep_dotfiles/ old/ scratch/
The apps and games are ephemeral: I release them and move on. The libraries are benignly neglected, with patches getting merged quickly and releases going out sporadically. For example, I used to work on Literally Canvas a lot, but now all I do is merge pull requests and close the occasional GitHub issue.
Of all the subdirectories of
libraries/, 75% have been shipped to “users” in some way as itch.io uploads, App Store apps, PyPI/NPM packages, or live web sites. Every single one has a bitchin' README.
Another way to look for patterns is to identify what's absent. There are no major contributions to third party libraries made in my spare time, though there are a few small ones. There are no Project Euler solutions, or any other “algorithms for fun” exercises. I don't use difficult-to-learn languages. And I haven't written any libraries that weren't an important building block for something else.
For most projects, I can identify the thought that made me start. Those thoughts fall consistently into two buckets. Either I'm doing a game jam with the intention of making something better than what I made for the last game jam; or I have what I think is a great idea that needs to exist, and I think I'll do a great job at making it happen.
The first bucket hasn't resulted in any stress or heartbreak. I make a bit of art and move on. The second one has all the problems. Here's why:
Some hobbyist programmers feel like they can never finish anything. I'm the opposite: I don't drop a project until it's “released” to some degree.
Here's how I want to think about starting these kinds of projects in the future:
Or, in “mission statement” form:
I will do time-boxed game jams when I have time, I have energy, and I have an idea that motivates me.
I will take on non-game hobby projects if they won't feel like work and might be useful to me personally.