The Peter principle, for software
The famous Peter principle lives large for computer programming abstractions.
It can be in a positive way: operations that are well understood, and routine, are abstracted into a higher level that one must actually think about.
But very often it’s in a pathological way: raising abstraction for the purpose of raising abstraction, until you end up with a pile of abstract spaghetti code, which is even harder to understand than regular spaghetti code.
I always try to keep my abstractions grounded enough. I know no recipes, other than vigilance and correcting missteps.