Programming is managing complexity. Abstraction is the art of throwing away information. We usually deal with overwhelming information. We reduce the information into a managable size by discard the most of information. I learned from Lisp community about a concept called whishful thinking. One could always turn Lisp into the best language to solve any given problem. We can wish what if we have this thing for this problem. Then we implement that particular thing. Abstraction gives something a name. Then we can reference the name, combine abstractions to make something complex.

Small is powerful.
Small is beautiful.
Small is easy to maintain.
Small is easy to understand.

Make your codebase a land of small, focus, single responsibility objects.