So your employer wants you to use an agent to become more efficient, but you are like me. You actually like programming and trying to express things in natural language defeats the point, while reviewing huge amounts of fast produced code takes away the joy. Do not despair, you can achieve what’s expected without bullshitting.
It’s very unlikely that a language model will produce the exact code you want no matter how “precise” you are. Precise enough is code, so just write it yourself and move on.
Let’s say you can listen to someone talk while doing it, then an agent can do it for you with a high success rate. Of course I know that moving code around while listening to a podcast may be relaxing, but the boss wants you to burn some tokens and “language models are good at boilerplate” is true. Here are some concrete examples:
You are writing some new stuff and ignoring all kind of errors for now. Write a quick to do explaining how these should be handled, e.g.: “TODO: handle errors like in function X in file Y” (boosters repeat “show don’t tell” for a reason). Once you are done with the task at hand you can go make coffee while the agent implements it. This was the first use case I found for these things that didn’t make me want to explode.
There’s this big change you wanna do as certain pattern keeps emerging in the code almost verbatim. Thing is it will consume some time because of the sheer amount of mechanical changes that are more complex than a search and replace. Just write the core that will abstract away all those patterns, make the change in one place, test if it works, and then prompt the agent to find all the other places and do the same. You can even say “do it as in the uncommitted changes”. If you already drank enough coffee you can take this opportunity to work on something else or do some stretches.
It doesn’t matter if you are debugging something or trying to come up with something up. Your colleagues send you Claude links whenever you reach for help anyways, so better do it yourself.
Agents are quite good at debugging, I have to admit. Even if they elaborate on what’s going on and the prose is full of imprecisions, even then you will have a pointer to follow. I’ve fed Claude stack traces and it has been both, absolutely correct in some cases point and totally lost in others, yet even in the latter at least I’ve known where not to go.
The same applies to writing something new. A wrong code snippet can still be inspirational. A common prompt I keep using: “suggest me ways to do X while keeping the invariable Y”. Yes, I’m guilty of typing almost verbatim what has come out of the model, but the best is when I’m like that sucks, but now I have an idea!
Prompt it to get an idea of what you are getting into. Like the one above, the quality of the output really doesn’t matter that much. You will have somewhere to start, and you can dive deeper without feeling overwhelmed. And when the tokenpocalypse comes, you’ll have learned something new.
Or let’s say you are working with a new stack and errors don’t make that much sense just yet. Feed them to the agent, it will probably come up with the right answer and now you are getting the hang of this thing. Soon you won’t need to feed the agent these anymore.
If there’s no time to add the tests (how dare I?) ask the model if the changes are semantically equivalent except for this thing. If it says yes, be sceptic. But if it says no, pay attention to what it produced. You may find out that it’s actually useful and that you overlooked something.
This one is very funny so I have to extend myself a bit. As providers were increasing the context window, boosters were on my timeline talking enthusiastically about how this changes everything! One day we will be able to put whatever we want in there! Except for most cases it’s kinda useless, because as the session grows the context will be polluted with information that’s either wrong or irrelevant, degrading the quality of the output.
For example, you prompt it to produce a fix for something, you try it and it doesn’t work. Because the interface is built as a chat you prompt it again with “That didn’t work what else” and move on. The thing is the output that didn’t work is still in the context and may affect the rest of the session. They have a term for it: context rot. Yep, the thing that’s supposedly already better at reasoning than the average human doesn’t understand what’s relevant as the session progresses. You, the being whose job will be taken away by someone in management, have to tell it. So how?
Depends on the agent I guess. I only use Claude Code but surely this is very similar with others. For the above case use the /rewind command, as in /rewind shit didn’t work what about X?. With that, the faulty output won’t be included in the context anymore.
But at some point the stuff in the context will be too much for whatever you are working on now, even if related, so as soon as you perceive that things have moved a bit and whatever past state of the “conversation” is irrelevant, call /compact. Again, you can pass a prompt here to indicate what is still relevant.
If you still feel pressured to “vibe” things at a faster pace, consider that maybe vibers are holding these things wrong. Keep doing what you know that works, sprinkle some agents here and there and see what happens. I’m betting that a bit faster and a bit more correct is better than absolutely faster yet I don’t know why Claude did it. I’m convinced now that in the end those that can explain why things are the way they are will be still around in what remains of the industry.