I do some modeling with Blender. There are some good tips I can give. So ask away.
One thing I do is if I have a smooth sided object where I need to have the smoothing have a hard edge against a flat edge, is to separate the flat edge vertexes from the smooth vertexes. In other words, duplicate the flat polygons move them out of the way, then erase the faces and edges inside the portion you duplicated. Then move the duplicated area back.
Using a surface subdivision function also helps. In Blender you have the basic mesh and add the modifier subsurf with catmull-clark. This gives more detail without adding masses of vertexes and polys.