When and when not to use subdivsion surfaces?
Sub-d surfaces generate a parametric surface with "infinite" quality that are easy to adjust (shifting holding edges, changing creasing,..), but this is what you pay with:


polygons are subdivided everywhere, even where detail is not needed (this is not true for adaptive subdivision)
most of the times the surface is not perfect:



Adding detail will pull the surface closer to the control mesh altering the original shape. Either the control mesh has to be dense enough to start with, or has to be projected with Shrinkwrap modifier back to the original surface. The first requires too much geometry to comfortably work with, the second does not produce perfect result anyways, it only lessens the issue.


It's always about quality vs. time (both render and production). If you can get away with beveled mesh, that's the method to use. If the mesh is not too close to camera, you cannot tell if it has been beveled or was sub-d modeled. Also the Meshmachine addon makes adjusting bevel easy like changing creasing on sub-d mesh (sometimes you find out you would like to catch more/less light on that edge after-all).



Imho the best hard-surface technique is to use sub-d and Modo's MeshFusion to get single shape with all edges rounded from procedural booleans. This offers great flexibility and exactly accurate results. You can create complex shapes without the complex topology and without the inaccuracy. Drastic adjustments are very easy to make.

Houdini has this addon for soft booleans and Maya has the Hardmesh addon for the same workflow.

There is also a Blender addon in wip state called Bevel after boolean, it's workflow is destructive for now but looks very promising. Another approach in Blender could be to use shader utilizing the Bevel node, however this increases render time significantly.