When I decide to create something, I always end up overthinking my decisions. For example, recently as I was trying to build a web browser, I wasn’t able to settle to any one method of going forward. Instead of actually coding stuff, I spent a majority of my time just thinking about the right way to do things.
Some harder things to decide are what is considered as cheating? Do you want to learn everything from first principles? But if you have already done something similar before, can’t you just use a library to do that for you? But what if that library doesn’t do exactly what you want and also adds a lot of bloat to the project? When you are building a web browser, do you also consider stuff down to the network layer? Or do you just abandon your web browser project and start making a network stack? Haha.
The typical solution to these issues is to just start: works 100% of the time. So whenever you are building something and your mind drifts to the shiny new thing, or you start to overthink your initial commitment, just tell yourself that this phase is absolutely normal and that you need to move past this phase. Then, proceed to do actual stuff and as soon as another question pops into your head, just eliminate it (I don’t know how, but just try to stop thinking about the question).
Doing actual stuff doesn’t mean not planning. Planning also comes under doing stuff. But make sure you are moving forward. Directly jumping into the code without doing any research is also bad. There is a fine line between planning for work and planning for filling up time.