Recently I have been spending more of my free time building side projects for both fun, but also to learn new things.
When setting off on a new side project, it can feel amazing. You get this feeling of excitement, you know where you are going to take it. The feeling of building something from the ground up, where you make the important architectural decisions and set the coding standards is amazing.
All too often though I have found myself starting a side project, really excited to build something awesome. Only for real life to get in the way and fizzle that excitement out within a week. The project stagnates, I no longer find it interesting to work on and I give up to work on a new idea.
The main reason for this is: spending time thinking of things to work on for my side project when I should just be doing the work from pre-prepared thoughts.
So i've been on the search to figure out how I can solve this. I think I have found the way.
When I first started my most recent project, I broke it down into a few key pieces of functionality. Essentially the building blocks for what we would need in order to say that we have achieved the basics for what the app should do.
This gave me clarity, the ability to take a task at a time, implement it well, challenge myself on each core decision. Then pick another one up once i'm ready to move on.
Throughout this process, I would add new tasks to represent pieces of functionality that I further discovered was necessary for it to function.
Something about having a clearly defined, brief, concise, list of tasks to do ignited a spark in me. Each day when I would come to work on my side project, I would have a task sitting at the top of the pile ready for me to pickup. Each one would be prioritised in terms of 'urgent', 'high', 'medium', 'low'. I also had an indication as to how long each one would take me.
This mean that when I came to work on my side project, I could pick a task that would a) suit my timeframe to work on it and b) what I had the mental capacity to implement. Sometimes after a days work, we aren't in the mood for a long session of deep coding and problem solving. That's okay, just have a list where you can pick something else up.
Feeling like we are making progress towards a goal is an important thing. It's what a lot of productivity people mention. So I think the lesson I have learnt recently is that by having a list of tasks that can be picked up and worked on; In a range of complexities and priorities. Allows me to make progress towards my side project's minimum viable product (MVP) even on the days where I don't have a lot of capacity to work on it.
This feeling of getting closer upon each pull request as a result, feels great and I can see the destination ahead whilst on the journey.
Remember the core message to follow. Make it work, make it better, make it quick. Applying this when building a side project can transform the rate at which you ship.
So my recommendation when starting a side project is:
Take some time to figure out the core building blocks that you need to build for your app to function.
Break them out into a simple prioritised list that you can revisit to keep progress measured.
Make sure to add some tasks that are small and some that are large. So that you can keep the momentum going on the project.
Keep adding tasks as you go to make sure that the work pile never goes down too much that you spend brain bandwidth coming up with new tasks when you should be picking up a task and just coding it up.
If you can do those above. I think you'll have a greater experience when building a side project.