Was reading Brad Abrams and Krzysztof Cwalina's book Framework Design Guidelines : Conventions, Idioms, and Patterns for Reusable .NET Libraries.
A few things to remember (I'm sure this list will grow):
1. When overloading a method, you should have less detailed versions of the overloads call more details ones with default values for the parameters the overload doesn't expose. Some default values may be 0 for int, "" for string, 0.0 for double, and false for Boolean. In the example below, the original more detailed overload was originally caseSensitive, but since the default would be true, it was renamed so the default, ignoreCase, can be false.
MethodInfo Type.GetMethod(string name);
//ignoreCase = False
MethodInfo Type.GetMethod(string name, boolean ignoreCase);
3. Favor using base classes over interfaces. Base classes version better and you can add default implementation to members.