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.
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.
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.
Not sure what to say to any of this, because it's not even really related to the article except to say the assumption is supposedly completely wrong. That doesn't make sense to me, because as soon as AWS or something important goes down everyone immediately blames vibe coding.
So which is it? Is process completely solved here ("just get gud"), or is coding with agents causing problems?
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.
"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.
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.
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.
That's _your_ definition of vibe coding.
If that's not "turning your brain off", what is?
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.
The property Scotsman is existing a priori and then a causality to behaviour is assumed. But here the term is defined by behaviour.
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.
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.
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.
Everything is happening quicker and we see it in real time.
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.
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.
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.
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.
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.
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?
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.
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.
"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.