I would add:
1. Good curves lead to good surfaces, which lead to good models. Invest a lot of time into your core curves. They matter.
2. Keep curve degree low. The trade off is detail vs stability. The more complex a curve, the more difficult it is to maintain a smooth curvature on that curve. Less is more. Consider using conics where you can.
There are three basic approaches:
a. Drape surfaces onto a wireframe skeleton
b. Build basic surfaces, and over build them to trim back to one another
c. Use combination of surfaces and solids to form shape, using surfaces as tools to manipulate the solid, replace face, trim, etc...
Think about the model and how it might change and where you need transitions. Apply most robust method.
4. Analyze surface quality frequently. Poorly developed surfaces lead to unstable, problematic to manufacture models.
5. The world is 4 sides. Surfaces have a U and V two-dimensional representation. Select a strategy that maximizes 4 sided patches for best surface quality and robustness.
6. Avoid slivers, triangles and highly differentiated curves where possible.
7. Preserve sharp edges and curves for finishing operations later on, except where a transition or the model requires a given curvature.