# Predictability

> The degree to which a caller can foresee what an operation does from its interface and contract.

Record: `architecture:predictability`
Kind: quality-attribute
Layer: [Computation Core](https://banes-lab.com/records/layer/computation-core.md)
Severity: recommended
Scope: API, module, runtime
Canonical: https://banes-lab.com/ontology#architecture-predictability

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Determinism](https://banes-lab.com/records/architecture/determinism.md) and before [Referential Transparency](https://banes-lab.com/records/architecture/referential-transparency.md).

## Repair

- Refactored by: Make Behavior Explicit, Add Contracts
- Detected by: nondeterministic tests, ambiguous APIs
- Violated by: surprising side effects, implicit ordering
- Measured by: flake/misuse rate
- Enforced by: [tests](https://banes-lab.com/records/lexicon/tests.md), [contracts](https://banes-lab.com/records/lexicon/contracts.md), linting

## Requires

- [Determinism](https://banes-lab.com/records/architecture/determinism.md)
- [Explicit Contracts](https://banes-lab.com/records/architecture/explicit-contracts.md)

## Reinforces

- [Principle of Least Surprise](https://banes-lab.com/records/architecture/principle-of-least-surprise.md)

## Enables

- [Safe Refactoring](https://banes-lab.com/records/lexicon/safe-refactoring.md)

## Conflicts with

- [Hidden Behavior](https://banes-lab.com/records/lexicon/hidden-behavior.md)

## In tension with

- [Dynamic Runtime Behavior](https://banes-lab.com/records/lexicon/dynamic-runtime-behavior.md)
- [Runtime Discovery](https://banes-lab.com/records/architecture/runtime-discovery.md)
- [Dynamic Binding](https://banes-lab.com/records/architecture/dynamic-binding.md)
- [Runtime Extensibility](https://banes-lab.com/records/architecture/runtime-extensibility.md)
- [Runtime Discovery / Predictability](https://banes-lab.com/records/tension/predictability-runtime-discovery.md)
- [Dynamic Binding / Predictability](https://banes-lab.com/records/tension/dynamic-binding-predictability.md)
- [Runtime Extensibility / Predictability](https://banes-lab.com/records/tension/predictability-runtime-extensibility.md)

## Tensions

- [Predictability / Dynamic Runtime Behavior](https://banes-lab.com/records/tension/dynamic-runtime-behavior-predictability.md)

## Severity

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

## Category

- [Correctness / Determinism / Verification](https://banes-lab.com/records/architecture-category/correctness-determinism-verification.md)

## Reinforced by

- [Design by Contract](https://banes-lab.com/records/architecture/design-by-contract.md)
- [API Contract](https://banes-lab.com/records/architecture/api-contract.md)
- [Postconditions](https://banes-lab.com/records/architecture/postconditions.md)
- [Immutability](https://banes-lab.com/records/architecture/immutability.md)
- [Repeatability](https://banes-lab.com/records/architecture/repeatability.md)
- [Pattern Consistency](https://banes-lab.com/records/architecture/pattern-consistency.md)
- [Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md)
- [Convention over Configuration](https://banes-lab.com/records/architecture/convention-over-configuration.md)
- [State Isolation](https://banes-lab.com/records/architecture/state-isolation.md)
- [Controlled Side Effects](https://banes-lab.com/records/architecture/controlled-side-effects.md)

## Linked from

- [One correct answer](https://banes-lab.com/disciplined-methodology/verify/one-correct-answer.md)
- [Scale follows determinism](https://banes-lab.com/software-architecture/scale/scale-follows-determinism.md)
- [Runtime Discovery / Dynamic Binding](https://banes-lab.com/ontology/principles/architecture-category-runtime-discovery-dynamic-binding.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/principles/architecture-category-contracts-interfaces-compatibility.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [Architecture Review / Evolution / Governance Artifacts](https://banes-lab.com/ontology/principles/architecture-category-architecture-review-evolution-governance-artifacts.md)
- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- [Transactions / State / Concurrency](https://banes-lab.com/ontology/principles/architecture-category-transactions-state-concurrency.md)
- [Core Vocabulary](https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/lexicon/lexicon-category-correctness-determinism-verification.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
