Tips on how to start and finish personal projects
2020 has been chaotic so far, I hope everything returns to normal soon and best wishes for everyone. On the bright side, now the UK government has recommended people to avoid going to mass gatherings and businesses have told their employees to work remote. It is a perfect time to hammer out some personal projects. I have always struggled to work on personal projects on the side over the years, however, this year I’ve managed to complete 2 projects in 2 months. I know this is a common problem, so I’d love to share my experiences in this post.
1. Find motivation
It is too tempting to watch something on TV or play games after a day's work. After all, these entertainments are distractions specially designed and engineered to hook us in. I find it genuinely difficult to master enough motivation to open up my laptop and code when it is so much easier to not be productive. From my own experience, only meaningful ideas will generate enough desire and motivation to work on it.
So what is a meaningful project?
I believe meaningful comes in two forms:
- It is fun for you. Yep, even more fun than jumping into your favourite game or watch that TV show someone recommended to you.
- There are consequences if you don’t finish. E.g. someone is paying you for it, or it is an app you desperately need for yourself (I'll talk more about it later).
I've tried to work on projects that I don't care much about, but started on them anyway because I felt other people might use it. Often than not, these projects are abandoned very quickly. Why? Because it is not meaningful enough for me. A promise of someone in the future may use it is all smoke and mirrors until it happens, and the unknown could drain away any motivation and interest when the project hits a blocker. These blockers could come in many forms, I won't go into many details here.
In my opinion, it is much better to finish something that probably no one will ever use, compared to building a “sound” project but never end up finishing it.
If you are anything like me, then you also have the "I have too many ideas" problem. This could be switching to work on a new project halfway, or just increasing scope in the current project like changing frameworks and libraries. I am completely aware that I’m my demon when it comes to getting something done. So I’m always in search of productivity tools, hoping it could be the thing I'm missing from my workflow and that it will get me to finish my side projects.
However, the real problem often isn’t the underlying technology or tool. Instead, it’s the mindset of taking the side project serious enough to see it through. Mindset is such a blur, vague and BS sounding word that is overused in self-help contents. I hate to say it, but it did capture my problem. I tried to use scrum methodology in my projects, or kanban boards, but it didn’t matter what I used the result was no different. I have been reading the Shape Up book by Ryan Singer, which talks about how to build the right product and ship it too.
My key takeaways from the book are:
- Work on a personal project in 6 weeks cycles. This way you could technically build 8 projects in a year with time to spare. In 6 weeks, there is enough time to work on a project that is not too simplistic, but not long enough to get bored with it.
- Must deliver the planned scope at the end of the 6 weeks. This assumes that you will do whatever it takes to finish the goal set. This means working late into the evenings or even whole weekends had to. It feels like a terrifying commitment, so make sure the scope is realistic and always go for less scope if unsure. After all, it is better to have something basic working than nothing at all.
- Use both words and sketches to define the scope and the solution. Don’t waste time building wireframes, or worse, pixel-perfect designs for personal projects. Remember designs don’t bring value on their own if the goal is to release something at the end of 6 weeks. Sketches should be enough to give a vague clarification which is enough at this stage. Don’t forget to describe in words the constraints and scope of this period.
3. Discover Project Ideas
I have plenty of terrible and weird ideas, so I never really struggle with this. But many people I speak to don’t have anything they want to work on. So here are a few of my favourite questions which hopefully will help you to find some meaningful side project ideas:
- Is there anything that bothers you? That you just wished there was a simpler or better way to do it?
- Is there something you know people wanted but doesn’t exist? Who would be wanting to try it out on day one?
- What would be something cool to build which you’d be proud to show off to others?
- What could you create to make your personal or work life easier?
There are lots of resources online which can probably help you to find the right project idea better than my questions here. It doesn’t matter how or where you find the inspiration, it doesn’t even matter if it is not original. One of the two projects I completed this year is a Todo app, there are already countless of Todo apps out there. But that doesn’t matter, I wanted a Todo app that I could adjust to how I see fit, whereas other solutions are less flexible. So the important thing is to find something meaningful to you.
4. Improve ideas by adding notes over time
Try to record ideas that come to you in a central place. This way you could always look up the ideas when the time comes like browsing a catalogue, instead of pulling out hairs trying to think of something on the spot.
Another advantage of keeping everything documented is that even if you don't work on a project idea right now, it is always good to add in notes or thoughts over time. For example, I had lots of notes written up for the Todo app over time, ranging from sketches, features, milestones, etc.
5. Choose what to work on
Okay, let’s say you were able to generate many ideas and stored them in one place. Which one should you work on next? It is hard to give strict guidelines on how to pick the ideas, but I always remind myself to pick something I am motivated enough to work on for the next 6 weeks. It doesn’t matter if the idea is good or not, just make sure you have enough motivation to finish it.
My final advice here is to always finish a product. Always try to finish a project, it is a good mental boost, gives confidence and increases motivation to tackle the next project. No matter how pointless the idea may seem, there are always value to be found in doing the work. First, it proves you were able to successfully build something, perhaps something to add to your work portfolio? Secondly, don’t forget that you’ve learned, practised and enhanced your skills in the process. Maybe next time when you need to implement something similar, you’ll not only have more experience but also a source of reference. Lastly, you get to tick something off your ideas list instead. The feeling of marking something as complete is awesome!
6. Set yourself up for success
Firstly, no matter what you do, try not to work on multiple projects at the same time. Stick to one thing and get it done, then work on the next idea. Context switching is expensive and more importantly, it confuses when you finally decide to do something productive.
It is hard enough for me to find the motivation to open my laptop in the first place. It will just make the problem worse if I had to decide between multiple projects which one I want to tackle at the same time. The thought about justifying what to work on is enough to drain out my energy and turn me towards some kind of entertainment that requires less processing power e.g. watching TV.
The goal here is to make working on side project the path of least resistance. Prepare your desk where you normally work, clean it up, put your laptop in the middle ready to rock. This way all you have to do when you come back from work is sit down and then you are off.
7. Reduce Friction & Cost
When working on personal projects or side projects, you are likely a one-man-army. Where you wear multiple hats, Design, Developer, Quality Assurance and Product Manager. Try to make use of all the free (tier) tools out there, avoid reinventing the wheel where ever possible.
There are lots good CI/CD tools out there, take your pick, just make sure if something could be automated then do it. Of course don't spend weeks on setting up the best pipeline ever, just set up something simple and usable.
In recent years, there's a massive push for open source. Many tools and services will let people use their full product for free for open source projects. There are even more tools to pick from if consider paid services which gives a free tier. The free tier is often more than enough for side projects.
Some other tips:
- Don't host your apps, stick with static web apps when possible, avoid node apps since they require a server to run.
- Query database from client-side at the start, use something like FaunaDB or Firebase FireStore.
- Use a headless CMS if there are lots of content.
Maybe some of these options don’t offer the best scaling, may lock you into a platform, or might have some security concerns. I’d argue it is best to worry about it later, have something working first will motivate you to come back and improve it. Whereas if you spend 4 weeks building a secure auth solution, it is highly probable that you’d give up, because let’s face it, that is not what most people find exciting. Of source, this doesn’t mean don’t build things properly, make sure things are well-rounded before a proper release.
For more information on tools and services, check out a previous post on Awesome tools to use in personal projects.
My two projects
For both inspirations' sake and also to prove I didn't just make up my two side projects in two months stats, here they are:
- Slash-Dash: a basic word-based RPG game built with React, xState and Bootstrap CSS.
- Organise: yet another todo app built with Svelte, xState, Firebase FireStore, Serina (one of my open-source projects), and some Bootstrap CSS. It also supports PWA.
Slash-Dash was meaningful to me since it was quite fun to build, I tried to recreate some aspects of a typical RPG game (e.g. kill monsters, get drops, change equipment, etc). I showed it off to a few people and it was nice to get feedback and boosted my motivation to do more work on it.
Organise todo app is something I had been planning to create in years. This must be the 6th attempts to create a todo app. This project is meaningful because I wanted something more customised to solve my challenges. To make sure it is clever enough, I even went out of my way and created a natural language parser for time and dates, see Serina on NPM.
So what did I do differently this time compared to the last 5 times?
The first thing I did was to create something extremely basic very quickly. Then I fully switched to this app, even before I implemented edit and remove functionality. Now I've locked myself into my app, if I wanted something, I'd have to go and build it otherwise I just have to deal with the pain point again and again. Needless to say, it was super frustrating at the start when the app was unusable, but it motivated me to add the missing features and fix annoying bugs.