Original Reddit post

As models get more powerful, I’m noticing an odd inverse correlation: they’re getting less useful for ordinary software development. Good ordinary software delivers the most useful behaviour for the least internal complexity. The “final spec” is rarely known up front, because useful products emerge from small steps driven by user feedback and analytics. So inb4 “just prompt it properly bro” - a prompt precise enough to pin down each iteration perfectly == the code itself, which is exactly what we’re using LLMs to avoid. Ideally I’d hand an LLM a loosely defined feature and get back the simplest version with the simplest implementation: rough at edges users are unlikely to hit, failing fast and recovering easily if they do. Instead it goes above and beyond by default, covering every edge case, every improbable race condition, every unlikely input combination. Telling it to keep things simple doesn’t reliably work. It just gets hacky (a tacked-on branch is technically simpler than a rearchitecture), and since it just genuinely doesn’t know how your users behave, it assumes the worst and writes the “safest” code. I can’t think of any usage context or invariant hammering that would fix this. My AGENTS.md is awash with pleas: for simple solutions, to fail fast, no preemptive defensiveness, re architect rather than work around. I have automated complexity checks. Models still can’t help themselves. It’s as if they’ve been RL’d into solving the hardest problems available: forged into a powerful, specialised tool that we then use to bang in nails, when all we needed was a hammer. The only thing that’s kind of worked for me is everything mentioned, and then multiple simplification/reliability passes after an implementation pass. Has anyone actually, properly solved this? submitted by /u/endgamer42

Originally posted by u/endgamer42 on r/ClaudeCode