Classes, functions, variables, etc. should have descriptive and sensible names. If you're struggling to find one, might be a sign of problems..
Repeated function, sections of code, even values should be removed, often by abstracting the duplicated part into its own function.
Classes, functions, etc. should have a single thing they do.
A class or function should depend on as few external classes & functions as possible. It's often better to have a dependency on an interface then a concrete class.
Functionality strongly related to the same thing should usually be kept together.