High-Quality Modules

  • Does the module have a central purpose?
  • Is the module organized around a common set of data?
  • Does the module offer a cohesive set of services?
  • Are the module's services complete enough so that other modules don't have to meddle with its internal data?
  • Is the module independent of other modules? Is it loosely coupled?
  • Does the module hide implementation details from other modules?
  • Are the module's interfaces abstract enough so that you don't have to think about how its services are implemented? Can you treat it as a black box?
  • Have you thought about subdividing the module into component modules and subdivided it as much as you can?
  • If you're working in a language that doesn't fully support modules, have you implemented programming conventions that support them?