How to manage side projects beside your full-time job
It’s now almost two years ago since I’ve started my full-time job at comwrap and since I’ve moved into my own flat. Both happened at the same time. A drastic shift that felt like falling into a hole. You end up spending your time with never ending duties: Cleaning, grocery shopping, cooking and—of course—your job. Time I usually used for side projects. Should I stop working on them now that I’m a full-time developer? Is it even worth the time?
Yes, it is! Side projects are the playgrounds for your creativity. They let you try new technologies, new languages and frameworks. They improve your skills, let you do what you want and allow you to spend time on details no client is paying for. They let you move fast and break things. All the risky stuff you shouldn’t try on a project you get paid for. Yes, side projects are the work that turn a good developer into a great one.
Realizing new ideas beside your full-time job is important, but managing to get time for them is hard. There’re several things I’ve learned and done to get the right balance.
1. Everything requires time
Everything you own and every tool you use requires time. Often more time than it saves you. An espresso machine is a perfect example: To enjoy my daily dose of caffeine I need to keep the machine clean—after every usage and once each month for the decalcification. I need to ensure that I’m not running out of coffee beans, that the water tank is full and the drip pan empty. It all takes time. Time you spend to get what you actually want: Coffee. You might wonder what this example has to do with side projects, but it’s almost the same:
“Next time you are thinking about adding a new library, or using a new language feature, or adding an extra build step, stop yourself and ask for a second — will this actually add a LOT of value? Because if have a habit adding things because they add SOME value, you will end up with a lot of complexity.” — Mattias P Johansson (Throw out your tools)
2. Small steps are fine
It’s essential to realize that small steps are good when your time is limited. You don’t need to do everything today. Split your project into small tasks you can easily finish. Nothing is more frustrating than not seeing progress at all. Release fast and often. Elaborate your ideas today, build a quick prototype tomorrow and start to code at the end of the week. Whatever you do, do it in small steps and write down what you’ve done and what still has to be done. This way you can effortlessly continue where you left off.
3. Write a documentation and tests
It might sound like a waste of time to write a documentation and tests for a project you haven’t even finished and nobody is using, but you should. A good documentation helps yourself. It helps to remember how to use your work, even when you haven’t developed on it for weeks.
I often found myself in this situation. I tried to continue an old project, but failed because I forgot how to use it. Does anything break when I change this function? What happens when I update this outdated dependency? Nobody knows, and you don’t either. There are so many details you think about during development, but won’t remembering in a few months. The documentation and tests however will.
4. Don’t overthink
You might think a lot about your ideas till you finally have the time to realize them. Overthinking during this period is a problem. Try not to deter yourself. Problems don’t exist as long as you are not facing them. Just do it and see what it brings.
5. Have fun
Side projects should make fun. Don’t force yourself to work on them. Do it when you have time and passion. It’s your personal work, you make the decisions and have the right to ignore what others want.
The next time you sit down to consider the problem, you will have all kinds of new ideas. And, it’s even possible you’ll suddenly have a great idea in the middle of the night, while taking a shower, or while you’re driving to work. This happens because your subconscious is working. So take a break, and let it work. —Jarrod Drysdale (Don’t work harder)