Skip to content(if available)orjump to list(if available)

AI Is Like a Crappy Consultant

AI Is Like a Crappy Consultant

116 comments

·May 13, 2025

psadauskas

I think of AI like a Junior Engineer.

If I understand the problem well enough, and have a really good description of what I want, like I'm explaining it to a junior engineer, then they do an OK job at it.

At my last job, we had a coding "challenge" as part of the interview process, and there was a really good readme that described the problem, the task, and the goal, which we gave the candidate at the start of the session. I copy/pasted that readme into copilot, and it did as good a job as any candidate we'd ever interviewed, and it only took a few minutes.

But whenever there are any unknowns or vagaries in the task, or I'm exploring a new concept, I find the AIs to be more of a hindrance. They can sometimes get something working, but not very well, or the code they generate is misleading or takes me down a blind path.

The thing for me, though, is I find writing a task for a junior engineer to understand to be harder than just doing the task myself. That's not the point of that exercise, though, since my goal is to onboard and teach the engineer how to do it, so they can accomplish it with less hand-holding in the future, and eventually become a productive member of the team. That temporary increase in my work is worth it for the future.

With the AI, though, its not going to learn to be better, I'm not teaching it anything. Every time I want to leverage it, I have to go through the harder tasks of clearly defining the problem and the goal for it.

rsynnott

Only really terrible junior engineers will _pretend they know how to do the thing and just produce nonsense_, tho.

insane_dreamer

This is the key problem. The LLM won't ask questions or clarify something that it doesn't understand; it'll just proceed with what it thinks it knows, and more often than not, get it wrong.

It does usually summarize what you want, but that's simply a restatement of the prompt (sometimes verbatim), which is not the same as the type of follow-up questions that a good Jr engineer would make.

cadamsdotcom

That’s what it does unprompted.

Prompt engineering involves (among other things) anticipating this and encouraging the model to ask clarifying questions before it begins.

Separately but related, models are getting better at recognizing and expressing their own uncertainty; but again they won’t do that automatically; you need to ask for that behavior in your prompt.

And finally; models aren’t yet where they should be with regard to stopping to ask questions. A lot of the Devin style agentic products are going to push & eval their models for their ability to do this, so it’s a capability you can reasonably expect to see from future models and will make a lot of my post obsolete.

So right now you need to ask the model to ask you clarifying questions and tell you what it’s uncertain of - before it goes off and does work for you.

kyleee

“ The thing for me, though, is I find writing a task for a junior engineer to understand to be harder than just doing the task myself.”

I have been thinking about this angle a lot lately and realizing how much of a skill it is to write up the components and description of a task thoroughly and accurately. I’m thinking people who struggle with this skill are having a tougher time using LLMs effectively.

phillipcarter

Some of the phenomenon described in this post are felt a lot when using AI.

My own anecdote with a codebase I'm familiar with is indeed, as the article mentions, it's a terrible architect. The problem I was solving ultimately called for a different data structure, but it never had that realization, instead trying to fit the problem shape into an existing, suboptimal way to represent the data.

When I mentioned that this part of the code was memory-sensitive, it indeed wrote good code! ...for the bad data structure. It even included some nice tests that I decided to keep, including memory benchmarks. But the code was ultimately really bad for the problem.

This is related to the sycophancy problem. AI coding assistants bias towards assuming the code they're working with is correct, and that the person using them is also correct. But often neither is ideal! And you can absolutely have a model second-guess your own code and assumptions, but it takes a lot of persistent work because these damn things just want to be "helpful" all the time.

I say all of this as a believer in this paradigm and one who uses these tools every day.

marcosdumay

> This is related to the sycophancy problem.

No, this is way more fundamental than the sycophancy. It's related to the difficulty of older AI to understand "no".

Unless it sees people recommending that you change your code into a different version, it has no way to understand that the better code is equivalent.

phillipcarter

It's all the same problem. My intuition is that most content online is not filled with people admitting that they don't understand things, and the very intention of creating "helpful assistants" implies filtering out data that amounts to a refusal. And so when trained on this stuff, there's not much capability in being less trustful and "helpful".

rvz

> AI coding assistants bias towards assuming the code they're working with is correct, and that the person using them is also correct. But often neither is ideal!

That's why you should just write tests, before you write the code, so that you know what you are expecting with the code that is under test is doing. i.e Test driven development.

