“Side projects, and open source contributions are essential for learning and career development.” I’ve have heard and read this countless times.
In practice, it’s not always so simple to do. Sometimes I have started a project to learn a new technology, then felt I didn’t learn much and it was a waste of time. Whilst other times I worked on an idea for a while, but never considered it good enough to show to anybody. Also, life often gets in the way — after 8 or so hours at work the last thing I want to do is more programming, even if it’s on ideas of my own.
In the past, when I got excited about an idea I would devote a couple of weeks to it in my free time, before being afflicted by one of the aforementioned problems. Then I would grow sick and stop working on it altogether. Eventually, since motivation alone wasn’t enough, I developed a new tactic that lets me get a reasonable amount done on my own projects without sacrificing all my free time.
It’s a pretty simple system:
1. Carve out a regular slot of “personal time”, and make it limited.
This doesn’t have to always involve programming. Go for a run, work on a blog post, or do that life admin you should have done a month ago. If you know you only have 45 minutes to an hour to get stuff done you will be more focused on the task at hand.
2. Choose a time for this when you haven’t just finished work.
This is crucial if you don’t want to get sick of the sight of your project. For me that time is the morning between 7:30–8:30 AM. I’ve found working on my own stuff serves as good motivation to get out of bed earlier. If you have more focus in the evening, it might make more sense to spend time doing this before you go to sleep instead. Making a gap and finding your favourite time is the key.
3. Have a goal in mind.
This is usually one of three things — to learn something, to build something specific, or to show a skill. Hopefully you will do all three in the course of your project, but pick one to focus on. When you find a new and interesting library, it’s helpful to remember that if your goal is to finish the app so you shouldn’t spend hours dissecting it!
My projects usually focus on building something specific, and the following tips assume you have a similar goal:
- Decide on the MVP and have a backlog. Using basic product management practices on your side projects helps a lot. When you only have a limited time to get things done, be realistic. Early in any project you should decide what are the core features it cannot exist without, because you can always add more later. Then it’s a matter of putting these features on you favorite project management tool, in my case Trello, and working through them until you have something releasable.
- Prepare for release from the outset (for projects that need hosting). Continuous delivery is another everyday practice which makes your side projects so much more pleasant. I forgot about this in my side projects for a long time, so whenever I had “finished” something I had to spend some frustrating hours releasing it. Today I prefer to sort out how to release my project, whether that’s configuring AWS or registering a domain name, before I’ve written any code. This task also gets its own Trello card.
- Take breaks. If you have a few weeks where you don’t fancy working on your project, don’t beat yourself up about it. Especially if you’ve been following this guidance and have something out there. It’s no problem. Even if you never want to look at it again, no big deal.
- Use resources upfront to speed up your learning. There are lots of different materials out there, but the one which has worked well for me is video tutorials. Following a video course can give you an enormous head start if you are building a project with unfamiliar technology. On Udemy, for example, the video courses are usually hands on and you can watch at 1.5x the speed and skip the bits you don’t need. I did this when building a mobile app. I was feeling discouraged after a couple of weeks of tough struggle, but after taking a course, I was able to put together my first release in just a few days. I’m all for puzzling things out but when you have limited time and resources, it’s helpful to get a jump start.
With these basic steps, you can achieve a surprising amount in a limited time, and without feeling burned out. If you think I’ve missed something out, let me know!
Thank you for reading! We are glad to share our experience and help everybody out there to code better.
And yes… we are hiring!