Krzysztof’s Laws of API Design

I always thought about writing down the laws of APIs design. By "laws", I mean principles that don’t seem to change based on the particular scenario at hand, whether the API is low of high level, etc. Here is my first try. I would appreciate any comments.

Update: "usability" in this context means "how easy to use the library is".

  1. The usability of a namespace is inversely proportional to the number of public types in the namespace.
  2. The usability of a type is inversely proportional to the number of public members of that type.
  3. The usability of a member is inversely proportional to the number of parameters this member has.
  4. The usability of a framework is inversely proportional to the sum of the number of explicit constructor invocations required and the number of types whose static methods need to be invoked to implement common scenarios.
  5. The likelihood of an abstraction being designed correctly is inversely proportional to the number of abstract members on that abstraction.
  6. The likelihood of an abstraction being designed correctly is proportional to the sum of the number of members taking it as a parameter and the number of types implementing it.
  7. The likelihood of a virtual member being designed correctly is inversely proportional to the size of the member’s body.
  8. The likelihood of a virtual member being designed correctly is proportional the sum of members calling it and the number of members overriding it.