Any problem in computer science can be solved with another level of indirection, except for the problem of too many layers of indirection.

The Fundamental Theorem of Software Engineering