How to finish your side project.
It's no secret that finishing a side project is hard.
I've struggled with some side projects and had success with others. In this post, I'll focus on the actions and adjustments that have worked for me.
It's possible to work on and finish side projects even with a busy schedule, the key is to optimize for interruptability. You will be interrupted so instead of counting on having hours of deep work available, it's better to be realistic and make some adjustments to use available time in a better way and reducing the cost of interruptions by having tricks to switch context fast.
A failed side project story #
Maybe you are familiar with a similar situation
At the beginning:
- High motivation.
- Priority over other tasks.
- Working long hours because it's fun.
- Desire to work with a new technology
- No problem working on weekends.
After some time:
- Motivation decreases.
- Feels overwheelming.
- Harder to justify working on the project when there are other responsibilities.
- Other stuff seems more interesting now.
- Forgot how to set things up to continue working on the project.
- Not sure what I was working on.
- Forgetting about the project and archiving it.
The challenges with side projects #
- Context switching and high cognitive load is exhausting.
- Losing interest/ motivation.
- Perfectionism - never ending projects.
- Impostor syndrome.
- Lack of focus.
- Lack of time.
- Unexpected life events.
Re framing the goal #
I believe you can set yourself for failure from the start if the goal is not clear.
I've been excited about ideas but later found that I was not really invested in the idea and just wanted to explore a cool feature/tool. It's good to go deeper to your true motivation.
Feeling overwhelmed can also contribute to abandoning the project, I'll talk about small steps and why it's key.
If your track record includes lots of ambitious projects and none of them finished, then starting with something smaller seems like the logical approach.
Pick a small battle, maybe just the key feature first, maybe support for just one platform. Cut off features for the first version, remember that there's a lot of forces against you completing your project so reducing load is important.
The approach #
Now that you have a clear idea of what you want to finish, there's some actions and adjustments to your process that will increase the chance of winning the battle (shipping).
- Preparing your environment (painless context switch)
- Work in Small steps
- Mental warm-up before each session.
- Anticipate and expect interruptions.
- Changing your physical location.
- Writting down the ideas on your mind at the end of the session.
Small steps are key #
I like the idea of not having too many open boxes at the same time, where each box is a task/feature or something that you started but haven't finished yet.
It's demoralizing to wait weeks or months for a win. Small steps give you small wins, it keeps the journey fun. There's less change of feeling stuck.
Geepaw Hill shares excellent resources on the topic of small steps in software.
Warming up before each session to reduce cognitive exhaustion #
Before starting actual work, write about what would be good to achieve in the session. I find this ritual valuable as it helps me figure out the next small step. Writing the project goal (high level) every session is also a good way to switch context and reminding yourself what's it all about.
I'll talk about having a "context" log, where you write the current progress, and what to do next. If you have this file, reading the previous session log let's you resume your work faster.
Immediate context switching #
With the limited amount of mental energy, is crucial to reduce the number of setup tasks required to do a working session on your project. The goal here is reducing the number of small decisions you have to make to have a working environment.
This is one of the most important things for me, and the way I approach it is:
- Creating a separated system User on my laptop.
- Having an email address only for my project.
- Having a "context" file where I log what's currently happening with my project, usually at the end of a work session.
These have been valuable tools for me, let me explain why:
A separate system user for your side project #
By creating a separate user, you automatically have all the operative system tools (calendar/notes/reminders , etc.) available ONLY for your project.
All the files on your desktop will have a relation to your project. This may not seem impressive but think about all the small distractions you find if you use the same user for your personal/work tasks:
- Time to find a file (filtering unrelated stuff will bring memories of other things)
- Reminders/calendar notifications not related to your project
- Dealing with other project setups can be stressful.
I think it was Seth Godin who recommended having a separate laptop for a side project like writing a book. This is an alternative too.
You can add more extreme measures like redirecting distracting sites like news or reddit. If you need to login to one of those sites, it's better to switch user accounts. Try to keep your project user clean.
Having an separate email for your project #
I'm a fan of email as a note taking tool, it's available everywhere, the UI is simple. Having a separate email account lets you capture related notes/ideas/links from any device. This has been useful for me when I'm doing something else and have an idea, or find a resource that can be used to do something I want to incorporate into the project.
Later, when I log in to my project environment I'll get the emails with relevant information, no chance of getting distracted with other stuff.
The context file, (brain dump). #
A context file is just a text file where you add a short summary of the current project status and what's on your mind at the time.
This has been valuable to me, because the act of writing it down helps me have a clear idea of things I could do next and next time I have time to work on my project I'll have a starting point and it reduces the cognitive load which maximizes the session efficiency.
Going to a library or café (when possible) or event to another room and have a dedicated space for your current side project will make a difference.
Not sure about why, but using the same desk for different work and side projects is not ideal for me. If you can I recommend having a different place that helps you switch context quickly.
Abandoned projects may not be a failure after all. #
Some abandoned projects end up being an inspiration to create something else years later. Maybe you learned something new, explored an idea, or found a problem not possible to solve with the knowledge and resources you had at the time.
It's good to have an open mind and be ok with finding dead-ends, they are powerful teachers.
However, shipping projects is awesome and by reducing scope and anticipating interruptions you will be able to complete your project and release it to the world.
For more information about the benefits of a "small step" approach to software development check the excellent resources from Geepaw Hill
Illustration by Angelica Delvalle (In case you need art for your company products contact her, she does awesome stuff!)