And actually, I now see that the FrameworkBundle has its own set of descriptors, which help you print out even more things, like routes and services, etc. Of course, we won't cover that here, but it highlights that there are 2 distinct use-cases:

1) I want to make a new override format for help options (described above). And actually, I'm not sure this is really possible - as the DescriptorHelper is just created and used in HelpCommand: https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Console/Command/HelpCommand.php#L83. In other words, setting it in the HelperSet will not do anything. So, I don't think this is a use-case at all :).

2) The second use-case is because you're in a command, and you want a systematic way to print things out. This is especially useful in the framework, because the `DescriptorHelper` in FrameworkBundle already has a bunch of Descriptor classes that are able to print out routes, services, etc. For the component, I suppose the use-case would be if you need to print out a number of different objects and the user needs the option to print those options in a number of different formats. But in this case, you still won't add the `DescriptorHelper` to the HelperSet.

So, (2) is the only use-case I see. Are there others? And for (2), I don't really see any value in extending the default `Descriptor` class: https://github.com/symfony/symfony/blob/2.3/src/Symfony/Component/Console/Descriptor/Descriptor.php. That's because that concrete implementation is all about printing InputOptions, Applications, etc - which I don't think is helpful. You'll instead implement the interface (https://github.com/symfony/symfony/blob/2.3/src/Symfony/Component/Console/Descriptor/DescriptorInterface.php), which means creating a `describe` class where you have a `switch-case` statement for the different type of objects that you'll want to print. And then you'll create maybe 2 concrete classes that implement the interface to dump in, say, Json and YAML.

Am I missing anything? I had a hard time seeing the value of the descriptors (outside of how this is used internally, which is quite nice).

Thanks!