← All posts

Opinion AI

AI Pair Programming Is Great Until It Confidently Leads You the Wrong Way

AI pair programming accelerates your best decisions and your worst ones equally. The confidence gap is where it gets dan

Developer working with an AI interface on screen while through the window behind them a car sits visibly lost after a wrong turn

The best pair programming sessions I have had with a human involve a back-and-forth that is almost adversarial in the best sense. My pair challenges my assumptions. They ask why I am approaching something a particular way. They say "wait, have you considered..." at exactly the moment I need to hear it. They push back. That productive friction is a significant part of what makes pair programming valuable—not just the extra set of eyes, but the extra set of doubts. AI pair programming gives you most of the benefits of having a partner and almost none of that friction. The AI does not doubt you. It does not push back. It meets you where you are and accelerates in the direction you are already heading—including when that direction is wrong. And it does all of this with a fluency and confidence that makes the wrong direction feel exactly like the right one.

What AI pair programming actually does well

Before the critique, the honest accounting. AI pair programming tools are genuinely impressive at a real set of tasks, and pretending otherwise would undermine the argument I actually want to make.

They are excellent at reducing the friction of implementation. When the direction is clear and the problem is well-understood, an AI pair dramatically reduces the time between intention and working code. Boilerplate disappears. Syntax for unfamiliar APIs surfaces immediately. Test cases for known behavior generate in seconds. The mechanical parts of programming—the parts that require knowing syntax and patterns but not making hard decisions—compress significantly.

They are also surprisingly useful as a thinking tool when used deliberately. Asking an AI to enumerate the edge cases of a function, to suggest alternative approaches to a problem, or to explain what a piece of unfamiliar code does can accelerate understanding in ways that genuinely help. Used as a query interface for technical knowledge, the tools are often excellent.

The problem is not what the AI does in these cases. The problem is what it does when the premise is wrong, the direction is flawed, or the problem is not what it appears to be—and how indistinguishable that output is from the output it produces when everything is correct.

The confidence problem is structural, not a bug

Human pair programmers signal uncertainty. They hedge. They say "I think this is right but let's check." They slow down when they hit something unfamiliar. They ask questions when the requirements seem off. These signals are valuable because they prompt the other person to engage more critically at exactly the moments that warrant it.

AI coding assistants do not have uncertainty in any meaningful sense. They produce output at the same pace and with the same surface confidence regardless of whether they are on solid ground or generating plausible nonsense. A correct implementation of a well-understood algorithm and a subtly wrong implementation of a poorly specified one arrive with identical presentation: clean syntax, reasonable naming, code that compiles and often passes basic tests.

This is not a fixable bug. It is a structural feature of how these systems work. The model generates the most probable next token given the context. It does not have a confidence meter that drops when it enters unfamiliar territory. It does not know that the approach you are pursuing has a fundamental flaw. It knows how to produce code that looks like code that solves the kind of problem you appear to be describing. Those are related but not the same thing.

The result is a pairing dynamic that has no natural brake. A human pair slows you down when you need to slow down. An AI pair accelerates you continuously, including through the decisions that deserved more thought.

How confident wrong directions actually happen in practice

The failure mode is not usually dramatic. It does not look like the AI suggesting something obviously incorrect that a quick check would catch. It looks like this:

  • You have a slightly wrong mental model of the problem. The AI accepts your framing completely and builds on it. The code it generates is internally consistent with your wrong model. It compiles. It passes the tests you wrote against your wrong model. You ship it. The problem surfaces three weeks later when a user does something your mental model did not account for.
  • You are using the wrong tool for the job. You have decided to solve a caching problem with a particular approach and the AI helps you implement it thoroughly. A human pair might have asked whether the problem is actually a caching problem or whether the data access pattern is the real issue. The AI implements whatever you are implementing.
  • The approach has a subtle security flaw. The AI generates an authentication flow that looks correct and follows a common pattern. The common pattern has a known vulnerability in your specific context that the AI cannot know because the context requires understanding your system architecture, not just the function being written.
  • You are solving for the wrong constraint. You are optimizing for performance and the AI helps you optimize aggressively. The real constraint is maintainability, and the optimized solution is now significantly harder for anyone else to reason about. The AI did not ask which constraint mattered more because you did not ask it to.
  • The accumulated drift. No single suggestion is wrong. But each one slightly reinforces a direction that was a marginal choice to begin with. After an hour of AI-assisted development, you are deep into an implementation approach that was never explicitly chosen—it emerged from a series of individually reasonable suggestions that collectively led somewhere you would not have gone if you had stopped to design first.

