For me, I cannot keep everything in my head. I sometimes find I get a bit lazy and I end up doing that. The problem then becomes I am spending so much time refreshing the list of things to do instead of actually getting something done. And that leads to anxiety, lack of motivation to start, etc.
Todo lists. I love them. I live by them. The let me dump the mental todo list which takes up so much mental effort to keep in check. Some people might be snickering a little about that. You have trouble keeping a simple todo list in your head and working? You cannot multitask? Yes! Yes I do have trouble keeping a ‘simple todo list’ in my head and work. The two are battling for my attention. And no, I cannot multi-task or even task switch well. I do not thing anyone can. Show me someone who is multi-tasking and I will either see someone who is deluding themselves and are very ‘inefficient’ or ‘deficient’ in their application of work or they do not have much to do.
So todo lists are a god send. But they are not useful if you look at them and you are still paralyzed at starting anything on that list. This points to a second issue. Those todo items are probably too large in scope. Break them down into smaller pieces. Still paralyzed? Keep breaking them down. If you have to, make the tasks super trivial just so you can start. Say, having to write a document. You have an idea what is needed in that document. Create a task for them. Create the doc file. Add placeholder todos in the document on what needs to be there which will need to be replaced later. Add the header/footer/title page. If you have trouble writing a section of the doc but you have an idea of a sentence or two of that section, write them down in the rough order you think they should be in. The more you can offload from your head, the more you free up your head to concentrate on other parts of the problem.
And this is how Software Development goes. We create tickets/tasks/todos. If those tickets are too big, break it down. Still too big, break it down. At work they do not expect the ticket assigned to a dev would be further broken down by the dev but that does not mean a dev cannot do it themselves with notepad/excell/scape piece of paper. I do this all the time. Tickets are not always simple, single line changes. They could encompass a huge addition to a program with UI parts, data load and storage parts, logic parts, etc. You have to break it down.
I am trying to bet more productive at home on my own projects. They have be languishing for a long time mainly because my regular day job has been sucking some of the drive to do anything after work. And even my small personal tickets are paralyzing enough. I have been breaking them down to such a trivial size that there is no excuse to not start on them. And this starts the feedback loop. Once you tick off a todo as done, Woot! You get that hit from finishing something. It does not matter how small it was, it was necessary to move forward. And that tiny todo got you closer to being in the zone and continue with another small todo on the list.
Once you hit a todo that stalls that momentum. Look at how to break it down into smaller, trivial todo items. It will make a world of difference.
However, sometimes you just have to take a break. Always keep an hour of two of each day to just do something mindless. Preferably just before bed. That allows you to restore some of your battery for the next day. No one can go 100% all the time with out negative effects. Life is a marathon, not a sprint. Pace yourself.