# Precondition Check

> A technique for checking at the start of an operation that the state and arguments it requires hold.

Record: `lexicon:precondition-check`
Kind: technique
Layer: [Computation Core](https://banes-lab.com/records/layer/computation-core.md)
Canonical: https://banes-lab.com/ontology/lexicon#lexicon-precondition-check

Listed in [Lexicon terms](https://banes-lab.com/api/records/lexicon.md), after [Validate as a Group](https://banes-lab.com/records/lexicon/validate-as-a-group.md) and before [Invariant Check](https://banes-lab.com/records/lexicon/invariant-check.md).

## Category

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

## Refactors

- [Implicit Contract](https://banes-lab.com/records/architecture/implicit-contract.md)
- [Temporal Coupling](https://banes-lab.com/records/architecture/temporal-coupling.md)
- [Exception Control Flow](https://banes-lab.com/records/architecture/exception-control-flow.md)
- [Manual Runbook Dependency](https://banes-lab.com/records/architecture/manual-runbook-dependency.md)
- [Design by Contract](https://banes-lab.com/records/architecture/design-by-contract.md)
- [Preconditions](https://banes-lab.com/records/architecture/preconditions.md)
- [Defensive Programming](https://banes-lab.com/records/architecture/defensive-programming.md)
- [Fail Fast](https://banes-lab.com/records/architecture/fail-fast.md)

## Linked from

- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/principles/architecture-category-contracts-interfaces-compatibility.md)
- [Error Handling / Resilience](https://banes-lab.com/ontology/principles/architecture-category-error-handling-resilience.md)
