The simplest thing I can really say is people should name things for their purpose. A classic example is 'warning-message' rather than 'red-box'. It might be an orange or pink box in future, but it will always be a warning message. Might sound simple but people fall into the presentational naming trap all the time.
Also pay a lot of attention to default CSS that cascades over all the variations - get that right and you won't write too much CSS. Set the wrong things as the default/base style and you end up with a lot of override code that could be avoided. Easier said than done, particularly if the projects running under pressure; sometimes this has to be done in a refactoring exercise when the component has settled.