What follows is a list of best practices I compiled for my colleagues, advice sprung from the painful experience coming naturally from dealing with other people's code :-)
Defining a list of best practices is always hard. I like to think that we are defining a protocol of communication, because we are. Therefore this document uses keywords defined in RFC 2119, to differentiate between rules that should never be broken and those that can be broken if you know what you're doing.
This list is also far from complete.
This should be the first rule of any document that describes best practices.
Always try to understand the reasons behind a rule, don't cargo-cult. Following advice blindly leads to the worst hairballs imaginable.