I am writing this because it is something that annoys me most and makes me want to throw this work into a corner. When will your time to implement or design some functionality, then it turns out that you need to do this again, completely rebuild or maybe even completely remove my morale flies down. However, this is a normal game creation process. So it happens that what seemed super on paper, the game does not completely check. You have to be ready for such changes and do not give up.
It can also happen that you will have to devote some cool feature to optimize.
You need to have a hard arse.