Support for generic programming consists of three essential
ingredients:
support for overloaded functions,
a run-time type representation, and
a generic view on data.
Different approaches to datatype-generic programming occupy different
points in this design space. In this article, we revisit the ``Scrap
your boilerplate'' approach and identify its location within the
three-dimensional design space. The characteristic features of ``Scrap
your boilerplate'' are its two generic views, the `spine' view for
consuming and transforming data, and the `type-spine' view for
producing data. We show how to combine these views with different
overloading mechanisms and type representations.