When I started to program I used to be nervous about everything. I always wanted to make sure my environment was set up in the best possible configuration, or I was reading the best programming books available or that when I wrote code, it was at its very best so I would never need to re-write it again.
As time passed I realized that no matter how long I planned or prepared, the code I wrote was never perfect. Yes, if I prepared well, the code I wrote was better than when I just jumped in, but it was never perfect.
Software is never finished only abandoned
If your code is not working for you, pivot
Pivoting is when you change the direction of your company or software solution to test out a hypothesis based on metrics you have been collecting. No industry encourages pivoting or have the privilege to pivot like the software industry. Many of the biggest companies in the industry have all changed direction and the reason they can do this is because it is easy to delete and edit code. It is not as easy for a restaurant to turn into a hotel or an oil company to become a clothing retailer. No industry has the ability to change its skin like a software company. This is why Facebook has pushed the "Move fast and break things" mentality. Creating great software is driven by results of experiments. Experimentation is for the privileged.
Considering code is never finished and you can easily change it, do not fret about the perfection of what you are about to build. Focusing on an actually working solution is more important than getting everything perfect the first time. Code is cheap, it is easy to delete, change and supplement as a developer, so never be afraid to do so. The faster you move and complete experiments, the faster you will get to the best solution.