The issue with this is that code is the final form of specs, but fit for machine execution. Coding is mostly f(a, b, c, d, e, …) where all the variables are specifications. Iterating on specs is tweaking individual variables. You’re still missing the broader interactions between them, and sometimes, the formula itself changes (discarding some variables and getting new ones). And as soon as you hit production, the function is recursive (code is part of the things to take into account)
So, specs is more like an historical archive of decisions taken. I prefer to take a change request (ticket) transform it into a list of requirements, then apply that against the code rather than iterating through old specs in order to produce a new version of the code.
So it becomes f(z, k) where z is the specs for the change and k the old code, instead of f(a, b, c, …, z) (without k) where a and the others are updated specs and z is the new one.
ADDENDUM
In other words, specs are like memos while the code is the company policy handbook. No one edits past memos, you just issue new one, and then edit the handbook.
So I rather have code versions (git commits, …) that links to change requests, which link to discussion and analysis. Not dealing with a pile of documents.
Interesting read! My personal experience with Cursor aligns with this. The initial result of my prompt was stunningly good, but adjusting the code afterwards was not a great time. It also aligns with the software 3.0 concept pitched by Andrej Karpathy, making the english language (or other natural language) the new 'code'.
I’d rather shared infrastructure fit a stability and correctness spec than fit the whims of some random programmers throwing a fit and refusing to adapt.
I suppose you’re fine with bridges built haphazardly and airplanes with doors that fall off.
There’s real infrastructure under the software that powers critical logistics. Such systems really should just be simple and straightforward.
You want ornate meta software structures? Have at it on your personal laptop like a proper h4xx0r
If you’re a real practitioner of the craft you’ll do it for free in your basement. If you’re just trying to unicorn you’re just a traditional capitalist and that’s boring.
For me, Copilot is the sweet spot (or insert your favorite auto-complete tool). It saves me significant time when coding and I’ve gotten really good at knowing when it pause for 1-2 seconds and then have it spit out the suggestion I hoped it would.
Agentic workflows are cool and have their place but essentially turn me into a full time code reviewer. Sometimes that’s acceptable/ok, sometimes I don’t like it. Essentially, if the agent gets even slightly off the path I want it on, I need to just do it myself. I give up on trying to prompt my out of a mistake it made. You get stuck thinking “one more prompt/round and it will fix the problem and everything will be perfect”, then you find yourself 4+ rounds in with the agent flip-flopping between 2 things it’s already tried.
From your examples the libraries are what AI is actually helpful for me.
If I find any API I want to use I let the Claude built an API wrapper for me. Or any other specific issues that typically end up in a Lib.
So a isolated, single purpose file that doesn't depend on any other files where the code base already includes similar files where it can steal the style from.
This is a situation where it does really well usually without breaking anything.
Fair point, I'll give it a go to see for myself, thanks.
Alternative, if it's web calls then openAPI and a specific generator will work faster long term... (write generator once then import swagger files for whatever you need or tell claude to generate the swagger if not available?)
That would help with api changes longer term (just update swagger file, regen code and update where needed)
If it's actual library calls (C/C++), then why would wrapper be needed?, doesn't add yet-anothet-layer that makes things more difficult to grasp?
I am mostly coding with ruby so I constantly find myself wrapping APIs or Linux tools to get things done faster.
Usually I just send a link to the API doc with a sentence or two to let it wrap one or two functions leading to small, specialized and mostly efficient wrappers without overhead. Easy to fix should something change.
It's just a random aspect where I find AI to work really well for coding (for me).
It’s more like a dangerous/annoying stack overflow, but useful enough that you still use it (when you get past the ethics of how it was made). But it’s not something I would pay for (I’d pay to be part of a programmer community or access to curated raw material like documentation (like MDN or the old Apple documentation))
It’s not just you,I’ve seen this too. The key is that AI magnifies your existing workflow: if your process is inefficient, AI just automates the chaos. Instead of open-ended prompts, focus AI on narrow, high-friction tasks like refactoring code or drafting documentation.
Track one metric (e.g., hours saved weekly) to cut through the hype real gains hide in boring tasks, not flashy demos. What specific area feels unproductive for you? Maybe the community can spot the gap.
I am not using Cursor as my IDE I typically get Claude or Gemini to give me feedback about a specific piece of code.
However, my biggest gripe with any of the LLMs or Tools is that they do not suggest package / library to solve my issue.
For example I wanted to do something with GEOJSON and it wrote a heap of code. In most cases for such things I would also use a well maintained and documented package.
I keep thinking that I need to write something that suggest a package / libary before writing code.
Everyone's answering about using it for coding and deep knowledge work.
But what about the opposite: all the other stuff that's surface? Today I had it fill out a calendar, to generate test data meeting specs, to do some simple translation, to proof some reading, to search.
If there's a task that can be directed and it takes less time to direct than do, it's a productivity gain.
I work daily in Cursor, producing around 200k lines of code per week, though only a small portion ends up being truly effective (still significantly more than what I could achieve on my own before). I think we need to adapt to these changes and focus on shaping better workflows to fully harness the potential of AI.
That works out to 5K/hr (200k/5/8), that’s absurd verging on insane. It’s over a line of code a second.
I’d fire someone who was putting out that “code”.
Seriously, there is no way someone can review all that code so you must be solo (or at a place that doesn’t code review). If you aren’t reviewing your code then you are “vibe coding” (said with maximum derision) and what you are “building” is a house of cards.
200k is just the number of lines of code generated, but effectively being merged is probably at the level of a few thousand lines, and I'm certainly responsible for its quality.
I totally agree with you but the people and processes that led to this are going to be defensive no doubt. It's been telling who has been adopting "AI" coding and why.
In this case, it deserves an insult. The answer to all of those hypotheticals is "you don't, it's impossible". Please, go ahead and tell us how you ensure all of those things. I would very much like to hear what you have to say because it will be groundbreaking for the whole industry, clearly. You have found the golden goose.
>> Do you seriously think that someone can write/review/maintain that?
> Yes, I do.
Then we have nothing more to discuss. If someone says "I can fly by flapping my arms" and I can absolutely say "That's absurd", I'm not going to respond with "What technique do you use? How can you do that?" because it's patently absurd. I'm not going to engage, I'm going to call out what is a lie or someone who has deluded themselves into thinking they are actually creating something of value.
I'm reasonably certain that a lot of that sort of bullshit is literally just astroturfing by desperate AI companies. I know it happens but that doesnt mean there aren't people really going along with it.
It's just one way of working. In reality, I only need a few thousand lines of effective code out of it. If I were to do it all on my own, it would likely take two to three times longer—perhaps with better or worse quality. While LLMs generate code incredibly fast, the full process of trial, error, and debugging takes more time. Additionally, since this involves multiple projects and contexts, a lot of junk code inevitably gets generated along the way.
> In reality, I only need a few thousand lines of effective code out of it. If I were to do it all on my own, it would likely take two to three times longer—perhaps with better or worse quality.
Have you tried doing it on your own as comparison?
Any lessons why that might be true?
Are you missing some design/brainstorming stage that you are doing now by iterating through junk code and which might not be necessary?
You might be right now, but you gain experience that you otherwise lose by delegating to the LLM. With experience the reverse might be true.
Auto complete actually saves me a lot time. Discussing and fixing architecture Claude has built often takes just as long as just building it. But tab/automcomplete is crazy.
(Especially for html layouts and repetitive changes)