What makes a good side project?

Today I’m excited to open source my winter side project, spin-docker - a lightweight, RESTful, docker-based platform as a service. You can check out the spin-docker code on Github or the extensive documentation on ReadtheDocs.

Even though docker itself is barely one year old, spin-docker joins an already exciting lineup of docker-based PaaS tools: dokku, Deis, and Flynn to name a few. So while I love my ~400 line Flask app, I concede that it’s unlikely to propel me to fame and fortune.

The experience I gained working on this project, however, made it more than worth the effort. It was a great reminder of how beneficial a well-structured side project can be. When I’m ready to start my next one, here are the two things I’m going to keep in mind:

Start with a problem - your problem #

I started working on spin-docker because I had a problem.

Last summer I ran an internal intro to SQL class at my company. I wanted to provide sandbox databases for my students so that I could avoid wasting time setting up environments, but I couldn’t find an online service that made the process easy. I ended up creating databases with my web host, but my plan backfired during the class: My host thought a dozen direct connections to my databases from a single IP was an attack, and it blacklisted my office’s IP. We had to settle for walking through the exercises on a projector - and I was not happy.

Later that year at DjangoCon US I attended an intro to docker talk by Ken Cochrane. I stayed up late that night learning about docker and how it could help me solve my problem.

Over the next six months I spent nights and weekends working on spin-docker (a loose pun on spin doctor). I also built a thin Django site to use during future database training classes: http://beta.dbconservatory.com/

While there is value in experimenting with new tech for new tech’s sake, working to solve my own problem kept me focused and motivated to build a complete product I could share with the world and use myself.

Build it with tech you know and tech you don’t #

I learned a ton working on spin-docker. Although I had worked with most of these tools before, now I know a lot more about:

Most of my experience as a professional developer has been building web apps with Python. When I started this project, I considered using a non-Python stack to maximize the learning opportunities.

I’m glad I didn’t. Learning how to use all the tech on that list the right way was more than enough to keep me engaged. If I had chosen to learn node.js for this project, for example, I might have stopped working on the project out of frustration - or I wouldn’t have had the patience to learn the right patterns for these tools.

The time I would have spent hacking my way through a completely foreign stack was better spent achieving 96% test coverage and writing robust documentation so I can better share what I learned with other developers.

Your next side project #

Side projects are my favorite way to expand my skills. I hope this post helps you think about how to structure your next side project.

I live in Washington, DC but I’m on vacation in San Francisco this week. If you want to get together and talk about spin-docker, side projects, or anything else, shoot me an email using the link in the footer.


Now read this

Hello blog

First posts are always hard to write, and not really useful for anything except filling out the first page. But, it’s a good opportunity to state for myself what I want this blog to be. This blog should: Be a space I use to write about... Continue →