I see the separation of concerns, but that it's not quite polymorphic behavior. I tend to avoid using inheritance unless there is polymorphic behavior.

For now, let's leave these as package-scope, and have the builder APIs return `DescriptionBuilder`. We could always revisit later.