lobsters score: 1 · tags: vibecoding
Having a shared vocabulary of concepts is essential for all programming, in no way limited to AI. (It’s the key feature of Domain Driven Design, for example.) But LLMs tend to invent new confusing names even more freely than humans, and the names tend to be worse! So anything you can do to rein in the naming conventions is helpful. I just use a glossary section of the design overview document.
score 1 · canonical
AIs are kind of a mishmash of every codebase out there. I think their terms are lifted from somewhere far away rather than made up. It’s like working with someone who just started at the company. Every day, and their last job was every job.
score 1 · canonical
I made the mistake of approving a function name I didn’t like once. It described something as a “leaf” which, whatever it was a helper function. Later other agents picked up on that name and LOVED it and it started showing up in comments and even a suggested changelog.
I think this is the kind of thing people think of when they say “slop” it’s sloppy. And it bleeds into the codebase and replicates.
Humans have decades of experience of what cause each other common mistakes and how to guard against them (best practices etc.). It’s unclear in LLM generated code when I’m being pedantic because it’s not exactly how I would have done it and when it’s the start of slop that should be nipped in the bud. I think naming is one area we need to take care or it can unexpectedly bleed into other areas.
score 1 · canonical
It’s unclear in LLM generated code when I’m being pedantic because it’s not exactly how I would have done it and when it’s the start of slop that should be nipped in the bud
IMO always the second one. They don’t get frusterated by pedantic reviews and they love running with anything they can see, so its extra important to audit anything that could be a pattern.
score 1 · canonical
I think there’s also an argument for “when it starts to be a problem” rather than “we must be hyper vigilant at all times.” Also depends on the blast radius. If it’s just me on the project, a refactor is easier. If there are lots of devs I don’t want to break their rebases and inflight work all the time (though LLMs make this cheaper).
I get the sense that I edit and prune my LLM generated garden MUCH more than most. And it’s already a lot of time and work. And being pedantic takes time away from other coding tasks and is exhausting. Especially since the iteration seems to follow Zeno’s paradox. It gets closer and closer but rarely is “perfect” and often I don’t even know what “perfect is” so it diverges back and forth between a few similar solutions and I shout (to no one) I’m tired it is “good enough”.
I also use these tools at work where we have a compliance requirement that a second human must approve and review all code. (It existed before we used LLMs). In the before times I had a healthy respect for “they did it differently than I would have but I respect their decisions” I.e. don’t bikeshed.
Okay, sorry that’s the word I needed. How do we do better and demand higher quality while also avoiding bike shedding?
score 1 · canonical
I guess we can’t put 100% of the blame on the LLM…humans came up with “cookies”, after all. Somehow it’s less charming when the computer does it.
I never in my life heard of “minting” a unique ID until Claude started saying it. (Of course, I am old…no one’s ever said “no cap” to me either and I’m pretty sure that’s real.)
score 1 · canonical
I vibed a small android app for doing workout tracking. It includes a weight estimator component for figuring out cross lift equivalences. In the process, the AI became much more confident that the estimator and the simulator for it were more accurate than the actual data from my work outs.
I ended up doing a big renaming pass to force it away from using mathematical names for things and to have names that explicitly included “estimate” like “estimated1RM” or “bicepStrengthEstimate”.
Too soon to say whether that had the desired effect of reinforcing where truth versus estimate comes from, but I wouldn’t be surprised if the math formalisms nudged its weights towards more certainty then it should have had.
score 1 · canonical
I’ve had to rename
new()toempty_object_reset_to_zero()to stop clankers callingContext::new()whenever they needed one.But sometimes they don’t get the hint and diligently document
// Instantiate StupidHack with shitty_workaround_deleteme()
score 1 · canonical
I strongly agree that this is a problem with current AI systems. My intuition is that the AI has a much greater patience for new terms. Us humans, with our comparatively limited capacity to juggle concepts, are forced to be more efficient with which words we choose to pull in to our code. The result is we still write better code. We’re more “semantically efficient”.
score 1 · canonical
I suspect that some part of this is the hidden reasoning that models do these days. You don’t see any of the chain of thought stuff going on prior to the model’s output, only the polished output. So there’s some assumption baked into the weights that the context that you’re dealing with when reading has a bit of an understanding of the CoT. That feels like it would be a difficult thing to train out of a model as it’s effectively use this info to work out what to say, but don’t actually reference it. It’s like a game of charades happening somewhat. I worked at a frontier lab, but not on anything model side, so this is just a fairly lay understanding of this, I could be very wrong.
score 1 · canonical
You should check this in to the repository, or you’re gonna keep relegislating the same terms over and over.
See how this skill works for an example.
score 1 · canonical
I haven’t had the experience of the model going back to the old terms once the new terms are everywhere in the code. What model/harness are you using that does this?
score 1 · canonical
Oh boy. I’m sorry but why are just vibing the features? You should really consider map out a plan down to every class names and top functions at least, or you have zero ownership over the codebase. If you can’t see the code ahead in your head don’t try to impose your vocabulary then. Either you own it or you shelve it. If I see any function with underscore names in dart for example that goes straight into the agents file. I don’t know why I even post this, no one cares about any of it anymore.
score 1 · canonical
A bit of a side-thought with a similar root purpose as your title (cognitive load).
I run a pre-pass on chunky diffs so I can start. It separates copies of an existing pattern from anything that is actually a decision, describes each piece in plain terms, and only then adds a short flag. I am the reviewer. The pass is an assistant mapping for me.
It would not draw that map while the LLM introduced itself as assisting with a code review. The instructions already said to explain first and keep any opinion to a sentence. It wrote a review anyway, aimed at the line it wanted to criticize. I changed the introduction to a factual annotation of what changed, and I took “review” and “opinion” out of that frame. The instructions underneath stayed. First run after worked (and every one).
That opening “review” is the frame I had to delete before the rest of the instructions meant anything. DId you encounter a similar effect? Do you use a separate session or follow up on the same agent (and context) which codes?
score 1 · canonical
I like that. I got about halfway there as I have agents contribute to and reference a GLOSSARY.md file but it didn’t occur to me to give better names to the items.
score 1 · canonical
I’ve found such a concept a must. Not GLOSSARY.md for me, I bake it into the main ruleset, but teaching the AI to speak the language without it needing to learn from context? Saves a truckload of tokens. In my experience, the initial “context sweep” fell down by 20-40k tokens on large requests.
score 1 · canonical
I vibed a GLOSSARY in the README of my new projec and it helped me find important components and confusing names. I really struggled with AIs definition of one word. I realized the word was doing two jobs and I messed up my abstraction.
AI continues consistent patterns, but it’s terrible at starting them. You have to enforce consistency early on.
score 1 · canonical
