A module should not know about the innards of the objects it manipulates.
Bad example:
Do not duplicate code
Make everything as simple as possible, but not simpler.
For example, if an Enumerable is suitable, do not use an Collection or even an List.
Only implement required features!
Do not create a platform, unless you are explicitly asked and payed for this.
Functions in a class: The abstraction level should decrease depth-first when reading from top to bottom.