Abstractions are a beautiful thing. The goal of an abstraction is to reduce or factor out details that you don’t care about. By removing details, an abstraction allows you to focus on the problem at hand and not the underlying implementation.
An abstraction fails when it doesn’t remove the details.
HAML, The Unforgivable Sin