Feature teams move slower than they should. What takes a week could take a day. Simple changes somehow break unrelated things. New hires need months to become useful.
This isn't a people problem. It's a systems problem.
The root cause is excessive cognitive load. It's the mental weight developers carry to understand your code, your patterns, and your unique way of doing things. This load is the silent killer of velocity and quality.
Most advice on this focuses on cleaning up code. That's only a third of the battle. You can't just fix the symptoms. You need a strategy to fix the environment.
This article gives you that strategy. First, we'll unpack the complete cognitive load framework. Then, we'll reveal the most powerful tool to reduce it: engineering for inductive reasoning.
Your goal is to build a system where the right way to do things is the easiest way to discover. This is how you turn a team of good engineers into a high-performance engine.
Understanding Cognitive Load (Completely)
If you’ve read Cognitive Load Is What Matters on Github, then you’re already ahead of the curve. This is a great primer but only covers two types of mental overhead.
In software, we deal with three specific types of load. You must understand all three to fix the problem.
Here’s a more complete overview of how mental overhead is categorized according to cognitive load theory:
Intrinsic
Overhead associated directly with a topic- i.e. the code, the problem, the business logic, and so on. Essentially, this is what comes to mind when we think of complexity. Spaghetti code overloads working memory, making it more difficult to do our work.Germane
Overhead required to create a permanent store of knowledge or “schema”. In cognitive psychology, a schema is a mental model of how everything fits together. Thus, germane overhead is the effort required to build up recognition- which works faster than recall.Extraneous
Overhead added by how information is presented. It comes from how we write and document code, not what the code does. It's the mental energy spent deciphering a bad variable name or untangling a nested conditional.
Germane overhead is about building recognition but it’s rooted in the perceiver’s level of effort, whereas intrinsic overhead is about information itself and extraneous overhead is about its source.
These three types of mental overhead are not separate. They work together.
A complex task (high intrinsic load) becomes impossible when buried in messy code (high extraneous load). Both are made worse if the system itself becomes a niche skill that new hires must master (high germane load).
Your job is to manage the entire system. Ignoring one type just shifts the burden elsewhere. You need a tool that addresses all three at once.
Keep reading with a 7-day free trial
Subscribe to UI Engineering Excellence to keep reading this post and get 7 days of free access to the full post archives.