# Controlled Side Effects

> A design rule that mutation, I/O and persistence happen at declared boundaries, around a core of pure functions.

Record: `architecture:controlled-side-effects`
Kind: principle
Layer: [Atomic Boundary](https://banes-lab.com/records/layer/atomic-boundary.md)
Severity: recommended
Scope: function, module, boundary
Canonical: https://banes-lab.com/ontology#architecture-controlled-side-effects

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [State Isolation](https://banes-lab.com/records/architecture/state-isolation.md) and before [Petri Nets](https://banes-lab.com/records/architecture/petri-nets.md).

## Repair

- Refactored by: Move Side Effect to Boundary, Return Command/Event
- Detected by: side effects in domain/pure functions
- Violated by: mutation/network/persistence hidden in pure-looking code
- Measured by: side-effect boundary violations
- Enforced by: effect linting, layer rules

## Requires

- [Effect Boundaries](https://banes-lab.com/records/lexicon/effect-boundaries.md)

## Reinforces

- [Predictability](https://banes-lab.com/records/architecture/predictability.md)
- [Testability](https://banes-lab.com/records/architecture/testability.md)

## Enables

- [Pure Core / Imperative Shell](https://banes-lab.com/records/lexicon/pure-core-imperative-shell.md)

## Conflicts with

- [Hidden Side Effect](https://banes-lab.com/records/architecture/hidden-side-effect.md)
- [Action at a Distance](https://banes-lab.com/records/architecture/action-at-a-distance.md)

## In tension with

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

## Tensions

- [Controlled Side Effects / Performance Optimization](https://banes-lab.com/records/tension/controlled-side-effects-performance-optimization.md)

## Contracts

- [Execution Core](https://banes-lab.com/records/algorithms/execution-core.md)

## Severity

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

## Category

- [Transactions / State / Concurrency](https://banes-lab.com/records/architecture-category/transactions-state-concurrency.md)

## Linked from

- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [Transactions / State / Concurrency](https://banes-lab.com/ontology/lexicon/lexicon-category-transactions-state-concurrency.md)
- [Architectural Clusters](https://banes-lab.com/ontology/algorithms/algorithms-domain-architectural-clusters.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
