But I really find this difficult. How to decide what abstraction is ok and which is not? Since I did this mistake a few times, I now sometimes tend to try to think a lot about this, which slows me down a lot, and in the end, I still not really sure whether I made the right decisions.
Any suggestions how to decide such things?
See also John Carmack about code duplication: http://number-none.com/blow/blog/programming/2014/09/26/carm...
I have read much advice on this topic, but still, I think I often struggle to make the right abstractions.