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.