Controllability is how easily testers can put a system into the state they need for a test. Alongside observability, it's one of the two main parts of testability.
Why it matters: If a system is hard to control, tests become slow, fragile or impossible. Raising controllability early, in design conversations, makes later testing far easier and cheaper.
In practice: Testers ask how they'll trigger each state a test needs, such as an error from a third-party service, a particular user setup or a data condition. Teams build in controls like test hooks, configuration switches and mocks to make those states reachable.
Examples:
- Asking for a way to trigger a third-party service error on demand in a test environment.
- Using a mock to reliably put the system into an error state.
Common pitfalls:
- Raising controllability only after the system is built, when changes cost more.
- Relying on fragile workarounds, like manually editing data, to reach a state.
What's the difference between controllability and observability? Controllability is how easily you can put a system into a state. Observability is how easily you can see what the system is doing once it's there.