Organize modules by feature, not by class type

Group bindings into features. Ideally it should be possible to enable/disable an entire working feature by simply installing or not installing a single module in the injector.

For example, don’t just make a FiltersModule that has bindings for all the classes that implement Filter in it, and a GraphsModule that has all the classes that implement Graph, etc. Instead, try to organize modules by feature, for example an AuthenticationModule that authenticates requests made to your server, or a FooBackendModule that lets your server make requests to the Foo backend.

This principle is also known as “organize modules vertically, not horizontally”.