Shipping vs. Learning
For as long as I can remember, I’ve spent the majority of my spare time to learning new technologies and shipping stuff with what I’ve learned. I love learning new stuff and I’ve always done it under the pretense that I will use my new found knowledge where I work. For the most part that has been a problem for me since my jobs haven’t always lined up with what I wanted to learn. For example, when I was a SQL Server DBA/Developer, I was learning more about web development, specifically Ruby on Rails. Eventually, I did get a job where I was developing in Ruby on Rails.
However, at the time of learning, I wasn’t shipping anything with the knowledge, personally or professionally. To some degree, what I learned went stale and I had to re-learn some of the basics when I started using it for my job.
Lately, I’ve begun to change that. I’m still learning, but I starting to ship more personal stuff with what I’m learning. How did I do it? I put more focus on shipping instead of learning. Since I’m not an expert in everything, I always learn something new when creating anything personal. For example, I wanted to change the domain name for my blog and switch the blogging engine that I was using. You are reading this post on the results of my efforts. This blog is using Octopress. I had to learn how Octopress works and how to incorporate some of the changes that I wanted. Nothing monumental, but at least I shipped something.
Another example of shipping for me is when I created my first Ruby Gem, CanBe. I learned more about the Ruby language and how to integrate a gem with Ruby on Rails, specifically Active Record. Yes, I learned something, but more importantly, for me, I shipped something.
I’ve been able to discern that learning and shipping aren’t mutually exclusive, rather they can be complementary. For me, it’s just where I put my focus. So my new plan is to focus more on shipping and push myself with each project to learn something new. This will enable me to focus on completing a project by being able to quickly use technology that I am familiar with and still choose one aspect of the project to learn something new. As I wrote in my post, Keeping an Eye on Productivity, it is important for me to still have the focus on shipping instead of learning.
For my next project, I want to focus on having a more reactive user experience on the client side of a web app. I have narrowed it down to two technologies that I want to use, Ember.js or Meteor. Given my new process of shipping over learning, the decision is pretty easy, I will be using Ember.js. I will use Rails for the backend. This will allow me to focus on delivering the functionality that I want because I am already familiar with many of the languages and tools, while still learning Ember.js. If I chose Meteor, I would have to learn how to code the front-end and the back-end.
My suggestion to all developers who work on side projects, is to determine what is important to you, shipping or learning, and focus on that. Just because you pick one over the other doesn’t mean that the other can’t happen. Rather, you just won’t get as much accomplished on that front as fast as you might like. In my opinion, you will have more personal satisfaction by picking one.