I have two different experiences with LLMs.
First one is that I have vibe coded two different projects for work, one is a slack plugin which basically pushes alerts to a channel based on a people roaster and another one is a gmeet plugin to add a talking timer for each participant in the meeting. I used Opuse 4.6 and both were written with a node backend and I actually don't have a good understanding on how it works, but both works without any issue and are deployed in gcp. However, it was not a one shot prompt, but a very detailed step by step plan created for both apps and then executed including adding tests. Both of these apps are used for as internal team tools and we used to pay 20$ per person (back then the team was 5 people, but now it has grown) for the slack plugin before and after we built our own version of it, now it's just 0.07$ per month and that's the gcp infra cost.
Second one in using LLMs more like a coding monkey for work. I design the architecture, discuss it with my teammates, we nitpick and refine the approach and agree on how it should be implemented and then we create detailed JIRA tickets and feed these tickets to LLM (in this case again Opus). However, again first it must create a detailed implementation plan and only after it was reviewed and approved by an engineer it is being implemented.
If someone wants a quick working MVP, then I think the first option is the best to even test if it's possible to have a proof of concept. However, if someone wants to build a long lasting product, then throwaway that MVP and do a proper plan thinking about scalability and clean architecture from the start and use LLM as a code monkey. In my experience LLMs are still pretty bad at making better architecture and clean code decisions that is maintainable by humans in the long run.
This mirrors my experience. Vibe-coding one-off, low-risk apps, it's been fantastic. Trying to take the same approach when implementing features in massive legacy codebases has been an utter nightmare.