What's a small misake that you've made from not knowing better that's easy to miss?
For me, I recently had to revamp something because I was taught to use PlayerPrefs for saving all game data and had to move everything to a JSON in order to make cloud saves work or even just transfering save files to other devices.
I'd say abstract, but only abstract as needed. It's easy to get deep in the weeds future proofing, but spending all your time on interfaces is a surefire way to burn out.
Definitely. You'll probably be able to tell ahead of time if what you're building should be reusable in different contexts/projects (e.g. an input system). But for more gameplay-specific code? Just make it work for whatever your game needs it do right now. Who the hell knows if you'll ever actually use it again, and if you do it'll probably still need tweaking anyways.