# Rule 2: Design Small Aggregates
> [!Note]
> Keep [[Aggregates]] minimal by including only the [[Entities]] necessary to uphold **invariants**, thereby avoiding **oversized clusters**, promoting **coherence separation**, and **optimizing performance**.
The second rule emphasizes **minimizing components** within an [[Aggregate]]: group only those [[Entities]] and [[Value Objects]] strictly required to enforce business invariants. Avoid creating **oversized clusters**, which inflate transaction costs, strain memory, and complicate maintenance. When distinct sets of objects don’t need immediate consistency with one another, they likely deserve their own [[Aggregate]], ensuring clear **coherence boundaries**. Smaller [[Aggregate]] also **optimize performance**, enabling faster operations and reducing contention in concurrent environments.
---
## References
- Vernon, V. (2016). _Domain-driven design distilled_. Addison-Wesley Professional.
- Vernon, V. (2013). _Implementing domain-driven design_. Addison-Wesley Professional.
- Khononov, V. (2021). _Learning domain-driven design: Aligning software architecture and business strategy_. O’Reilly Media.
- Alammar, J., & Grootendorst, M. (2024). _Hands-on large language models: Language understanding and generation_. O’Reilly Media.
- Evans, E. (2003). _Domain-driven design: Tackling complexity in the heart of software_. Addison-Wesley Professional.
- Millett, S., & Tune, N. (2015). _Patterns, principles, and practices of domain-driven design._ Wrox.