I've been thinking a lot about annotating types with metadata. What are valid approaches? How do we do it? When is it appropriate? Why do we want to do it?