I've been a Revit user and developer for many years now and there's one general flaw that still remains which can easily be fixed.
The flaw centers around the difference between the behavior of a Family and its assigned Category. In lots of situations the user may need to create an object that behaves like a certain family but does not belong in its Category.
For example, lets assume an architect creates a fancy sunshade element using a floor element. Indeed the element behaves like a floor but its obviously not a floor and should not be included in floor schedules.
Another example is if you create a Generic Model or Mass element. One cannot ever really define what that element is. Its Category is forever locked to the Family.
The fix is simple. By adding a built-in type parameter Category override parameter, that would allow every user to flag the element for what it actually is. This would greatly improve the data organization and create less confusion/misinterpretation in schedules. As more and more information is pushed downstream its critical to have it properly organized upstream. It would also simply/organize visibility/graphics overrides in a View. I've seen plenty of models using Worksets to achieve this but I feel its a illogical workaround due to the fact the category can not be overridden.
Categories, in my opinion, should be able to be freely created, edited, and deleted by the users. Families should really only dictate behavior.
This approach would also simply the modeling environment. For example, floors and roofs are really just the same plate elements that belong to 2 different categories. Why not just have 1 plate family and let the user declare what it is?
If you feel this important please reply and let Autodesk know.