For the new years I wrote down my ideas for both projects (make something that can make light field images for my Looking Glass Go, etc.) and programs (get back in shape, learn how to channel a fox spirit) on little slips of paper and stuck them up on my board.<p>The #1 practice in management is<p><a href="https://en.wikipedia.org/wiki/Kanban" rel="nofollow">https://en.wikipedia.org/wiki/Kanban</a><p>which amounts to "finish what you start". You want to have more than 1 side project at a time because you can't always make progress on it, but you don't want to have 20 in progress. I usually have 3 I've committed to, 2 of them I am really making progress on, the third is aspirational -- that's fine with me.<p>It's more important that you <i>make a choice</i> than the particular choice you make or the process that you use to make a choice.<p>You should pick out projects that are bite sized and have controlled risk. It is good to write a kind of program you know how to write in a new programming language or write a program you don't know how to write in an old programming language. Don't do both.<p>For instance I started on a chess engine last month having never written one before. I coded one up in Python quickly and I'm now working on a better one in Java (I code both languages every day) which was much quicker to kick off because I had test cases and experience. If I got the Java one as good as I want I might try rewriting it in Rust because then I'd be an experienced chess programmer fighting the borrow checker for the first time as opposed to being lost.
Interest.<p>"oh, X sounds cool, let's try that!"<p>Of course, I should clarify that I generally have multiple side-projects going on at any given time. If I'm not getting paid for it, I let myself do whatever I feel like doing that day ^^