The counterargument: this is a developer responsibility problem, not an AI problem

The pushback I expect here is fair: a skilled developer should be directing the AI, not following it. If you let an AI pair lead you in the wrong direction, that is a failure of your own judgment and critical thinking, not a flaw in the tool. The AI is a tool. You are responsible for how you use it.

I agree with the principle. I disagree that it fully accounts for what actually happens in practice.

The challenge is that maintaining critical distance from a confident, fluent, fast collaborator is cognitively expensive. Human beings are pattern-matching social creatures. When someone—or something—produces output that looks and reads as competent and authoritative, our critical faculties naturally relax. This is not laziness or professional failure. It is how cognition works under conditions of apparent competence. We reserve skepticism for signals of uncertainty. When those signals are absent, skepticism requires active, deliberate effort to sustain.

Sustained active skepticism over hours of development work is exhausting and it degrades. The developer who maintains rigorous critical evaluation of every AI suggestion at 9 a.m. is not maintaining the same rigor at 3 p.m. under deadline pressure. The tool's confidence does not change. The developer's capacity to resist it does.

Designing a workflow that depends on sustained human vigilance to offset a structural tool characteristic is not a robust workflow. It is a plan that works when conditions are ideal and fails when conditions are not—which is exactly the pattern that produces the incidents worth preventing.

What actually helps

The goal is not to stop using AI pair programming tools. The goal is to use them with an honest understanding of where the dynamic breaks down and to build habits that compensate for the specific failure mode of confident wrong direction:

Design before you generate

The most effective intervention is upstream. Before opening the AI tool, write down what you are building, why you are building it that way, and what the key constraints are. Even a rough paragraph. This forces you to form an independent position before the AI starts reinforcing whatever direction you happen to start in. It is much harder for an AI to lead you wrong when you arrived with a thought-out destination.

Ask the AI to challenge your approach explicitly

The AI will not spontaneously push back, but it will push back if you ask it to. "What are the weaknesses of this approach?" "What am I not considering here?" "What would you do differently and why?" These prompts turn the AI from a direction-follower into something closer to a genuine critic. The answers are not always right, but they create the friction that the default pairing mode completely lacks.

Treat unfamiliar fluency as a yellow flag

When the AI produces a confident solution to a problem you were not sure how to approach, resist the instinct to accept it because it arrived confidently. That is exactly the condition where wrong-direction risk is highest. The AI's fluency in territory you find difficult is not evidence of correctness—it is evidence that the model has seen similar-looking problems and is pattern-matching. That is worth verifying independently.

Build in deliberate pause points

Set a personal rule: after every significant chunk of AI-assisted development, stop and explain the current implementation out loud or in writing before continuing. If you cannot explain what the code does and why it was built this way, you have drifted further than you should have. This is the comprehension checkpoint that AI pair programming removes by default—reinstating it deliberately is the manual workaround for a structural gap.

Use human review for direction, AI for implementation

For decisions that matter—architectural choices, security boundaries, data model design—get human input before involving the AI in implementation. The AI is excellent at helping you implement a direction once it is decided. It is poor at telling you whether the direction was right to begin with. Sequence accordingly.

Where I land

I use AI pair programming tools regularly and I expect to keep using them. The productivity benefit on well-understood implementation work is real enough that working without them would be a genuine disadvantage. That is not the argument I am making.

The argument is that the pairing dynamic these tools create is fundamentally different from human pairing in a specific and important way: the AI's confidence is constant while a human pair's confidence is calibrated. That difference matters most when you are wrong, uncertain, or operating on flawed assumptions—which is exactly when the tool's constant confidence is most dangerous and least visible.

A good human pair makes you more right by making you less certain at the right moments. An AI pair makes you faster by making you more certain continuously. Those are not the same thing, and conflating them is how teams end up deep in the wrong implementation wondering how they got there.

Use the tools. Build in the friction they remove. The confidence is not wisdom—it is presentation. Knowing the difference is the whole job.