The key to small, consistent, cohesive modules with low coupling is accepting that there are distinct problems at hand and designing specific models for each. DDD's strategic design is great for this. Understand your domains and create bounded contexts that avoid spanning unrelated domains.