If while doing something simple you find yourself ending up with abstractions - you overengineer.
Don’t take it too clever, just program straight to the point. Don’t come up with solutions that are “super flexible”.
Solve the problem at hand. Don’t target tomorrow problems because you don’t know what they are and you’re not that good at predicting future anyways.
Solve problems as they come in.