Honestly, I've had to learn as I go. The horror title I've been working on has taken a while. But I've gotten a "flow" to it that works for me, especially in Godot. It boils down to three steps in this order.
- Make it work
- Make it work better
- Make it pretty
To go in more detail, make your "core loop" first. All games revolve around this. Graphics, you have to see, are window dressing for what code is saying. It's easy to get those somewhere. For instance, if I were making a shooter, I would make a little test arena, make code for my player walking around and make sure that "core system" works first. In my horror game, I made my main player and enemy first and built a "skeleton" of the world before even starting eventing and such.
Then, once the code is doing what I want it to do, then I optimize. Does this bullet need to move faster? Are the controls sticky? Does it feel good? How is the camera handling? Optimizing is easier when you have something working and know what it should do and what it should not do.
Worry about making it pretty later on. There are tons of artists out there who can help or will sell you assets. It's much easier to drop something in later when it's all functional, especially on the graphic/sound side. And by that time, you should know your system/code so well that you're less likely to break something if you add a feature.
I realize I am an amateur and this is MASSIVELY watering down this process (bug testing, loading optimization, etc) but it's what works for me.