DEV Community

Cover image for You Don't Have an AI Problem You Have a Thinking Problem.
Harsh
Harsh

Posted on

You Don't Have an AI Problem You Have a Thinking Problem.

The hidden danger of accepting quick AI patches

I used to think AI was making me lazy. I was wrong. AI wasn't making me lazy I was using AI as an excuse not to think.

And once I noticed it, I started seeing the same pattern everywhere - in my own code, in PRs I reviewed, in Slack messages that said "AI said this should work" like that was the end of the conversation.

So let me ask you the same question I had to ask myself: When you hit a hard problem, what's your first instinct?

Do you think? Or do you open your AI assistant?

Be honest. Nobody's watching. That one-second decision might tell you more about your current development habits than your GitHub streak ever will.


I Noticed Something Weird

A few months ago, I was working on a Node.js backend API. One of the endpoints kept returning a response with a field coming back as null not always, just often enough to be annoying and hard to pin down.

A year ago, I would've spent the next 30–60 minutes:

  • rereading the endpoint and the code around it
  • checking where that field was supposed to get populated
  • tracing the request from top to bottom
  • trying something
  • breaking it
  • fixing it
  • finally getting it

Instead, I opened my AI assistant and described the bug: the field was null in the response even though the data existed in the database.

It suggested a fix a missing await in the chain, so the field was being read before the value it depended on had actually resolved. I applied it.

The field stopped being null.

That should have felt like a win. It didn't.

The fix worked, but when I tried to explain why it worked why that particular await mattered, what exactly was racing against what - I couldn't. I had a working endpoint and a gap where my understanding should have been.

That's the moment this whole article came from.


We've Made Thinking Optional

Here's the workflow many of us learned to follow before AI became part of everyday development:

Problem → Confusion → Research → Hypothesis → Experiment → Failure → Understanding → Solution
Enter fullscreen mode Exit fullscreen mode

And here's the workflow that's becoming increasingly common:

Problem → Prompt → Answer → Copy → Done
Enter fullscreen mode Exit fullscreen mode

The second one can be dramatically faster. And that's exactly why it's so tempting.

But the first one is where the learning used to happen. Confusion wasn't a bug in the process it was the process. Struggle wasn't wasted time. It was the mechanism.

So let me be precise about what the actual problem is, because it's not what most people think:

The problem isn't that AI gives us answers. The problem is that we're getting answers before we've had the chance to form our own questions.

Read that again. That's the whole article in one line.


Thinking Isn't Staring at a Blank Editor

When people say "just think about the problem," it sounds vague. It isn't. For developers, thinking is a specific, learnable set of moves:

  • breaking a problem into smaller pieces
  • forming a hypothesis before testing it
  • predicting how the system should behave
  • understanding constraints before proposing solutions
  • weighing trade-offs, not just outcomes
  • questioning your own assumptions while debugging
  • asking "why does this exist?" before asking "how do I fix it?"
  • deciding what should not be built

Writing code is only a small slice of software development. The harder, more valuable part is deciding what code should exist in the first place and that part doesn't show up in a prompt box.


The Scariest AI Answer Is a Correct One

Here's the part nobody talks about enough.

A wrong answer is easier to notice. It breaks, you investigate, and you learn something while fixing it.

A correct answer, you trust. And trust is exactly where thinking quietly checks out.

When we use AI passively, the workflow can become:

Problem → Solution
Enter fullscreen mode Exit fullscreen mode

What it skips, unless you force it, is this:

Problem → Why? → Constraints? → Alternatives? → Trade-offs? → Solution
Enter fullscreen mode Exit fullscreen mode

A correct answer can hide a missing mental model. You walk away with working code and a gap in understanding that won't show up until three months later, in production, at 2 a.m., when the "why" finally matters and you don't have it.


The Experiment: Paying the Thinking Tax on Purpose

So I tried something different. A self-imposed "thinking tax" before I was allowed to open the AI assistant.

