Project: Completionist Run

In which I join millions of hopeful souls

You guessed it: I’m going to join next year’s resolution fad. And because I’ve been doing this resolution thing far more often than I’d like to admit I’m going to use a power tool: Alex Vermeer’s 8760 Hours guide.

Fig. 1: My almost-done review of 2016

Here’s what I’m going to do. Every single day of next year, I have to:

  1. Build and complete a game interaction or mechanic.
  2. Commit it to this repository.
  3. Write a post about it here.

The thing doesn’t have to be shiny. I don’t even have to build it for VR. Whatever I complete, I only have my shame to stand for. But I have to finish something every day no matter what, lest I fall short of the great mountain ahead.

Rebooting Completionist Run

Last weekend, I did a heroic wrap around for a rather important pitch for Startup X. That meant eight hours of sleep I needed to get back, so I slept the entire Monday and was not able to submit a build. I broke the chain:

Fig. 1: My commit streak on GitLab

The whole “Don’t break the chain” thing has a seldom discussed flaw: it’s hard to get back on track once you do break the chain. I want to say that I spent the last three days thinking about this issue but I didn’t. Instead, I tried getting my daily dose of self-worth elsewhere.

When I started Completionist Run, I was aware that it was a tall order. I get it, yours truly was never one of the Determinator sort. Akrasia never really registered as a Serious Problem to me so I never really got around to dealing with it. So I’m quite surprised that it wasn’t the scythe that ripped the project — just straight-up lack of thinking on my part!

Today, I want to scrounge up the remnants of whatever momentum I still have and reboot this project. But this time, let’s put some structure into it. The goal of Completionist Run was twofold:

  • to have a baseline amount of coding practice every day
  • to build a small part of this edifice

Notice that none of those had anything to do with what I was doing. I had nothing to protect.

In the 22 days I kept this up, I’ve seen that it’s not novelty or originality that makes good games. And in retrospect that sounds about right1: the intersection of Good Games and Original Games is littered with Daikatanas. I don’t pretend to know what does make good games but I know that this goal gets me closer to that:

  • to make games or interactions that make the world significantly better for their existence

I’m not trying to be fourteen years old here. But there is a space of things whose existence naturally divides life into pre- and post-periods. I want to make something in there.

To do that, I’m going to take a hint from 011/365 and pre-post about a feature. But this time, I won’t beat myself up if I don’t make my own Estimated Time to Completion. I’ll think of a new template later but that Final Thoughts section should be the highlight of my posts instead of being an optional part of them. I’ll also relax the “one new mechanic a day” rule and only require that I build towards something every day. Hopefully this set of changes will keep me from veering off again in the next set of 365 days.



resisting one’s better judgment; see
id est, do whatever it takes; from TVTropes2
an imposingly vast body of work by a single person or group; see [insert link here]
Startup X
the startup where I currently belong
Wrapping around
becoming so immersed in coding that you forget to sleep, thereby making your day “overflow” into the next one; from MIT’s Tech Model Railroad Club jargon;

  1. As do most vague, nice-sounding phrases. 
  2. The usual time-sink warning applies. 

Completionist run: 015/365

Fig. Link to where the source would be if intellectual property laws ceased to exist

What I want to do today

Let’s finish that grid-snap thing I failed making on Day 013 and put it in VR.

Core mechanic


How to implement it

  1. [10 minutes] Write a script that snaps the position of an object to modulo a snapping value. Make snapping toggleable.
  2. [30 minutes] Rewrite the Duplicate tool so that it shows a snapped output region.
  3. [optional] Make a playable build.

ETC: 40 minutes

Potential Difficulties

The output region may snap but the output may not. Also, snapping may interfere with grabbing and physics.

What I was able to do


  1. [? m] Done.
  2. [24 m] Failed.

Discrepancy: ? minutes


Snapping DID interfere with Rigidbody so I wasn’t able to rewrite Duplicate.

Final thoughts

What I might do tomorrow

I have got to get this working.