It’s not about how you start: succeeding in your side projects as a developer
Ask any developer to tell you about the side projects she’s working on, and she’ll likely have an ongoing list of things she’s thinking about or toying with. It’s in our nature. We’re builders: we were the kids playing with LEGO sets (or erector sets, depending on your generation). Toys were only fun if you could take them apart and put them together in different ways.
It’s a job hazard for any imaginative, creative type to have more things they want to do than the capacity to do them. Our creative outlet is never more than a terminal away, and these days getting something into the world can be as easy as typing the magical incantation:
git push heroku master
While it’s never been easier to start projects, it’s still difficult to finish them. There’s no bash command to take you from something that doesn’t work or that looks bad to something that works and looks good (there may be a zsh command for it, but I haven’t found it).
To be able to finish projects, you need to throw out your text editor and terminal and grab a new toolbox. Here are three tools that have helped me succeed in side projects (by the way, these also help in other areas):
Creating a habit
What do successful writers know that unsuccessful writers don’t? That writing is real work. It takes diligence and it takes effort. In general you won’t get “inspired” and are able to dash to the keyboard and finish that novel. Writing comes from the slow, steady, and deliberate effort of creation. (Or so people tell me, I wouldn’t call myself a successful writer.)
Most writers aren’t full-time so all of their projects are side projects. They have learned to develop a habit of writing. Good habits are hard to create, but there are ways — in fact, programming side projects is as much of a creative process as writing that much of the advice for becoming a better writer applies to coding as well. (I’ve used this course from local Seattle company Popforms on becoming a better writer — much of it applies to coding as well. )
Set yourself deadlines
If you’re a professional developer, you’ve probably needed to finish up a piece of code or write a specific feature to a deadline. That deadline was probably set by your manager, by your product owner, or by some authority figure.
Here’s a hint: most work deadlines aren’t real deadlines. No one is going to lose their jobs (or their life) crossing the deadline. In many cases they are simply set because deadlines are powerful motivators. If you say you’re going to get something done by a certain date, you’re more likely to do it than if you just say “I’ll get to it someday.”
When you’re working on a side product, you’re your own manager. You’re responsible for motivating yourself. Why not use the tools your work manager uses and set yourself some deadlines?
Be responsible to others
I have a rule at work: if you really want me to do something quickly, tell me I’m blocked on you.
We’re naturally social animals and we want to please each other. No one likes being the person who is letting others down. Having others be dependent on you is an extremely powerful motivator to getting things done. You’re not doing it for yourself, you’re doing it for someone else.
You can combine this with setting deadlines: be public about your deadlines, tell your friends when you want to have something finished by, and ask them to hold you to it.
The benefits of finishing
When I started writing OneBusAway for Android, I was in a fortunate position to take on a side project: I was recently out of a job and wanted to learn Android. Even so, there were plenty of distractions and many other things I could have done rather than build an app. But I managed to finish it in the space of a few months.
There were also other projects that integrated with OneBusAway at the time. Why did mine succeed where others didn’t? It’s pretty simple. It was one of the first into the Android Market and it worked. It didn’t crash. When it did crash, I fixed the problems quickly.
The success I’ve had with OneBusAway for Android wasn’t due to starting the project. The success I’ve had is due to the fact that I finished it.
What projects have you started that you want to finish? What can you do to help motivate yourself to get things done?