Rule 1 - For most non-trivial problems, spend a few minutes thinking about them before reaching for AI. (Obviously this doesn't apply to a production incident at 2 a.m. this is for the everyday problems, not the fires.)

Rule 2 - Write down my hypothesis before asking AI anything.

Rule 3 - When AI gives an answer, stop asking "Is this correct?" Start asking:

"What did I miss?"

Rule 4 - Ask for three alternatives, not one solution.

Rule 5 - Explain the final solution back in my own words, out loud, like I was teaching it to someone.

The interesting part wasn't that I solved fewer problems without AI. It was that by the time I actually opened the AI assistant, my questions were sharper. I wasn't asking it to think for me anymore. I was asking it to check my thinking.

That's the real shift: AI as answer machine → AI as thinking partner.


The THINK Method

If you want something more repeatable than "just be more mindful" (which, let's be honest, nobody sticks to), here's the framework that came out of that experiment.

Before asking AI, THINK:

  • T - Try First. Give it a few minutes of genuine effort before reaching for help.
  • H - Hypothesize. Write down what you think is happening, even if you're probably wrong.
  • I - Identify Constraints. What can change here, and what can't?
  • N - Need a Second Opinion. Now bring in AI.
  • K - Know Why. Don't accept the answer until you can explain it without the AI in the room.

The goal isn't to avoid AI. The goal is to make sure you have a mental model before AI hands you one.

The difference this makes shows up in the prompt itself.

Instead of:

Fix this bug - the field is coming back null.

You end up asking:

I think this field is null because it's being read before the value it depends on has resolved possibly a missing await somewhere in the chain. Here's my reasoning what am I missing?

Same bug. Completely different developer on the other end of that prompt.


Passive AI vs. Thinking AI

Passive AI Thinking AI
"Build this for me." "Here's my approach. Challenge it."
"Fix this bug." "Here's my hypothesis. What am I missing?"
"Write the architecture." "Compare these approaches and their trade-offs."
"Explain this code." "I'll explain it — tell me what I missed."
"Give me the answer." "Help me evaluate the options."

The difference isn't whether you use AI. It's how much thinking you hand over to it.

The difference is who's doing the thinking.


The Best AI Users Aren't the Best Prompters

A lot of the AI conversation is about learning better prompt engineering. I think we're sometimes aiming at the wrong target.

The best AI users aren't necessarily the people who know the cleverest prompt structures. They're the people who know which questions are worth asking in the first place.

That's not a prompting skill. That's domain knowledge wearing a prompt as a disguise.

Domain knowledge → better questions → better AI output.

Without domain knowledge, it goes the other way: AI output → looks impressive → gets accepted without scrutiny, because you don't know enough to scrutinize it.


What Happens to Developers Who Stop Thinking

This isn't a fearmongering "AI will replace you" section. It's slower and quieter than that.

Stage 1 - AI helps you move faster. Genuinely great.

Stage 2 - You start asking AI first, by default, before you've even tried to frame the problem yourself.

Stage 3 - You may stop exploring alternatives. Why would you the first answer worked.

Stage 4 - You start depending on generated solutions to think for you, rather than using them to challenge your own thinking.

Stage 5 - You can still produce plenty of code. But you may struggle to explain why it exists, why it's structured that way, or what would break if a constraint changed.

That's not an AI skill problem.

That's a dependency problem.


I'm Not Going Back

I want to be clear about something, because it's easy to read all of this as anti-AI. It isn't.

I'm not going back to writing everything manually. AI is too useful for that, and pretending otherwise would just be performative.

I still use it constantly for boilerplate, debugging, tests, documentation, refactoring, brainstorming, generating alternative implementations, and exploring APIs I've never touched before.

But I changed one thing:

I don't want AI to be the first thing that thinks about my problem.

I want to be.


Maybe the Future Isn't Prompt Engineering

Here's where I think the industry conversation is slightly off.

The valuable skill stack isn't:

AI + 100 clever prompts
Enter fullscreen mode Exit fullscreen mode

It's:

Domain Knowledge + Critical Thinking + Problem Decomposition + AI + Judgment
Enter fullscreen mode Exit fullscreen mode

AI makes generating many possible solutions dramatically cheaper and faster. That's exactly what makes knowing which solution to choose, and why, more valuable.

When generating answers becomes cheap, knowing which answer to trust becomes more valuable.

The less expensive code generation becomes, the more valuable technical judgment becomes.


Your Big Takeaway

Don't compete with AI on raw code generation. That's a race you don't need to win.

Compete with yourself at asking better questions.

Let AI write the boring code. Let it generate the alternatives. Let it find the edge cases. Let it challenge your assumptions.

But don't outsource the one part that actually makes you a developer:

judgment.


So, Did You Solve It - Or Did You Just Approve It?

Here's the question I've been sitting with lately:

When AI solves a problem for you, did you actually solve it?

Or did you just approve the solution?

Maybe the biggest AI skill isn't prompting after all.

Maybe it's knowing when not to prompt yet.

You don't have an AI problem.

You have a thinking problem.

And I'm still learning how to solve mine.


Let's talk

When you get stuck on a coding problem, what's your first move?

  • A) Think and debug
  • B) Search docs/Google
  • C) Ask AI
  • D) Depends on the problem

