The Flow State That Isn't
Armin Ronacher has been programming for decades. He created Flask, one of the most popular Python web frameworks. He's not someone who gets fooled by productivity theater.
So when Ronacher described his two-month experiment with AI-assisted coding as something like "agent psychosis," it caught my attention. He wasn't complaining about code quality. He was describing something more fundamental: the experience of using AI coding tools had started to feel addictive in an unhealthy way.
This matches something gambling researchers have been studying for years. They call it "dark flow"—a state that looks like productive engagement but is actually closer to compulsion. Slot machines are designed to induce it. And AI coding tools, it turns out, have some of the same properties.
What Dark Flow Actually Is
Normal flow states—the kind Csikszentmihalyi wrote about—are characterized by deep engagement, clear goals, and a balance between challenge and skill. You lose track of time because you're genuinely absorbed in meaningful work.
Dark flow is different. You lose track of time, but the goals aren't clear. The challenge-skill balance is replaced by variable reinforcement: sometimes the AI gives you exactly what you need, sometimes it doesn't, and you can't predict which. You keep going not because you're making progress but because the next interaction might be the one that works.
Sound familiar? It's the same mechanism that makes slot machines compelling. The variable reward schedule keeps you engaged even when the aggregate outcome is negative.
The AI Coding Loop
Here's what the loop looks like in practice. You prompt the AI. It generates code. The code is close but not quite right. You adjust your prompt. It generates again. Still not quite. You try another approach. Sometimes it nails it on the next try. Sometimes it never gets there.
Each generation takes seconds. The feedback is immediate. The possibility that the next prompt will work perfectly is always there. And so you keep prompting, keep iterating, keep chasing the hit.
Three hours later, you've generated thousands of lines of code. Maybe some of it is useful. But the ratio of time spent to value created is worse than if you'd just written the code yourself. You were vibe coding—going through the motions of productive work without actually being productive.
Why Experienced Engineers Fall For It
You'd think experienced engineers would be immune. They know what productive work feels like. They have enough expertise to evaluate whether AI output is actually good.
But experience might actually make it worse. Experienced engineers know what good code looks like, which makes the AI's near-misses feel frustrating rather than acceptable. They know they could fix it themselves, but the AI is so close—maybe one more prompt will get it there. The expertise that should provide judgment instead feeds the optimization loop.
Ronacher described recognizing the pattern intellectually while still being caught in it. Knowing something is a trap doesn't always help you escape it.
The Productivity Illusion
Part of what makes vibe coding dangerous is that it feels productive. You're typing. Code is appearing. The screen is full of activity. All the surface-level signals of productive work are present.
Traditional procrastination is obvious: you're on Twitter, or watching YouTube, or doing anything other than work. Vibe coding hides in plain sight. You're in your editor. You're generating code. It looks like work. It feels like work. But the outcomes tell a different story.
This is the same trick slot machines use. The lights flash. The sounds play. The reels spin. There's constant activity, constant stimulation. The absence of meaningful progress is hidden behind the appearance of engagement.
What Teams Should Watch For
If you're managing engineers using AI coding tools, watch for these patterns:
High activity, low output. Lots of commits with lots of AI-generated code that gets refactored or reverted. The volume of generated code isn't correlating with shipped features.
Time on task without clarity. Engineers spending long stretches "working on" something but unable to articulate clear progress. Not blocked exactly, just... iterating.
Reluctance to step back. Resistance to pausing, planning, or approaching the problem differently. The feeling that the AI is "almost there" and giving up would waste all the work so far.
Exhaustion without accomplishment. Coming out of a coding session tired but without the satisfaction of having solved something. The fatigue of engagement without the reward of completion.
The Breaks That Help
The gambling literature suggests some interventions. Forced breaks interrupt the loop. Making the passage of time visible counters the time distortion. Setting explicit stopping conditions—"I'll try three more prompts, then step back"—creates decision points that pure flow eliminates.
For AI coding specifically: time-boxing sessions helps. Setting a timer and reviewing actual progress when it rings forces the evaluation that vibe coding avoids. Switching to manual coding periodically maintains the skill to recognize when AI assistance isn't actually helping.
Pair programming might help too. Having another person in the loop adds a perspective that the individual-AI interaction lacks. It's harder to fall into dark flow when someone else is watching and asking whether this is actually working.
The Tool Design Question
Some of this is on the tools. AI coding assistants are designed to be engaging. The instant responses, the confident suggestions, the seamless integration—these are features, not accidents. They make the tools pleasant to use. They also enable the dark flow pattern.
Could tools be designed differently? Could they add friction at points that tend to become unproductive loops? Could they track time and prompt the user to evaluate progress? Could they recognize patterns that suggest vibe coding and intervene?
Maybe. But the companies building these tools are also competing on engagement metrics. Tools that feel better to use will win over tools that interrupt you for your own good. The incentives point toward more addictive, not less.
Which means the responsibility falls to individuals and teams. Know the pattern. Watch for it. Build in the breaks and evaluations that the tools themselves won't provide.
Vibe coding feels like flow. It might be something else entirely. Knowing the difference matters.