It seems like there are two main approaches to systems design: the one where, when composing separate features, you abstract them all until you derive a conceptual lowest common denominator, and then define a single unified hierarchy where every feature is an example of one of the elements of a generalized mechanism; and the one where each feature (or a given new feature) is developed independently and in a manner that requires the least overhead, conceptual or otherwise.