If AI is usually your first move, has it ever made you realize you understood the problem less than you thought?

I'm genuinely curious.


I write about AI, software development, and how new tools are changing the way developers think and work.

If you're thinking about the same questions, follow me here on DEV. I'm less interested in predicting whether AI will replace developers and more interested in figuring out what developers need to become next.

Top comments (38)

Collapse
 
bhavin-allinonetools profile image
Bhavin Sheth

The “thinking tax” idea really resonates. I’ve found AI works much better when I first form a hypothesis and then use it to challenge my reasoning instead of just accepting the first fix.

Collapse
 
neithergalax profile image
neitherGalax

Great read. And this post makes me rethink about the use of AI. We are continuously figuring out how to best use of this new tool. When I am working on my project, I always have a bunch of docs opened so that I can look things up and verify.

Collapse
 
dannwaneri profile image
Daniel Nwaneri

Harsh, the missing-await story hit close. I've had that exact moment building RAG pipelines, a fix that works but I can't explain the race behind it until I actually trace it myself.

Your THINK method is basically what I do without a name for it: hypothesis first, AI to check it rather than generate it.

Rule 5 is the one I skip most tho. explaining it out loud. Do you actually do that step or does writing the hypothesis down count as enough for you?

Collapse
 
harsh2644 profile image
Harsh

Thansk Daniel For me writing the hypothesis down is only the starting point. I verify the fix by explaining it back to myself in plain language what happened, why it happened, and why the fix addresses the root cause. If I can't explain it without reopening the AI's answer I don't consider the debugging finished.

That's really what I meant by Rule 5: a working fix isn't necessarily an understood fix. Your RAG example is a great illustration of that gap.

Collapse
 
deanlee profile image
Dean Lee

I like the distinction between getting an answer and keeping the debugging muscle. The expensive failure mode is accepting a patch before you can explain the causal chain. My rule is simple. If I cannot restate the fix without the assistant open, I have not finished the work.

Collapse
 
harsh2644 profile image
Harsh

Exactly I can’t explain the fix without the assistant open is such a good test for whether we actually understood the solution. Getting the code to work is one thing; being able to reconstruct the reasoning behind it is another. Thanks for putting that so clearly.

Collapse
 
syedmuhammadaliraza profile image
Syed Muhammad Ali Raza

This is a great perspective. AI can make us faster, but speed without understanding can create a dangerous illusion of competence. I especially like the shift from AI as an answer machine to AI as a thinking partner. The real skill isn't knowing how to get AI to write more code it's knowing what to ask, why you're asking it, and whether the answer actually makes sense.

