Programmers too often add indirections which don't provide abstraction:
* The programmer wants to POST an object to a web server.
* The programmer also wants to think about it at the level of POSTing an object to a web server.
* And yet the programmer creates an HttpClient.java and an AbstractClientManager.java an ClientManager.java.
* These extra classes are just pointless indirection - not only do they not prevent the programmer from needing to reason about POSTs, but they actively make it harder to do so.
In contrast, if you have a collection type (Set, History, Permissions) and want to treat it as a monoid, that's a huge leap in abstraction, with only one level of indirection.