Matt Steele

The Neverending Side Project

06 Feb 2018

I love side projects. I keep track of what I'd like to work on in a GitHub repo.

Most side projects don't need much oversight. That's kind of the idea: you spend a few hours building something fun, blog about it, and move onto something else.

But I think there's space for another kind of project: one that spans years. The formula's simple:

  • Build a site/app/whatever
  • Let it sit on a shelf for a year
  • Dust off the cobwebs and make some enhancement, switch frameworks, whatever
  • Repeat

The Codebase of Theseus

One project I've been building is a statistics app for Super Bowl Squares, a mostly-random gambling endeavor. It's a dumb game, worthy of a dumb side project. You can view the latest version here.

squares

I built my first version of the app back in 2011 as a fresh-faced front-end dev, with nothing but spaghetti jQuery.

Over the years, I've migrated and rebuilt the app numerous times:

  • Original jQuery version (2011)
  • Added a build toolchain with Webpack and npm (2014)
  • Rewrote using AngularJS 1.x (2015)
  • Migrated to Angular 2 beta (2016)
  • Rebuilt with TypeScript and the Angular CLI (2018)

Inheriting Your Legacy

A long-lived side project gives you the chance to confront your old habits and see how far you've progressed. I started with jQuery because that's all I knew. I can still see parts of me in the old codebase, but I also see how my coding style has evolved.

A long-lived side project also gives you breathing room to ask how much stock to put into trends. My original jQuery app still loads faster, has 60% less code, and (to my mind) is more understandable than my latest version built atop Angular 5. Have I actually made things better? Have we as an industry?

I didn't get to all the updates I wanted to make to the app this year; I wanted to add some Redux-style state management with ngrx. But it's okay, I know what I'll be working on next year.