= The Design of Data Structures = Like all approaches to software design, there is a delicate balance between genericity and over-abstraction. The goal of generic programming is to produce highly adapbtable components, and yet the more adapatable the component, the less usable it becomes. With the policy featuers of the Origin core, it is possible to completely decouple the declaration of a data structure from its underlying composition or implementation. This is dangerous because it can fundamentally "wash out" the crispness of an abstraction. The question becomes, what is the best approach to take when defining generic data structures?