# Interchangeability

Record: `arch:interchangeability`
Kind: quality-attribute
Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)
Severity: recommended
Scope: component, plugin, service
Canonical: https://banes-lab.com/ontology#arch-interchangeability

## Repair

- Refactored by: Normalize Interface, Add Adapter, Align Contract
- Detected by: contract test failure, incompatible schema
- Violated by: non-conforming substitutes
- Measured by: conformance score, compatibility tests
- Enforced by: contract tests, [schema validation](https://banes-lab.com/records/arch/schema-validation.md)

## requires

- [Contract Compatibility](https://banes-lab.com/records/lex/contract-compatibility.md)
- [Interface Conformance](https://banes-lab.com/records/lex/interface-conformance.md)

## reinforces

- [Replaceability](https://banes-lab.com/records/arch/replaceability.md)
- [Polymorphism](https://banes-lab.com/records/arch/polymorphism.md)

## enables

- [Strategy Swap](https://banes-lab.com/records/lex/strategy-swap.md)
- [Plugin Swap](https://banes-lab.com/records/lex/plugin-swap.md)

## conflicts-with

- [Implementation-Specific Contracts](https://banes-lab.com/records/lex/implementation-specific-contracts.md)

## tensions-with

- [Specialized Optimization](https://banes-lab.com/records/lex/specialized-optimization.md)

## tensions

- [Interchangeability Specialized Optimization](https://banes-lab.com/records/tension/interchangeability-specialized-optimization.md)

## referenced-by

- [Abstract Factory Pattern](https://banes-lab.com/records/arch/abstract-factory-pattern.md)
- [Polymorphism](https://banes-lab.com/records/arch/polymorphism.md)