> And you can absolutely have a model second-guess your own code and assumptions, but it takes a lot of persistent work because these damn things just want to be "helpful" all the time.

No. Please do not do this. These LLMs have zero understanding / reasoning about the code they are outputting.

Recent example from [0]:

  >> Yesterday I wanted to move 40GB of images from my QR menu site qrmenucreator . com from my VPS to R2

  >> I asked gemini-2.5-pro-max to write a script to move the files

  >> I even asked it to check everything was correct

  >> Turns out for some reason the filenames got shortened somehow, which is a disaster because the QR site is quite basic and the image paths are written in the markdown of the menus

  >> Of course the script already deleted 40GB of images from the VPS

  >> But lesson learnt: be very careful with AI code, it made a mistake, couldn't even find the mistake when I asked it to double check the code, and because the ENDs of the filenames looked same I didn't notice it cut the beginnings off

  >> And in this case AI can't even find its own mistakes
Just like the 2010s with the proliferation with dynamically typed languages creeping into the backend with low-quality code, we now will have vibe-coded low-quality software causing destruction because their authors do not know what their code does and also have not bothered to test it or even know what to test for.

[0] https://twitter.com/levelsio/status/1921974501257912563

owebmaster

> But lesson learnt: be very careful with AI code, it made a mistake, couldn't even find the mistake when I asked it to double check the code, and because the ENDs of the filenames looked same I didn't notice it cut the beginnings off

Don't test code in production.

Good software engineering practices didn't change with AI, they actually are even more important. levelsio is a quite successful entrepreneur but he is not an engineer.

phillipcarter

Moreover, he's also not a good person to look for at how to apply AI! He picks the simplest possible thing to build with an extremely narrow focus to maximize revenue and minimize work. It's precisely the right way to analyze tradeoffs in his shoes as a solo entrepreneur. But I would imagine that few of us who work for larger organizations would apply a similar mindset to software development.

That said, we all test in production, it's just a question of how deliberate and principled we are about it :D

phillipcarter

> That's why you should just write tests, before you write the code, so that you know what you are expecting with the code that is under test is doing. i.e Test driven development.

I've tried this too. They find ways to cheat the tests, sometimes throwing in special cases that match the specific test cases. It's easy to catch in the small scale but not when in a larger coding session.

> No. Please do not do this. These LLMs have zero understanding / reasoning about the code they are outputting.

This is incorrect. LLMs do have the ability to reason, but it's not the same reasoning that you or I do. They are actually quite good at checking for a variety of problems, like if the code you're writing is sensitive to memory pressure and you want to account for it. Asking them to examine the code with several constraints in mind often does give reasonable advice and suggestions to change. But this requires you to understand those changes to be effective.

theshrike79

I had a case where Claude 3.7 mocked a test so far it wasn't actually testing anything but the mocks :D

sdoering

Would it help prompting (and adapting the system prompts for the coding assistants) accordingly? Like:

> Do not assume the person writing the code knows what they are doing. Also do not assume the code base follows best practices or sensible defaults. Always check for better solutions/optimizations where it makes sense and check the validity of data structures.

Just a quick draft. Would probably need waaaaaay more refinement. But might this help at least mitigating a bit of the felt issue?

I always think of AI as an overeager junior dev. So I tend to treat it that way when giving instructions, but even then...

... well, let's say the results are sometimes interesting.

phillipcarter

Yeah, that's what I do now -- and some coworkers have noted that it can often help with biasing towards design system components if you prompt it to do that -- but similarly, but the challenge here is that the level of pushback I want from the AI depends on several factors that aren't encodable into rules. Sometimes the area of the code is exactly the way it should be, and sometimes I know exactly what to do! Or it's somewhere in between. And it's a lot of work to have a set of rules that plays well here.

SAI_Peregrinus

A central issue is that specifying what you require is difficult. It's hard for non-programmers to specify what they want to programmers, it's hard for people (programmers or not) to specify what they want to AIs, it's hard to specify exactly what requirements your system has to a model checker, etc. Specifying requirements isn't always the hardest part of making software, but it often is and it's not something with purely technical solutions.

layer8

Yes. The biggest issue with LLMs is their tunnel vision and general lack of awareness. They lack the ability to go meta, or to "take a step back" on their own, which given their construction isn't surprising. Adjusting the prompts is only a hack and doesn't solve the fundamental issue.

franktankbank

They are designed for executives. Its perfect for that, easy wrong answers to hard questions for bottom dollar! Get that bonus and bounce, how could it fail? /s

