Pablo Corral wrote me an email after I posted this tweet about managing on-again-off-again side projects.
I’m very curious about how to use Backpack to have a better experience on braindumps for side projects.
I switch a lot, and my side project sometimes is off for many days, and some weeks. Can you explain more about this?
It’s hard to find steady uninterrupted time for software side projects. Maybe you only have time on weekends or the occasional free night for your project, and sometimes weeks or months go by where you are too busy to sit down and make some progress. When you finally do find time to work, you can waste half of it just catching up on where you left off.
This has been a big challenge for me because one of my projects is a Rails app that supports registration and administration for a biannual retreat course. Four or five months may go by before I return to the app for another course, and with each course there are new bugs to fix or feature requests to implement. A couple years in this situation have helped me develop a system to manage my side projects with a minimum of headaches and wasted time.
My system is a one-two punch: Hosted version control plus a single Backpack page. These two are all you need to keep the state of your project off your brain and at the ready.
First punch: Hosted version control
There are two key benefits to hosting your source with these services. First, your source is independent of your work machine. If your machine crashes, you replace it, or even if you space out and delete some things you shouldn’t (that would be me), your code will always be safe and secure in the online repository.
The second benefit is an easy-to-read commit log. With one click you can visit a bookmark and see a timeline of changes you’ve made to the code in chronological order and in your own words. Just glancing at the commit log can be enough to jog your brain after a long absence and bring you right back into the project.
Second punch: A single Backpack page
I make a single Backpack page for each project with two lists and some notes. The two lists are ‘To-Do’ and ‘Debt.’
The ‘To-Do’ list is for things I really, truly, honestly plan to do next. I keep it very short, always less than five items. If it gets any longer, I’m probably fantasizing instead of actually planning to do those things. Whenever I return to a project, the top item on the To-Do list tells me what I should work on.
The ‘Debt’ list is for things I should have done but didn’t bother to do. The Debt list is partly a psychological trick. It helps me cut corners without feeling too guilty. Should’ve added validations to that model? Add it to the Debt list. Wrote a condition without thinking too deeply about the edge cases? Just add it to the Debt list. But it’s also more than a band-aid for laziness. If something breaks or I run into some unexpected behavior, chances are a quick glance at the Debt list will point me to a corner that I cut or a step I skipped and lead to a direct solution instead of an hour of head-scratching.
Lastly my Backpack account is SSL protected, so I feel safe storing information about my production environment. I can never remember where a project is hosted, what the username and password are or if there are particularities with the configuration I should know about. I keep all this server info on a note at the top of the page, so each time I need to log in I don’t have to go digging for passwords or welcome emails from my host.
A powerful combo—when you hold up your end
All the lists and logs in the world won’t help if you don’t create some good habits. Commit frequently, and whenever possible write commit messages about your intention, not your implementation. Say “Fix the broken sidebar layout” instead of “Fix a typo in the class name.” The former will be a sharper hook to your memory later. For the Backpack lists, try to be brutally honest. A mile long To-Do list is proof of time wasted, not time saved. Focus your To-Do list on the next few things you need done, and limit your Debt list to Debt that actually matters.
This system has helped me organized my side projects and optimize the short slices of free time I can dedicate to them. I hope it works for you too. Let us know in the comments if you have any systems of your own for managing side projects over time.