The Dunning-Kruger Effect: How Agile Practices Build Real Technical Expertise
In 1999, psychologists David Dunning and Justin Kruger published research showing that people with limited knowledge in a domain systematically overestimate their own competence. The less you know, the more confident you tend to be. The effect has a flip side that gets less attention: genuine experts tend to underestimate their ability because they’re most aware of what they don’t know.
In software development, this pattern maps almost exactly onto the arc of a technical career. Understanding it is useful. Building practices that counteract it is more useful.
The Career Arc
Six months into a software career, some developers feel like they have it figured out. They can build CRUD applications. They understand MVC. They know how to use the framework. How hard can the rest of it be?
Two years in, after a few production incidents, one failed architecture decision, one codebase that made sense at small scale and fell apart at large scale, one integration that was documented incorrectly, and one deployment that turned out to be more complex than anyone expected, the developer has a more accurate picture. The field is vast. The things they don’t know are more numerous than the things they do. Confidence drops. This is the correct response.
Several years in, with a track record of shipping things that work, debugging problems in unfamiliar systems, and navigating architectural tradeoffs under real constraints, confidence starts to recover. This time it’s grounded in actual experience.
The problem is that the journey from confident-but-wrong to humble-and-learning is uncomfortable, and organizations don’t always create the conditions that make it productive.
What Pair Programming Does
Pair programming is one of the most direct Agile responses to the Dunning-Kruger dynamic. When two developers work together on the same code simultaneously, the less experienced developer sees how an experienced one approaches problems in real time.
The experienced developer narrates decisions. The less experienced developer asks questions. Both of them catch things the other would have missed. The code is better. More importantly, the learning is continuous and contextual rather than abstract and delayed.
Research on pair programming consistently shows that it produces better code with fewer defects, and that the productivity cost of having two people on one task is smaller than it appears because fewer bugs make it to production. The learning transfer is a secondary benefit, but a significant one.
Mob Programming for Shared Standards
Mob programming, where the entire team works together on the same problem at the same time, takes pairing further. It’s particularly effective for establishing shared patterns and standards.
When the whole team participates in solving a hard problem or building a new feature, the solution reflects the entire team’s understanding. Nobody is working from a mental model of the system that differs significantly from everyone else’s. Dunning-Kruger overconfidence gets corrected naturally because the person who thinks they understand something well gets immediate feedback from multiple teammates when they don’t.
Most teams can’t do mob programming all the time. But using it strategically, for particularly complex work or for establishing new patterns, builds shared understanding that persists.
Retrospectives as Calibration
The sprint retrospective is Agile’s built-in mechanism for continuous calibration. Done well, it creates space for developers at every experience level to surface what they don’t understand, what surprised them, and what they want to learn more about.
This only works when psychological safety is present. If the retrospective is a performance evaluation in disguise, experienced developers stay quiet and junior developers learn to perform confidence rather than build competence.
When the retrospective functions as a genuine learning conversation, it’s one of the most powerful tools a team has. The team regularly examines the gap between what it expected to happen and what actually happened. That gap is where learning lives.
Safe-to-Fail Experiments
LEAN and Agile both advocate for experimentation as a mode of learning. The concept of a safe-to-fail experiment acknowledges that you can’t always know what will work without trying it. The experiment is bounded in time and scope. The goal isn’t to be right. The goal is to learn something.
This is a direct counter to Dunning-Kruger overconfidence. Instead of committing to an approach because you’re confident it will work, you test the approach in a constrained environment and see what happens. The feedback is real and arrives quickly. Overconfidence doesn’t survive contact with real data.
Continuous Delivery enables this at the system level. Deploying frequently, getting feedback from real users quickly, and iterating based on that feedback is the organizational equivalent of running continuous safe-to-fail experiments. The teams that improve fastest are the ones with the shortest feedback loops.
The Value of “I Don’t Know”
One of the most important cultural signals a senior developer or technical leader can give their team is comfort with uncertainty. Saying “I don’t know, let’s find out” in public normalizes intellectual humility. It makes it safer for junior developers to admit uncertainty rather than guessing and proceeding.
This matters because confident wrong answers in software development are expensive. A junior developer who is certain they know how a third-party API behaves and doesn’t verify ends up debugging a production issue. A senior developer who models checking their assumptions first, even on things they think they know, sets a standard the whole team can follow.
Dunning-Kruger isn’t a personal failing. It’s a predictable outcome of limited experience. Agile practices that create rapid feedback, shared learning, and psychological safety are the organizational response that transforms it from a liability into a signal for growth.
Want to build a team culture where continuous learning drives better software? Let’s talk.