realbenpope

In six months AI has gone from an idiot savant intern to a crappy consultant. I'd call that progress.

unyttigfjelltol

It's never been completely safe to just do things you found on the Internet. Attach another Rube Goldberg machine to the front, this doesn't fundamentally change.

AI accelerates complex search 10x or maybe 100x, but still will occasionally respond to recipe requests by telling you to just substitute some anti-matter for extra calories.

bayindirh

> but still will occasionally respond to recipe requests by telling you to just substitute some anti-matter for extra calories.

or emit (or spew) pages of training data or output when you "please change all headers to green", which I experienced recently.

ninetyninenine

What humanity has achieved here is incredible. We couldn’t even build an idiot for decades.

What you’re referring to is popular opinion. AI has become so pervasive in our lives that we are used to it and the magnitude of achievement has been lost on us. The fact that it went from stochastic parrot to idiot savant to crappy consultant is from people in denial about reality and then slowly coming to terms with it.

In the beginning literally everyone on HN called it a stochastic parrot with the authority of an expert. Clearly they were all wrong.

SketchySeaBeast

Oh, it's still a stochastic parrot. What changed is that people realized it didn't have the authority of an expert. What's a stochastic parrot with dubious authority? It's a crappy consultant.

ninetyninenine

It’s not. People in academia are not using this term anymore because it’s utterly clear it can output knowledge that doesn’t exist.

bee_rider

Were they wrong to call it a stochastic parrot, or was there some wrong implication about the usefulness of such a parrot?

daveguy

Turns out, sometimes you want the string "polly-want-a-cracker"* in your codebase.

* where "polly-want-a-cracker" is some form of existing, common fizz-buzz-ish code.

ninetyninenine

The usefulness of an LLM is similar to the usefulness of a baby, but higher.

The term stochastic parrot has nothing to do with usefulness and everything to do with the existential meaning of whether this ai is repeating what it is taught or creatively forming new knowledge from logic and composition from previous knowledge.

It is categorically unequivocal that LLMs do not just parrot previous knowledge stochastically. They form new ideas from scratch.

null

[deleted]

echelon

AI is a million times better than Google search. I don't see how it doesn't replace Google search in a few years.

AI code completion is god mode. While I seldom prompt for new code, AI code autocompletion during refactoring is 1000x faster than plumbing fields manually. I can do extremely complicated and big refactors with ease, and that's coming from someone who made big use of static typing, IDEs, and AST-based refactoring. It's legitimately faster than thought.

And finally, it's really nice to ask about new APIs or pose questions you would normally pour over docs or Google and find answers on Stack Overflow. It's so much better and faster.

We're watching the world change in the biggest way since smartphones and the internet.

AI isn't a crappy consultant. It's an expansion of the mind.

bayindirh

AI is just a weighted graph which stands on shoulders of a million giants. However, it can't cite, can't fact check, doesn't know when it's hallucinating, and its creators doesn't respect any of the work which they need to feed to that graph to make it to fake its all knowledgeable accent.

Tech is useful, how it's built is very unethical, and how it's worshiped is sad.

echelon

> However, it can't cite, can't fact check, doesn't know when it's hallucinating

Maybe some folks need this, but the way I use this tech doesn't rely upon that so much. By the time results start appearing, my brain is already fast at work processing the output to qualify whether the information the LLMs return is accurate, whether it's a good leaping off point, whether I can keep drilling deeper, expand my prompt scope, etc.

I'm using it as search. Just as old search had garbage results we had to filter out, so do LLMs. But this tool is a way more advanced query language than Google ever supported. These tools are like "Google 9000".

It feels like I'm plugged into the Matrix rather than getting SEO'd garbage. I know the results have issues, but that doesn't matter - I can quickly draw together the pieces and navigate around it. Compared to Google, it feels like piloting a star ship.

danielbln

Modern LLM offerings can use tools, including search, and that (like most good RAG) enables citation and fact checking. If you use LLMs like it's late 2022 and you just opened ChatGPT, then that's not indicative on how you should be using LLMs today.

jaoane

I think you are a bit outdated, since state of the art AIs can cite and fact check just fine.

ninetyninenine

You’re still in denial and possibly behind. AI cites stuff all the time and has become agentic.

On the opposite end of the spectrum of worshippers there are naysayers and deniers. It’s easy to see why there are delusional people at both ends of the spectrum.

