> Now, losing confidence that everything you've written is garbage and refactoring the same systems over and over again until you give up- that's the hurdle I choke on :D
My recommendation would be to pick a very small project and have specific goals for a Minimum Viable Product (MVP). Try to define a project you can complete in a week or two. Keep the list of specific features you want very short. Then, remember that the code doesn't have to be perfect, it only has to be good enough to implement those specific features you wanted. It doesn't have to handle epic amounts of traffic, etc. It's ok to cut some corners round as long as it does the job for what you're trying to achieve.
Otherwise, just as a general mindset, I try to remind myself that a lot can be done incrementally. Sometimes it's important just to build a working version of your software so you can try it out and learn some lessons by playing with the working software. If you stop and refactor endlessly in an attempt to try to build the perfect system, you'll never get to the point where you're actually trying a working version of your program... Which is the point where you realize what's really important or not to achieve what you want.
My recommendation would be to pick a very small project and have specific goals for a Minimum Viable Product (MVP). Try to define a project you can complete in a week or two. Keep the list of specific features you want very short. Then, remember that the code doesn't have to be perfect, it only has to be good enough to implement those specific features you wanted. It doesn't have to handle epic amounts of traffic, etc. It's ok to cut some corners round as long as it does the job for what you're trying to achieve.
Otherwise, just as a general mindset, I try to remind myself that a lot can be done incrementally. Sometimes it's important just to build a working version of your software so you can try it out and learn some lessons by playing with the working software. If you stop and refactor endlessly in an attempt to try to build the perfect system, you'll never get to the point where you're actually trying a working version of your program... Which is the point where you realize what's really important or not to achieve what you want.