Every decision a developer has to make that isn't about their application's business logic is a cognitive load tax. It consumes mental energy, introduces risk, and slows delivery.
Cognitive load in software development comes in three forms:
- Intrinsic load: The inherent complexity of the problem being solved (e.g., implementing a payment processing algorithm). This is unavoidable and valuable — it's the actual work.
- Extraneous load: Complexity imposed by the environment or tools (e.g., figuring out which Kubernetes API version to use, or why the CI pipeline is failing due to a misconfigured service account). This is waste.
- Germane load: The mental effort of building mental models and learning. This is valuable when it's about the domain, not the infrastructure.
A platform's job is to eliminate extraneous cognitive load so developers can direct their full attention to intrinsic and germane load — the work that actually creates value.
Measuring Cognitive Load in Practice
You can't directly measure cognitive load, but you can measure its symptoms:
| Symptom | What it signals |
|---|---|
| Developers frequently ask "how do I deploy X?" | The deployment abstraction is too complex or undiscoverable |
| High volume of platform support tickets | Abstractions are leaking without escape hatches |
| Teams building their own tooling that duplicates platform features | The platform API doesn't match developer mental models |
| Long onboarding time for new engineers | Too much infrastructure knowledge required before being productive |
| Developers copy-pasting YAML from other repos | No Golden Path; tribal knowledge is the abstraction |
The Team Topologies Connection
The concept of cognitive load as a design constraint is central to Team Topologies (Skelton & Pais, 2019), which argues that team structure and platform design should be explicitly optimized to keep cognitive load within manageable bounds for each team. A stream-aligned team (one focused on delivering a product or service) should not carry the cognitive load of platform operations. That load belongs to the platform team — and the platform's abstractions are the mechanism for transferring it.