We explore when it is safe to extract out an abstraction and when you need to go deeper and rebuild it from scratch.
We explore some of the background behind the meaning of the word abstraction and why we do it.
If naming is one of the two hardest things in programming, it follows that every other possible solution (except those few involving cache invalidation) should be attempted before naming something. As a corollary, bad names are a code smell.
Lambda abstractions are always leaky, but some are leakier than others. Clojure programmers recommend keeping most of your functions pure and containing the leaks as much as possible.