While managing Subcategories is essential for data exporting and view graphics, they are essentially useless when working with schedules. Schedules are created based on Categories (and a few special Subcats) and can only be filtered by the Parameters within that Family.
There are a number of parameters that could be used to filter a schedule, such as Family or Type Mark. And there is always the option of using custom Shared Parameters. But all Revit families have a built-in parameter that makes it easy to filter and sort schedules: the Assembly Code.
Assembly Code (and its corresponding Assembly Description) is a type parameter based on the hierarchical list of Uniformat codes assigned by R.S. Means. The default Uniformat is not perfect for all sites and landscapes (and the Revit Categories are less than accurate) but it is a decent start.
And if you think these are sadly inadequate, 2015 makes it easier than ever to repath your Uniformat Classifications txt file (at the bottom of Additional Settings, on the Manage ribbon), so you can modify and share it however and wherever.
By assigning correct Assembly Codes to Families, it becomes much easier to filter a schedule. For example, if I wanted to create a Site schedule that will only show me Fences and Gates, simply filter by Assembly Code (or Assembly Description).
And a long Site schedule becomes a Fence Schedule (as long as all of my Fences and Gates have the correct Assembly Code).
They are also useful for organizing a long and messy schedule. With correct Assembly Codes, you can take a Site schedule that looks something like this…
And sort and group it into something more like this. Here, I am sorting by Assembly Description (with a Header), and then by Family, and then by Type.
Also, I find that when modifying Assembly Codes, it is frequently necessary to change Show classifications for: to All Categories because any single Category is going to have limited options.