How to start a (software) side project
How to start a (software) side project
I’ll sometimes get asked by friends how to have a side project. I don’t claim to be an expert at this, but I do have a little bit of experience with starting and keeping my own projects going.
What is a side project?
For me, all my projects are meaningful and worthwhile, so the “side” part of side project needs some clarity.
This blog you’re reading now is one of my projects—although it’s less of a software project and more a project focused on providing value to readers. The garden in my backyard is a project. Little Memory and Little Countdown are both projects that can sometimes feel to me like primary projects, but depending on your definition they may or may not be side projects.
Let’s say a side project is:
A project in which I’m working on while I’m engaged in full time employment.
Why start a software side project?
It doesn’t really matter, but it helps if I understand my motivations and reasons for doing it up front. I try to be honest with myself for why I’m starting it.
- Learning a new programming language?
- Do it for the lulz?
- Trying to impress my friends?
- Helping someone I care about?
- Building something to help me with my own life?
- Bored with too much free time on my hands (ha, when does this happen)?
The reason for why I’m starting doesn’t necessarily need to be justified, but I do think it’s important to know why I’m working on it to keep me focused.
If I were starting a business, I’d be more thoughtful with the reason; but for a side project, I’m in play mode, so I don’t need to go too deep here.
Who is it for?
When you have a house party and invite friends over, who do you plan on inviting? You want folks to come and have a good time, right? Think of who would be good people to have around to attend the party.
Some nerd friends aren’t always the best for mingling with non-nerds in certain settings. If I’m having folks over for a philosophical evening of thoughtful discussion, I probably don’t want to invite the drinking buddy who only seems to talk about himself all the time.
For a dinner party, knowing who’s coming dictates the food, the music, the drinks, the conversation, and the themes of the event. Similarly, for a software project, knowing who’s the intended audience helps to define how you design the interface and the platform (and language!) you’ll use.
This question may help:
Is there someone’s life I’d like to improve? My parents? My partner? A friend of mine?
What is your project?
Once you have the who part, the what becomes a lot easier.
If it’s for your mom, you can think of what problems she’s going through and what platforms she’d be comfortable using. Don’t push solutions on to her. Listen for her problems. Write them down.
If it’s for your wife, do the same thing. For Zeus’s sake, listen to her. Again, write down the problems you hear.
If it’s for your friends: guess what? Listen to them. Don’t provide solutions. Write down the problems you hear.
After you’ve been listening to your audience’s problems and written them down, it’s time for you to actually get some heads down work to find a solution for them. I like to think of what may be the easiest and fastest thing I can get to them. Ideally, you come up with at least 10 ideas and wittle them down based on what you think you can accomplish and within a time frame.
Set goals. Make them easy for yourself. Define what “done” means so you can feel accomplished when you reach it. You don’t want a moving target, or else you’ll constantly feel like you haven’t done enough or need to do more.
Allocate time. Be honest with yourself. Err on the side of conservative. Don’t be optimistic here. This is a side project, and your time is limited, as you’re competing with the big block of time your full time job is taking, so you really need to make sure you’re setting specific time on your calendar to work on your project.
Project manage. I like to use a kanban board with physical post-it notes. This is a pretty big subject that I won’t attempt to cover here, but find a system that works for you.
Make it easy to deploy/release. If you think CI would speed things up: great. But I try not to spend too much time with this up front. You want to get new iterations of your project to your audience quickly.
Get feedback. You were listening to your who from the start, right? Keep listening. Keep observing. Know that this will never end until you decide to retire the project.
Pair program. I’ve been pairing on a regular basis with Mike Watts on Little Countdown, and it adds a social element to my practice of programming and also product development. Some folks like to hang out and play pool at the bar: us nerds like to pair program.
Execute your side project plan
Much like a financial plan, after you’ve designed a plan for yourself, it’s go time. It’s up to you to be disciplined with your time and energy.
If your friends invite you to hang out and it’s during your side project time on your calendar: it’s up to push back and say you can’t make it because you’re prioritizing your side project.
Now, go forth and build something amazing, even if it’s just for your mom, your wife, or you’re doing is just for some giggles for yourself.