# Composability

> A design rule that parts share compatible interfaces and carry no hidden side effects, so they can be combined into larger parts.

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

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Modularity](https://banes-lab.com/records/architecture/modularity.md) and before [Composition Over Inheritance](https://banes-lab.com/records/architecture/composition-over-inheritance.md).

## Repair

- Refactored by: Normalize Interface, Extract Component, Introduce Adapter
- Detected by: non-chainable APIs, incompatible contracts
- Violated by: [hidden side effects](https://banes-lab.com/records/architecture/hidden-side-effect.md), [incompatible interfaces](https://banes-lab.com/records/lexicon/incompatible-interfaces.md)
- Measured by: composition count, interface compatibility
- Enforced by: contract tests, type checks

## Requires

- [Stable Interfaces](https://banes-lab.com/records/architecture/stable-interfaces.md)
- [Low Coupling](https://banes-lab.com/records/architecture/low-coupling.md)

## Reinforces

- [Modularity](https://banes-lab.com/records/architecture/modularity.md)
- [Reusability](https://banes-lab.com/records/architecture/reusability.md)

## Enables

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

## Conflicts with

- [Monolithic Procedures](https://banes-lab.com/records/lexicon/monolithic-procedures.md)

## In tension with

- [Performance Overhead](https://banes-lab.com/records/lexicon/performance-overhead.md)

## Tensions

- [Composability / Performance Overhead](https://banes-lab.com/records/tension/composability-performance-overhead.md)

## Severity

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

## Category

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

## Reinforced by

- [Decorator Pattern](https://banes-lab.com/records/architecture/decorator-pattern.md)
- [Component-Based Architecture](https://banes-lab.com/records/architecture/component-based-architecture.md)
- [Pipes and Filters](https://banes-lab.com/records/architecture/pipes-and-filters.md)

## Linked from

- [Principles are typed](https://banes-lab.com/software-architecture/principles/principles-are-typed.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/principles/architecture-category-contracts-interfaces-compatibility.md)
- [Core Modular Design](https://banes-lab.com/ontology/principles/architecture-category-core-modular-design.md)
- [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/principles/architecture-category-solid-object-oriented-design.md)
- [Structural Patterns](https://banes-lab.com/ontology/principles/architecture-category-structural-patterns.md)
- [Streaming / Pipeline / Dataflow Processing](https://banes-lab.com/ontology/principles/architecture-category-streaming-pipeline-dataflow-processing.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 Modular Design](https://banes-lab.com/ontology/lexicon/lexicon-category-core-modular-design.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
