When I encounter a problem, I _must_ output code at peak efficiency and optimization or it just isn't worth it.
If I'm working on a project at work (or at school) time constraints / teammates counterbalance my tendency to lose much time working and/or thinking too much for a little problem that should be solved in a relatively short time.
However, since in hobby projects I don't have such constraints, I lose too much time researching optimal ways to solve a problem and not get any work done. Eventually I lose interest not having got much work done.
Does anyone have experience dealing with this mindset?
This used to be a huge problem for me, but it's become much less of an issue. It's a bit weird, but I think what helped the most was that I really got into the concept of "thin-slicing" as my default approach at work: "what is the least amount of work I can do that gets me closer to where I want to go?". I'm really ruthless with it now, like
- do I need to design my whole db schema right away? hell no, I need one table
- do I really even need the db layer to get to prove out what I'm trying to see? actually no, I don't
- do I need a UI? yes, but I only really need these elements, I don't need auth, I don't need X, I don't need Y, I only need Z.
It's really easy to fall into trying to optimize multiple things at the same time and thinking about second and third-order consequences of choices that you make. My new ethos, as bad as it sounds, is "focus on making something shitty. when i've got something shitty, then i'll make it less shitty" and repeat as needed - the compounding effect of "less shitty" is "eventually awesome". That doesn't always fly at work, but it's IMO the best way to get things done. I'd say 9 times out of 10, you learn so much more from making the shit thing than you do prematurely optimizing something in your head.
The other thing to mention is that there's a false dichotomy between quantity and quality. Quantity is the only way to get to quality. At elite levels, improvements happen because you change how you do things. But to even get to that point, a lot of quantity work has to happen.
In other words, your gut is telling you that super-optimising is making you better, but it's not.
I think it's honestly a kind of mental creative hangup, like procrastination. Many times procrastination, all-or-nothing, and a feeling of the worst that can possibly happen will happen can easily derail me.
What's helped me is first admitting that these coping mechanisms might not be helping. Sometimes, they are useful, for example, in not spending huge amounts of money on a random idea that may or may not be feasible. But if it is a simple decision with small impact to your life, realize that. Realize the stakes are low, and the amount of time you are putting into it is higher than it merits.
Next what helps me is timeboxing. Just do it. To make this more fun, I think of it as a challenge. Can I code something in an hour, or before a movie is done, etc.
Experience has taught me what you worry about is rarely what gets you anyway. It's what you don't know might happen that gets you.
Best of luck.
Also, recognize that you might be drawn to working on problems you know how to solve and drawn away from problems you're not sure about. If you're good at optimizing code but not sure about handling player movement or whatever, you could be feeling the pull to do the thing you're good at.
Am I trying to learn something new? Am I trying to get something out quickly?
If you start out with the latter as the goal implement a naive solution with a TODO to come back to. If what you release starts gaining traction and you want to continue to work on it you'll come back to your TODO.
You will also realize that the best software starts small, or as a fast toy to start with.
When you see a debate over 10x developers, that's between people who are not.