# Modularity

> A design rule that a system is divided into cohesive modules with explicit boundaries and few dependencies between them.

Record: `architecture:modularity`
Kind: principle
Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)
Severity: mandatory
Scope: package, component, service, system
Canonical: https://banes-lab.com/ontology#architecture-modularity

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Abstraction](https://banes-lab.com/records/architecture/abstraction.md) and before [Composability](https://banes-lab.com/records/architecture/composability.md).

## Repair

- Refactored by: Split Module, Introduce Boundary, Invert Dependency
- Detected by: dependency cycles, unstable module graph
- Violated by: [cyclic dependencies](https://banes-lab.com/records/architecture/circular-dependency.md), [shared mutable state](https://banes-lab.com/records/architecture/shared-mutable-state.md), [boundary leakage](https://banes-lab.com/records/architecture/boundary-leakage.md)
- Measured by: modularity score, graph density, instability
- Enforced by: module rules, package ownership, [fitness functions](https://banes-lab.com/records/architecture/fitness-functions.md)

## Requires

- [High Cohesion](https://banes-lab.com/records/architecture/high-cohesion.md)
- [Low Coupling](https://banes-lab.com/records/architecture/low-coupling.md)
- [Explicit Boundaries](https://banes-lab.com/records/architecture/explicit-boundaries.md)

## Reinforces

- [Separation of Concerns](https://banes-lab.com/records/architecture/separation-of-concerns.md)
- [Composability](https://banes-lab.com/records/architecture/composability.md)

## Enables

- [Replaceability](https://banes-lab.com/records/architecture/replaceability.md)
- [Plugin Architecture](https://banes-lab.com/records/architecture/plugin-architecture.md)

## Conflicts with

- [Big Ball of Mud](https://banes-lab.com/records/architecture/big-ball-of-mud.md)

## In tension with

- [Cross-Cutting Concerns](https://banes-lab.com/records/lexicon/cross-cutting-concerns.md)

## Tensions

- [Modularity / Cross-Cutting Concerns](https://banes-lab.com/records/tension/cross-cutting-concerns-modularity.md)

## Severity

- [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)

## Category

- [Core Modular Design](https://banes-lab.com/records/architecture-category/core-modular-design.md)

## Reinforced by

- [Bounded Context](https://banes-lab.com/records/architecture/bounded-context.md)
- [Single Responsibility Principle](https://banes-lab.com/records/architecture/single-responsibility.md)
- [Component-Based Architecture](https://banes-lab.com/records/architecture/component-based-architecture.md)
- [Package by Feature](https://banes-lab.com/records/architecture/package-by-feature.md)

## Linked from

- [A system is a graph](https://banes-lab.com/software-architecture/model/a-system-is-a-graph.md)
- [Principles are typed](https://banes-lab.com/software-architecture/principles/principles-are-typed.md)
- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Domain Architecture](https://banes-lab.com/ontology/principles/architecture-category-domain-architecture.md)
- [Core Modular Design](https://banes-lab.com/ontology/principles/architecture-category-core-modular-design.md)
- [Plugin / Extensibility / IoC](https://banes-lab.com/ontology/principles/architecture-category-plugin-extensibility-ioc.md)
- [Codebase / System Architecture Styles](https://banes-lab.com/ontology/principles/architecture-category-codebase-system-architecture-styles.md)
- [Core Vocabulary](https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