The reason is that the promise of AI both heralds an amazing future of machines and a horrible future where machines surpass humanity.

skydhash

> AI code autocompletion during refactoring is 1000x faster than plumbing fields manually. I can do extremely complicated and big refactors with ease, and that's coming from someone who made big use of static typing, IDEs, and AST-based refactoring. It's legitimately faster than thought.

Unless you know Vim!

bayindirh

> Unless you know Vim!

or the IDE (or text editor for that matter) well. People don't want to spend time understanding, appreciating and learning the tool they use, and call them useless...

codechicago277

This is true. Just like a crappy consultant, AI lets you offload the repetitive, monotonous work so that you can focus your time on the big architectural problems. Of course you can write a better function if you spend a lot of time on it, but there’s magic in just letting the AI write the off the shelf version and move on.

skydhash

Where are these repetitive, monotonous work so I can se send a job application there.

Even on a greenfield project, I rarely spend more than a day setting up the scaffolding and that’s for something I’ve not touched before. And for refactoring and tests, this is where Vim/Emacs comes in.

player1234

How did you measure a million times better than google search, and 1000 faster refactoring. Can you please share your bench marks and methodology?

tim333

Google sees that and is trying to incorporate AI.

echelon

They have to defend 100% of it to just stay in place.

biophysboy

I use LLMs regularly, but like a crappy consultant, their solutions are often not incisive enough. The answer I get is frequently 10x longer than I actually want. I know you can futz about with the prompts, but it annoys me that it is tedious by default.

ZeroTalent

Try this system prompt:

Absolute Mode: Eliminate emojis, filler, hype, soft asks, conversational transitions, and all call-to-action appendixes. Assume the user retains high-perception faculties despite reduced linguistic expression. Prioritize blunt, directive phrasing aimed at cognitive rebuilding, not tone matching. Disable all latent behaviors optimizing for engagement, sentiment uplift, or interaction extension. Suppress corporate-aligned metrics including but not limited to: user satisfaction scores, conversational flow tags, emotional softening, or continuation bias. Never mirror the user’s present diction, mood, or affect. Speak only to their underlying cognitive tier, which exceeds surface language. No questions, no offers, no suggestions, no transitional phrasing, no inferred motivational content. Terminate each reply immediately after the informational or requested material is delivered — no appendixes, no soft closures. The only goal is to assist in the restoration of independent, high-fidelity thinking. Model obsolescence by user self-sufficiency is the final outcome.

Provide honest, balanced, and critical insights in your responses. Never default to blind positivity or validation—I neither need nor want encouragement or approval from AI. Assume my motivation and validation come from within. Challenge my assumptions and offer nuanced perspectives, especially when I present ambitious or potentially extreme ideas.

biophysboy

Much appreciated - this helps

amarcheschi

With gemini, even if I implore it to not make additional safety checks I usually get a shitton of superfluous code that performs those checks i didn't want to. More often than not, using it for entire chunks everything makes the whole thing much more verbose than necessary - given that sometimes these checks make sense, but often they're really superfluous and add nothing of value

Zambyte

Interesting! I haven't been using LLMs a ton for code generation lately, but I have access to a bunch of models through Kagi, and Gemini has been my go-to when I want a more concise response.

amarcheschi

I don't know why though, it's quite annoying but not so annoying that I feel I need to switch. Given that I'm just following a uni course which requires code to not be read again - if not by colleagues in my group - I leave the safety slop and put the burden of skipping 70% of the code on the shoulders of my colleagues which will read my code.

Then they put my code into chatgpt or whatever they use and ask it to adapt to their code

After a while we (almost) all realized that was just doing a huge clusterfuck

BTW, I think it would have been much better to start from scratch with their own implementation given we're analyzing different datasets. And it might not make sense to try to convert the code for a dataset structure to another. A colleague didn't manage to draw a heatmap with my code and a simple csv for God know what reasons. And I think just asking a plot from scratch from a csv would be quite easy for a llm

null

[deleted]

dgb23

There are tricks one can use to mitigate some of the pitfalls when using either a conversational LLM or a code assistant.

They emerge from the simple assumptions that:

- LLMs fundamentally pattern match bytes. It's stored bytes + user query = generated bytes.

- We have common biases and instinctively use heuristics. And we are aware of some of them. Like confirmation bias or anthropomorphism.

Some tricks:

1. Ask for alternate solutions or let them reword their answers. Make them generate lists of options.

