To start with the obvious, it is very different, and much harder than working on things for day job (although, in peak distraction mode which I know you have experienced a bit now, it may not be as different as it can sometimes be).
The approach that I find works best can be summarised by: - Momentum. - Continuous progress. - Focus, with emphasis on planning and goal setting.
Momentum is really hard to achieve and maintain, it can often feel like you are making little to no progress - draining enthusiasm really quickly.
To establish momentum, I think it is really important to have a bootstrap period where you can focus on it for 2+ days and make some real progress.
Smaller, incremental progress feels much better on top of a good base.
I always try to get a bootstrap period at the start (not necessarily the very first thing, often there is scattered planning etc… that is worth doing before having a focused period - but close to the start). I always try to redo a bootstrap period any time I feel like I have lost momentum, getting back into it becomes a lot easier with a bit of focused time.
Time is the killer constraint for side-projects, there is almost never enough, and it is hard (more likely impossible) for it to be the most important thing happening at any time. If I didn’t pursue continuous progress, I would be looking at only sitting down for any decent period maybe once or if I was really lucky twice a week. But the reality is, that just isn’t enough to keep in touch with a project. To deal with this I force myself to find time to try to do something on my current tasks at least 4 or 5 times a week. Only 1 of these will be more than 2 hours stints though. This isn’t natural, it feels odd, because you only really want to work on it when you have time to get into things. But over time I have become used to, and even enjoy, being able to do a 30 minute session and just get something small done.
To make the most of doing small sessions I have to be pretty disciplined, the focus/planning things come in here, but it also means picking times when I can be focused and productive. This is hard for me, as the most convenient time for me to do this would be at night after work and kids have gone to bed, but I have worked out I just can’t sustain work then. It can work for a couple of nights, but I get burnt out super quick, any stress at work makes it even harder. I eventually worked out that mornings are the best time for this type of thing for me. Getting up half an hour early, going to work half an hour late, and cranking for an hour in a coffee shop before work is probably my most effective time, even more than the occasional longer session I get.
So regular little sessions, and longer sessions when I can, means the problems stay fresh in my head, I find it easier to come back to. I can also take some time at lunch with a notebook to sketch out problems etc…
The next problem for me is focus. Side-projects have some serious tooling challenges, you spend a decent amount of day-job making it easier to write code, and it can be confronting when even a small amount of that dissapears and adds friction to what you want to do. For me, this often leads to the desire to burn the world and fix everything as I go. But, if I want to make any progress I just can’t. I normally spend a week at most getting set-up, then for everything else, I start a README for each thing I want, and if I have to write code for it, start it inline so I can pull it out later.
To deal with focus issues, and the fact that working in lots of shorter sessions means I have to really know what I am going to work on, not spend 20 minutes figuring it out, I have to be really organised.
So organisation for me is: - A notebook dedicated to project. - Notebook is for notes, diagrams, lists of goals. - A doc directory in project to keep important things pesistent. - A regular planning session (preferrably once a week). This is why I really prefer to be working with someone else, a weekly catch-up, where are we at, what should we be getting done really helps for me. If I don’t have someone else, I often like to find someone to talk to about the project anyway. - I shy away from “todo” lists, I can work out how to do things, and to what level, todo lists make me pretty unmotivated. I tend towards working on goals: “get it to the point where someone can create an X in the UI”, “get a demo of Y together”, “work out a design for Z to talk with A about”, etc… I find these are good at helping with focus, I care less about the end state, and more about the current goal in the smaller time periods I get to work, means things can get a bit messy/hacky at times, but progress is good, and clean-up is fairly brain-dead so easy to do when you are tired and otherwise wouldn’t be able to work. - I spend as much time thinking about how to “deliver” the project as how to “do” the project. For current project, that means spending time on sales pitches, lining up lunches with people to practice explaining the product to people, working on pricing models, working on user-engagement things (for example, currently working on beta-signup page + a questionairre to send to people to see where they are at in thinking about this problem).
Related to all of this, is having some really early wins helps with motivation and focus. With current project, the first week, I worked on a shitty workflow prototype in a shell-script + docker container. Having that done, means we know what we are working towards and things feel far more achievable, so helps.