Lessons learned from my Holiday Coding Project

One of my favorite things to do during the holidays is a coding project. Between work and family commitments it is possible to do side projects during the year but harder to just immerse yourself into a problem. My only criteria for the projects is that the technologies that I use have to be different than what I use at work. Normally I pick a technology that I am interested in and then find a project for it. Although I have learned a lot that way the approach I took this year was a lot better.

So here is a quick list of what I learned in how to do my annual holiday project:

  • Be mission driven instead of technology focused. Normally I would think of a technology that I want to learn about and then find a problem to apply it to. This year there was a problem that has been on my mind that I wanted to address. Looking at a problem first you end up finding the best technology to address the problem which is often different than the original technology.
  • Measure twice, cut once. If I was working on a project during crunch time I would use the best solution that I could think of and code away. However, with more time I could look at different alternatives before deciding. For example, I could look at different NLP papers for different approaches. Doing this seems like a waste of time when you don’t have a lot of it. Yet it resulted in me getting more done in less time because I could think about the trade-offs before I write the first line of code. That way I saved time from short-sighted algorithms or rewriting buggy code.
  • Go back to school. Academic papers contain so many great insights that I will probably continue to read these to learn about new topics instead of just blogs. For this project, I spent a lot of time reading about word sense disambiguation, sentiment analysis and opinion mining. Funny how a simple question could lead to reading about so many different things. I have also been a long-time fan of MOOCs. Often I will listen to Udacity lectures to come up to speed on a topic and at times even do some of the assignments. That is how I became familiar with TensorFlow.
  • Manage the clock. Maybe it is because I have been watching so much football (good luck next year UW) but I was always careful to manage my time throughout the project. I was firm that I needed to be code complete a few days before my vacation was over. My original thinking is that the project would go from something fun to a chore if I was trying to complete it while I was busy with work and other life commitments. The added benefit is that I became ruthless in prioritizing my time and even cut “cute” features to focus on what was most important.
  • Focus on Minimal and Viable. When I talk to people building new products they always talk about the MVP. Once you start digging into details it is clear that they are preparing for a moon landing. Focus on the shortest path to viable and feel free to use lots of open source code.
  • Not all open source projects are equal. Open source software has made it possible to create something amazing quickly. Before standing on the shoulder of giants you should make sure that the giant is in shape. For me that involved a few things including when was the last time someone worked on the project, why did the person create the project, has anyone contributed to it, etc. However, I found the most important check was to read the code itself. Was it readable, have error checking and do what it claims to. In a few instances, I leveraged repos that haven’t been touched in years but were of good quality.

This post could easily have been longer but these were a few things that popped out at me. At this point you might be wondering what did I create? Well I had so much fun with this one I will probably release it in the coming weeks and will create another blog post discussing the problem being solved and the solution I proposed. Now I need to finish getting ready for CES… everyday life continues. 🙂

Talk to you soon,

Orville | Twitter: @orville_m

Advertisements