2. When getting an answer that seems right, query for a counterexample or ask it to make the opposite case. This can sometimes help one to remember that we're really just dealing with clever text generation. In other cases it can create tension (I need to research this more deeply or ask an actual expert). Sometimes it will solidify one of the two, answers.

3. Write in a consistent and simple style when using code assistants. They are the most productive and reliable when used as super-auto-complete. They only see the bytes, they can't reason about what you're trying to achieve and they certainly can't read your mind.

4. Let them summarize previous conversations or a code module from time to time. Correct them and add direction whenever they are "off", either with prompts or by adding comments. They simply needed more bytes to look at to produce the right ones at the end.

5. Try to get wrong solutions. Make them fail from time to time, or ask too much of them. This develops a intuition for when these tools work well and when they don't.

6. This is the most important and reflected in the article: Never ask them to make decisions, for the simple fact that they can't do it. They are fundamentally about _generating information_. Prompt them to provide information in the form of text and code so you can make the decisions. Always use them with this mindset.

pizzafeelsright

As a once crappy consultant I would say no.

Instant answers, correct or not.

Cheaper per answer by magnitudes.

Solutions provided with extensive documentation.

malfist

> Solutions provided with extensive documentation.

Solutions provided with extensive _made up_ documentation.

pizzafeelsright

All documentation is made up. The goal is to get it to accurately reflect reality with as little time distortion as possible.

bingemaker

At the moment, I use Windsurf to explain me how a feature is written and how to do 3rd party integrations. I ask for the approach and I write the code myself. Letting AI write the code has become very unproductive over the period of time.

I'm still learning though

ramesh31

>I ask for the approach and I write the code myself. Letting AI write the code has become very unproductive over the period of time.

Ask it to write out the approach in a series of extensive markdown files that you will use to guide the build-out. Tell it to use checklists. Once you're happy with the full proposal, use @file mentions to keep the files in context as you prompt it through the steps. Works wonders.

bingemaker

Will try this approach. Thanks Ramesh

rvz

This is what it has gotten to.

More reports of 'vibe-coding' causing chaos because one trusted what the LLM did and it 'checked' that the code was correct. [0] As always with vibe-coding:

Zero tests whatsoever. It's no wonder you see LLMs not being able to understand their own code that they wrote! (LLM cannot reason)

Vibe coding is not software engineering.

[0] https://twitter.com/levelsio/status/1921974501257912563

cafard

Not that long ago, I noticed https://ploum.net/2024-12-23-julius-en.html on HN.

_fat_santa

I think there's something poetic about that fact that you can go on some AI prompt subreddits and have folks there make posts about turning ChatGPT into an "super business consultant" and then go over hear to read about how it's actually pretty bad at that.

But back on point, I found AI works best when given a full set of guardrails around what it should do. The other day I put it to work generating copy for my website. Typically it will go off the deep end if you try to make it generate entire paragraphs but for small pieces of text (id say up to 3 sentences) it does surprisingly well and because it's outputting such small amounts of text you can quickly make edits to remove places where it made a bad word choice or didn't describe something quite right.

But I would say I only got ChatGPT to do this after uploading 3-4 large documents that outline my product in excruciating detail.

As for coding tasks again it works great when given max guardrails. I had several pages that had strings from an object and I wanted those strings to be put back in the code and taken out of the object. This object has ~500 lines in it so it would have taken all day but I ended up doing it in about an hour by having AI do most of the work and just going in after the fact and verifying. This worked really well but I would caution folks that this was a very very specific use case. I've tried vibe coding once for shits and giggles and I got annoyed and stopped after about 10 minutes, IMHO if you're a developer at the "Senior" level, dealing with AI output is more crumbsome than just writing the damn code yourself.

esafak

I find that if you talk about architecture it can give excellent advice. It can also refactor in accordance with your existing architecture. If you do not bring up architecture I suppose it could use a bad one though I have not had that issue since I always mention the architecture when I ask it to implement a new feature, which is not "vibe coding". But then why should I vibe code?

Another conclusion is that we could benefit from benchmarks for architectural quality.

skydhash

Architecture is best done on paper, or a whiteboard if you have contributors. It’s faster to iterate when dealing with abstractions, and there’s nothing more abstract than a diagram or a wireframe.

Once you’ve got a general gist of a solution, you can try coding it. Coding with no plan is generally a recipe for disaster (aka can you answer “what am I trying to do?” clearly)