I prefer pen and paper for my to-do lists because I tend to get addicted to the compulsive nature of software like that... plus you can't draw diagrams and pictures in most of the software options.

I keep a separate binder for each project I'm working on, or seriously plan to work on later. When I complete a list or run into a wall, I write down the areas that I think would make most sense to work on next (without looking at the binder). Then I refer to the binder to collect related data, crossing out anything that has already been addressed or is no longer valid with the current iteration. Then I combine my goal/plan with whatever related notes/ideas/to-do lists I found in the binder to create a practical to-do list. I try to resist the urge to break the items on this list down into pieces that are too specific. Planning specifics too far in advance can often be counterproductive since a lot can change as you mold your creation, rendering much of your time wasted or leading you down a less-than-optimal path. Instead, wait until just before you're ready to implement a task/item to break it down... and then break it down into really simple chunks before you start.
I work completely solo at the moment so all that works great for me. If you're working with a team, however, then you'll probably want to devise some sort of task board (scrum, lean, kanban... research these if you don't know what they are). The bottom line is that you need some sort of system that can be easily changed and won't result in compulsive behavior. Then just adjust it to better suit your needs over time.
If you're ever unsure about how you're going to do something, you're usually better off postponing it until other pieces of project are development and the game as a whole becomes more clear.
If you're interested in learning more about iterative development, check out a book called
Agile Game Development With Scrum. I knew a bit about these concepts already but this book really put everything in perspective for me. I highly recommend it.