For the last six weeks I’ve been diligently working on a new web app called Preceden.
Preceden is an app for making timelines. The current tag line I’m using is “A timeline for everything” which pretty succinctly describes where I want to take it. I’ll have a lot more to say about it in the future, but for now I just want to say that it’s coming along well and that I’m really excited about its potential. At the rate I’m going, I’ll probably launch sometime around February.
This’ll be my second web app. The first, Domain Pigeon, was a great learning experience but never meant to be a long term project. I’m trying to take what I’ve learned from that project and apply it to Preceden.
Here are a few key things I’m doing differently so far:
Quality code. There was a lot of code in DP that, if you asked me, I couldn’t really tell you why it worked. It was the result of being a Rails newb and being in so much of a rush to launch that I neglected to figure out the “Why?” behind every line of code. I’d Google for a code solution and paste the result straight into the project without taking the time to learn how it worked. Embarrassingly, I didn’t read Agile Web Development with Rails until recently. I learned Rails via SitePoint’s Simply Rails 2, which I assumed covered most of what I needed to know. Boy was I wrong. AWDWR would have saved me countless headaches as a result of not understanding the logic. I’m also making my way through Ryan Bates’s Railscasts, which are an incredible resource for any aspiring Rails developer.
Better notes. I used to keep all of my programming notes and project notes in the same notebook. Half a page would be notes on how to use Git and the other half musings on what features to implement next in DP. I also didn’t use any type of index, so referencing old notes was a painful, time consuming process. Tim Ferriss recommends keeping an index at the front of your notebook so you can quickly find old material, which I’ve recently implemented and found tremendously helpful. I also keep two notebooks now, one for general programming notes and one for Preceden notes. Using two notebooks and keeping an index seem obvious in retrospect, but they’ve made a world of difference.
Extensive testing. I worked on DP for several months before I wrote the first unit test. It was a major hassle going through all of the existing code. The tests that I eventually wrote were not well done and only covered a fraction of the functionality. With Preceden, I’m trying to write tests as I go. I still think its a major pain in the ass, but it’s worth the peace of mind knowing that everything works properly. Plus, it forces me to write better code, which might wind up saving me time in the long run. I’m using Thoughtbot’s shoulda, which makes writing tests much less painful.
Minimal distractions. There’s a nifty add-on for Firefox called Leachblock that lets you manually block websites that consume too much of your time. You can specify how much time to allow yourself to be on a specific site, what times during the day, what days of the week, etc. I blocked HackerNews and Gmail, which instantly made me a hell of a lot more productive. In fact, November was probably my most productive programming month ever. I now access HN and Gmail in my spare time via my iPhone, which means they take up a lot less time than they used to.
Backend > Frontend. Eventually I’ll need to decide whether the font color should be #222222 or #2A2A2A or whether the padding should be 3px or 5px, but not right now. I still spend some time working on appearance (because I hate looking at an ugly site), but its only a fraction of the time that I did in the early stages of DP.
These five changes have made a tremendous difference in the way I work. Taken together, they let me write a lot of high quality code in short periods of time, which is perfect for me as a nights and weekend coder.