How do we stop vibe coding?
Posted by prohobo 18 hours ago
Comments
Comment by throwaway6977 15 hours ago
I've never been more informed or understood more about my code, pipelines, and stack than now- and its 100% due to AI reasoning about my projects, and me making an effort to learn.
Comment by fidotron 14 hours ago
At least in my circle it's the classic leads/seniors (that predate the scrum "everyone's the same" thing) that are managing to get the most real mileage out of this.
Comment by azinman2 11 hours ago
I’ve noticed the pressure to keep velocity and move forward means I’m less sure of those details compared to before. LLMs are also inconsistent in the work they do - some of it is brilliant, other parts are idiotic. It’s totally different than what you’d get when leading humans.
Comment by fidotron 11 hours ago
"Trust but verify". This is why you have QA processes, testing, checklists etc. All the sanity checks that got thrown away in the web tech rush pre-AI.
Comment by azinman2 10 hours ago
Comment by fidotron 9 hours ago
But it's not a universal at all. You have to apply engineering thinking to human and LLM organization, and part of the damage caused by scrum has been to ignore this entirely. How can you produce a system where you can bound the output to be what is understood? It must be possible because managers all over the earth do it all the time.
Comment by 1718627440 15 hours ago
You have too, because that's the definition of vibe coding. If you use an LLM to assist you, but still keep your brain on, that's not vibe coding.
Comment by zeroxfe 14 hours ago
That's _your_ definition of vibe coding.
Comment by danlitt 14 hours ago
If that's not "turning your brain off", what is?
Comment by 1718627440 14 hours ago
Comment by freedomben 13 hours ago
Comment by jubilanti 15 hours ago
Comment by 1718627440 15 hours ago
The property Scotsman is existing a priori and then a causality to behaviour is assumed. But here the term is defined by behaviour.
Comment by pdpi 14 hours ago
Of course, you absolutely can build a No True Scotsman argument on top of that distinction, but I don't think that's what GP was doing.
Comment by danlitt 14 hours ago
Comment by alostpuppy 15 hours ago
Comment by pibaker 10 hours ago
Of course you can make a conscious effort to keep using your brain while you vibe code. But if you have to consciously exercise your brain then it means the people, who are lazy on average, will just not do that and let their thinking deteriorate instead. We already see what happens if we let students "learn with AI." It turned out they would rather just let AI do their homework than become more informed about their course material. I don't see how software engineering will fair any better.
Comment by stasomatic 4 hours ago
Everything is happening quicker and we see it in real time.
Comment by bentobean 14 hours ago
Would you mind clarifying if this includes code, pipelines, stacks, etc... on which many other people are simultaneously working on in a group setting? Or are these all things that you alone are working on as an individual?
My experience has been that AI makes me tremendously more productive as an individual working alone. Put 20 people (all empowered by AI) on a project however, and it quickly falls to shit.
Comment by waffletower 13 hours ago
Comment by cyanydeez 14 hours ago
Now, to actually get the AI to do anything complex, it's basically required to both write docs and write tests because solidifying behavior only works when there's AI tests it can run to verify some behavior I've verified once.
Then there's things I'm never going to remember the AI had to do; recenly it was "blitting" to /dev/fb0 and it was trying to remember which encoding was which and what order, etc. Things I simply do not want to have to get a detail account of nor is it something I need to remember above the statement "some video drivers have their own RGB, BGR encoding standards" and "an image has a bit depth and size" etc.
These things I would have learned doing it myself, but I would also had to learn where it all breaks and how to interoperate between pillow and video drivers, etc. If I ever do this again, i'll still point the LLM at it with or without this library, and it'll do the same abstract reasoning.
So my knowledge is compact because I don't need to know the implementation for this video display code; I just need the tests and docs and I'll point the LLM at it if I need to extend it.
Comment by svara 14 hours ago
For example, when studying maths or physics, it is very common to feel like you've understood everything, until you get to the exercises, and need to apply that understanding, and it's only then that you consolidate the knowledge and begin to truly understand in depth.
I like AI enhanced coding, but I do sometimes worry that we're not getting enough of that depth anymore.
Comment by scottLobster 13 hours ago
It's like using SparkNotes for classic novels, there's value in the friction of having to wrestle with the source material yourself. Whether that's more valuable than what the AI brings to the table I'm not sure yet.
Comment by _verandaguy 14 hours ago
Is it possible to use it in a more involved way? Certainly. I try to do that. But it's challenging, because ultimately even taking a more collaborative approach, this thing puts out a lot of slop, and then I have to deal with going over the output and just spending most of my day in code review mode vs an author that doesn't ever learn from feedback.
The most frustrating thing for me beyond the feedback black hole is that when things do inevitably go wrong, trying to point out the concrete issue and instructing the LLM to do better around it is challenging; a lot of the time directives (even those in a global CLAUDE.md!) are just ignored either outright or as the context grows, or fail to be passed down to subagents; negative prompts are discouraged because of the pink elephant effect, so I have to jump through hoops to try and frame a "never do $thing" constraint as an affirmative prompt (which is then often ignored). That aside, english is a godawful language for specifying things compared to programming languages. It's just a really frustrating experience overall.
Comment by johnpdoe1234 13 hours ago
However, I think you are missing that people are lazy. We all are to some extent, some more than others. Putting effort in doing something, well, takes effort. In my experience most people given the opportunity to do a mediocre job turning their brain off or an excellent job at the expense of great brain effort, they would take the former. And this is happening left, right and center now with LLMs.
And the skill atrophy is real, or at least, I am witnessing it real time on a bunch of coworkers.
I agree with you, you don't HAVE to turn your brain off and produce slop, but people do. And at scale, it diminishes greatly the impact of the self-improvement that you, or a minimal subset of developers are doing.
Comment by lelanthran 14 hours ago
No. There are multiple studies showing that skills atrophy is an actual thing. If your brain does not turn off while you are vibe-coding, keep it up and it soon will.
Comment by prohobo 15 hours ago
Actually, for more complex work I think it's pretty common to spend a long time crafting some elaborate prompt, and then arguing with the agent for 10-20 turns, getting a "passable" plan, accepting it then arguing with the agent every step of the way because it's doing it wrong. It's incredibly frustrating, even with models like Fable.
Even after that, I'll often find out during later sessions that some feature that was supposed to be deprecated was actually silently left in "because I wasn't sure you wanted it completely gone" or something.
I agree that exploring a codebase through prompts is actually quite nice! But the mental model you get from that is almost always warped - you have to supplement that with reading the code, where 9 times out of 10 you will find some kind of discrepancy that you're unhappy with.
Why not optimize that process?
Comment by HappySweeney 15 hours ago
Comment by resonious 14 hours ago
Splitting problems into smaller problems is huge. You want a concrete idea that you still own. Only tell an agent to do something you know it can nail - this will likely be one subsystem. The subsystems and how they talk is on you.
Comment by prohobo 14 hours ago
Comment by enraged_camel 12 hours ago
Then I have it write prompts for implementation agents based on the ticket. These agents are almost always Opus, except for the most complex issues. The prompts contain broader contextual details (like what other tickets might be worked on in parallel, the boundaries, operational/environment constraints, and so on). Each implementation agent starts in plan mode and uses a skill I created called "super plan". Super plan has the agent write the plan and then have it adversarially reviewed by three subagents, and hardened based on their feedback. I then read that plan and greelight it. Once the agent is done with the implementation, it then uses three subagents to do a code review of different aspects (like test quality, regression risk, security, etc.) and incorporate the changes. Then it does a live QA in the browser (if there are UI changes) to make sure the feature has good UX and the UI works as expected at different breakpoints and so on.
Then the Fable orchestrator does one last code review and gives a ship/no-ship verdict, along with a 1-10 rating.
This works incredibly well, and is almost completely hands off. I make all the major decisions and review the results. I never find myself "arguing" with the orchestrator. I might sometimes get frustrated at the implementation agent but that's mostly for UI fidelity issues and honestly pretty rare these days.
Comment by cfjhgeaxf 14 hours ago
Comment by lardosaurusrex 14 hours ago
"Vibe coding" to me and others is just going "claude program me a wife that didn't leave with the kids and make no mistakes" and just rawdogging the output.
but that's just me.
Comment by Towaway69 15 hours ago
I scanned the article, never made it to the bottom, didn’t find the point the author was trying to make.
Howabout just learning to code better as a human without using AI. Just like learning a craft. Just refuse to use AI. Not possible because of peer pressure? Well then stop worrying and continue to vibe.
Either stop or stop complaining but don’t make excuses or write long articles that ramble and rant … sorry but I don’t understand what’s so hard about stopping.
Comment by unknownfuture 1 hour ago
Its neither ranting nor rambling, nor is it complaining or making excuses. It pokes holes in common patterns around agentic coding (e.g. SDD, TDD, etc) and identifies two interesting new approaches, one which they're building.
The piece took ten minutes to read. Surely focus isn't that hard to come by.
Comment by boguscoder 14 hours ago
Comment by Towaway69 10 hours ago
You won't be able to sell your craft, correct. That means keep your day job. If your day job requires vibe coding, then that becomes your day job. If you don't like it, quit. Live on the street and by your moral beliefs. Or else, sell your soul.
That's the stark choice that plenty of folks have faced and will face. There is nothing special about being a coder anymore - welcome to the factory floor.
Comment by fernie 5 hours ago
That is every Thursday they write all their code without any AI assistant (not even the AI inline code suggestions).
Allows them to maintain their craft and keep their codebase human maintainable, while still benefitting from the productivity boost of SOTA AI agents.
Comment by krater23 14 hours ago
Comment by Towaway69 10 hours ago
Professionalism and being a professional means accepting the situation and getting on with the job.
After all, that's why folks get paid: to forget the pain of being stuck in a shit job, eight hours a day, fives days a week (if not more), until they're 65 - 9 to 5, to 65 - 925265, I use that as my passcode just to remind myself.
Comment by trjordan 15 hours ago
I'll add this link to the pile: https://martinfowler.com/articles/exploring-gen-ai/sdd-3-too...
> spec-kit created a LOT of markdown files for me to review. They were repetitive, both with each other, and with the code that already existed. Some contained code already. Overall they were just very verbose and tedious to review. [...] To be honest, I’d rather review code than all these markdown files.
The hardest part of any of this extraction is that modern code is already an extremely dense representation of how the computer should work. You mostly can't change the code without changing behavior.
I bet Scryer works for his use case, and it's a joy to dogfood. I also bet it fully breaks down the moment a 2nd developer, who cares about different things, joins the team.
Comment by Havoc 15 hours ago
That sentence is probably the key.
There is zero chance of this stopping overall.
Much like with artists 90% of the commercial stuff - copy/ads with generic guy in suit picture - will be AI that is "good enough".
Less concerned about the code quality and more the labour market dynamics. If this goes anything like translation & creative space did then there is going to be a brutal shakeup where competition for remaining "real" seats gets intense
Comment by stasomatic 4 hours ago
>That sentence is probably the key. >There is zero chance of this stopping overall.
End users don't care, nor they should. You do, but if you want to keep enjoying that part, it's art at that point. Many artists have day jobs.
Comment by bitexploder 15 hours ago
Comment by KronisLV 14 hours ago
I’ve been gradually moving test coverage up, updating packages with CVEs (even if in some cases it’s more like a migration), fixing more bugs, writing load testing solutions, fixing badly made architectural choices and recently even migrated a codebase away from Oracle onto PostgreSQL and figured out some pretty good settings for the DB itself with the aforementioned test tool. Oh and introduced Testcontainers to actually do proper DB tests.
None of this would have happened without agents that churn even while I sleep, but somehow that is still more work cause I have to iterate on their output a lot and come up with additional ProjectLint rules whenever something new comes up. It’s like burnout². Obviously I also bear the blame when the slop inevitably goes wrong despite efforts to keep it manageable, so maybe touching nothing would be better.
Comment by bitexploder 13 hours ago
Comment by jpease 10 hours ago
Comment by Hoodedcrow 14 hours ago
Eh, wouldn't be sure. Every time I see slop in such a context, it makes my day worse. And usually ensures I wouldn't go to that business, or at least unconsciously biases me against it.
Comment by Havoc 11 hours ago
Good enough is good enough
Comment by nadis 15 hours ago
Comment by prohobo 15 hours ago
Intent is more natural to us than code, for the same reason assembly is more natural than binary.
Comment by didroe 14 hours ago
I'd really like something that works more like pair programming. Where you share an editor session with the AI, and it's much more interactive. eg. It says "I'm thinking about doing X here, what do you think?". Then you give a response and it continues. Or you can see it doing something silly and immediately stop it and correct something either with a prompt or by manually editing yourself, before letting it rip again. Or just ask it "why are you doing it that way?". Maybe with some control over the speed it's going, for when you feel confident about what it's doing.
Claude has made some positive changes over time where it asks you more when there are different approaches it can take. But I feel like I'm not being brought along with my mental model as much as I would like. A lot of the time it spits out a whole pile of code and then I have to go and build up the mental model after the fact, and correct a lot of what it's done.
The current approach is good a lot of the time though, when you're not really changing anything architectural and just want it to bash out code while you do somehthing else.
Comment by thenatureboy 16 hours ago
Comment by encyclopedism 14 hours ago
"Hopefully, many developers will slowly rediscover their love for programming when they can apply it to problems that actually interest and challenge them"
Simply to not understand this dynamic. The economics will dictate what will happen and NOT much else.
Comment by asdff 12 hours ago
Comment by encyclopedism 12 hours ago
> There'd be middling salaries for developers across the country, and probably actually the bulk of the work would actually happen in say latvia or laos
Yes that's what happened and it's called offshoring. If you're in the US or Europe it happened to manufacturing too. It's in China for economic reasons. That doesn't mean there isn't any manufacturing going on in your country.
Comment by krater23 14 hours ago
Comment by jamal-kumar 15 hours ago
1. malware development
2. anything security tooling related
3. reliable assembly
4. reliable and somewhat more obscure programming languages like blockchain programming langs or distributed programming with elixir
I feel that https://maldevacademy.com has been keeping my skills relatively fresh, it's fun in the discord where sometimes we try using models to do this stuff and it just chokes
On the other hand I "vibe coded" (Although I've heard more nuanced distinctions in terminology here about doing it right rather than just letting it rip automatically or without much thought) a fairly large and profitable software project in about a month recently that would have probably taken me over three if I hadn't used claude.
In the end and as you mentioned, these things are just tools and if you're busy complaining about them rather than finding what they can't do yet and having a bit of fun with working within those limits, you might be able to find a good niche to make better use of your time and avoid the skill atrophy
Comment by prohobo 14 hours ago
For me as well, I do projects for clients that would have taken me months, and I deliver them in a fraction of the time. It's amazing and totally helped cure my burnout (which I had for over a year before I found Claude Code.)
Comment by js8 13 hours ago
I started on Pascal and C/C++. Then I moved to Python. It freed my mind from types, and I was able to think more high-level about the data structures.
After another decade and half, I discovered Haskell. Turns out the types were not the problem; the lack of proper type inference was.
So it turned out to be a usability issue of C/C++. Writing type explicitly everywhere is just bad UX.
My point is this. LLM's allow you to program and reason about code in a natural language. It clearly has some advantages over programming in traditional programming languages. But it has a significant disadvantage that natural language is not semantically sound. (And as a result, you get what people incorrectly call indeterminism of LLMs.)
I believe we need better programming language in which we can also express metalogical properties of programs, as if we expressed them in natural language, but with soundness guarantees. This new language would then become the new source code.
This language needs to have primitives for fuzzy and modal logic, and there need to be some algorithm that can typecheck (check if the statement is consistent) and type-infer (if the statement is inconsistent or ambigous, fill-in the likely parts, possibly interactively).
We know such a formal system must exists, because a very close variant of it has already been implemented (or discovered?) within LLM.
We essentially need to discover true metaprogramming - writing programs that manipulate programs. From Curry-Howard isomorphism, we know there is analogy between program execution and reasoning. So it is time to start using same language for both. (I am looking into using Triage Calculus for this.)
Comment by Supermancho 15 hours ago
I can instrument to observe the instructions being executed.
* Delegation
* Execution (better rules than rtk)
* Response
* Logging
When I want to turn off the printf style confirmations, manually editing saves the tokens. Using RFC 2119 (language) doesn't make a substantial difference. I'm in search of something better.
Comment by prohobo 14 hours ago
Comment by ethagnawl 14 hours ago
Speak for yourself. If anything is leading _me_ to burnout, it's this bullshit hype cycle.
Comment by encyclopedism 13 hours ago
With vibe coding that's out the window and a race to the bottom to remove as MUCH intellectual human input is at hand. To reiterate Human intellectual input is what AI is attempting to do away with or reduce as much as possible.
Comment by ethagnawl 13 hours ago
If I wind up stocking shelves at Tractor Supply, like I keep threatening to (because I have no interest in feeding bots with markdown), I'm sure I'll be in for a rude awakening.
Comment by encyclopedism 12 hours ago
Comment by kimjune01 10 hours ago
Comment by sgt101 13 hours ago
Comment by waffletower 13 hours ago
Comment by IAmGraydon 13 hours ago
That said, I don't understand why it seems like it has to be all or nothing. Just architect the software yourself and tell the LLM to modify small chunks of code that you understand. Or maybe not even small, but a body of code where you understand what it does and can understand what the LLM is changing. Don't tell it to implement a feature - tell it to implement a function. If you can't do this, then you're a wannabe who's using LLMs to LARP as an actual programmer.
Comment by ingvay7 15 hours ago
Comment by prohobo 18 hours ago
Comment by greenoracle9 15 hours ago
Comment by arisAlexis 15 hours ago
Comment by ls-a 15 hours ago
Comment by encyclopedism 13 hours ago
How can the immense investment in AI pay off? AI is doing away with human intellectual input.
There are 25 million developers globally, AI efficiency may mean in the future we need only 15 million. That 10 million saving is the return on investment. Those 10 million developers aren't adapting sorry.
Comment by Supermancho 15 hours ago
This is a reaction to the title, by someone who did not read the article.
Comment by ActionHank 15 hours ago