Your problem, is that there is no answer to this.
It’s personal preference, and what you find useful when making your game.
Take casting and tick as an example. Is it bad? No.
Can you wreck your game with it? Yes.
But you can also wreck your game with blueprint interfaces and dispatchers
The overall idea is
- Invent your game ( this concept is totally separate from the implementation )
- Code it.
- If you coded it badly, fix it.
How do you know about 3? You will do by the time you get to finishing a game.