I believe that Blocks in Rhino are not only a good concept, but make they make larger Rhino projects practical. Blocks reduce meshes, allow replacements, allow faster saves with smaller files, allow work-groups to divide-and-conquer a project, allow global updating, and have other uses.
With a little TLC, they can do even more, such as allowing a bill of materials and part lists to be made, which is important when you want to bring your thing to market.
[I drew a machine with over 1,000 fasteners, screws, washers, bolts, grub-screws, etc. . It had parts, too. Unfortunately, at the time, and this might have changed, non-blocked parts needed to be blocked to be counted in the block manager. Sigh.]
For me, still most frustrating Block defect still is: defining a block locks it to a layer, which then, makes it harder to work with the layer. You cannot delete a layer if a block was defined on it. So, I define every one of my blocks on the “Default” layer, which usually present, BUT, the trouble comes when you want to explode a block because those objects must be grouped, moved, and organized as not to make a mess. This workaround means that any objects I want to blocked have to be copied into the Default layer before I do, and then I have to move the blocked instance back to the lay I want it to be on. It gets tiresome. In repetition, it’s easy to explode something where it will be mixed up with everything else, or accidentally define a block on a layer.
I am sure that the boat people would want to know the volume of a block, so then masses could calculated. This falls under the category of UI uniformity.
For me, I would still like an A/B substitution toggle for blocks, kind of like an impostor system in video games. This allows a pared down representation of something to be used for work, and then toggled to the real McCoy for the final render. This also would lay the foundation for impostors at a distance, when rendering buildings and details on buildings, at a later date. It would also allow a black-box situation where someone only need concern themselves or let others see certain characteristics, such as the outside of the thing, but not the inside.
[Oddly, I have even found a use to reference blocks in Grasshopper, but apparently we cannot. This would allow Grasshopper to do Grasshopper-like arrays and translations of objects, cheaply for memory. An vendor-provided wall sconce can be blocked and placed in every room of a hotel, using a single rendering mesh. Perhaps they could be counted, too.]
It would also be a little upsetting to have to choose between better blocks and faster draws–because both are required to work on larger projects.