Collapse
 
harsh2644 profile image
Harsh

Absolutely. AI as a thinking partner is exactly the shift I was trying to describe. Bring the hypothesis and context first, then use AI to challenge it, explore alternatives, and expose gaps not simply to hand over the reasoning. Speed matters but only when we can still judge whether the answer makes sense.

Collapse
 
eduzsh profile image
Edu Peralta

The scariest case with coding agents is the one you name: a correct answer you cannot explain. A missing await that makes a field stop being null is the easy version. The harder one is a multi file change that compiles, tests pass, and still rewires an invariant you only catch when you force yourself to read the diff instead of trusting the summary. Your Rule 3 is the one I keep. I treat every agent solution as a hypothesis to attack, not a finished answer to accept.

Collapse
 
harsh2644 profile image
Harsh

This is exactly the failure mode I was trying to get at with the correct answer section. A clean compile and passing tests can give you a lot of confidence while still hiding a broken assumption somewhere in the system.

I really like your framing of every agent solution as a hypothesis to attack. That also changes how you read the diff you're not just checking whether the code works, you're actively looking for what assumption the change might have violated. That's a much stronger review loop than trusting the summary.

Collapse
 
mansio profile image
Mikhail

"Great insight. I empirically tested this recently while building an MCP server for AI agents. When the agent's memory was contaminated with false facts, the model didn't 'think' to correct it—it confidently hallucinated. The fix wasn't a better prompt; it was building a deterministic 'Verify-On-Read' layer (a mechanical constraint) to challenge the AI's semantic claims against the live codebase. You can't solve a thinking problem with just more tokens; you need architectural guardrails."

Collapse
 
solvecomputerscience profile image
Solve Computer Science

Thanks for the post! In my case it depends on the problem: sometimes the LLM is just a brainstormer/search engine to discover new things, other times it's a huge source of frustration when things don't work out (going back and forth the chat) essentially while vibe coding snippets. In this last case I just go back to the "DIY" method and it works out, since the AI already excluded some of the wrong answers. The method you describe should make things surely more productive.

Remember that these chat platforms are also built for retention, so answers could be made partially wrong on purpose, not mentioning constant sycophancy.

Collapse
 
wrobeltomasz profile image
Tomasz

I'd like to add that it's helpful for the AI agent to always briefly explain what it did and why it did it that way. I know from experience that you can quickly learn many interesting solutions simply by reading the AI agent's response on how to do something.

Collapse
 
codingwithjiro profile image
Elmar Chavez

Beautifully written @harsh2644. It's funny that the only solution for developer skill atrophy is going back to the tried and tested. Struggle, discipline, and understanding. There's a reason why failure is the greatest teacher of all. It forces you to think of a solution yourself. That makes you better everyday.

I'm also not entirely against AI. I use it too for boilerplate and code that I have done multiple times and code that I could explain with my eyes closed. But what I'm against are engineers pretending they know every AI generated solution and treating it as the final answer. That's a one-way ticket to skill regression.

AI is supposed to be a tool that help you expand what you already know. It should help you understand it. If something is suggested, go try it, fail, and try again until you know it through and through. But if you end up not understanding a thing but approving the changes anyway, then are you still considered an engineer or an zombie accepting bot for AI. That's something to think about.

Collapse
 
harsh2644 profile image
Harsh

This is a really important distinction. I don't think the answer is to bring back struggle for the sake of struggle either. The valuable part of the struggle is the understanding you build while working through the problem.

I especially like your point about treating an AI-generated solution as the final answer. That's where the real risk is for me too. AI can expand what we know, but if we can't explain, test, or challenge what it gives us, we're not really building the mental model we're just accepting the output.

Try it, fail and try again until you know it through and through is a great addition to the Think idea.

Some comments may only be visible to logged-in visitors. Sign in to view all comments.