I also experienced this with my personal projects. It was really easy to just workshop a new feature. I'd talk to claude and get a nice looking implementation spec. Then I'd pass it on to a coding agent which would get 80% there but the last 20% would actually take lot more time. In the meantime I'd workshop more and more features leading to an evergrowing backlog and an anxiety that an agent should be doing something otherwise I'm wasting time. I brought this completely on myself. I'm not building a business, nothing would happen if I just didn't implement another feature.
I started designing and building a voice assistant for myself and then realized that the only time I'd find it useful would be during cooking to set timers. But a loud extractor fan would be running making the voice recognition very difficult.
Sure, Claude and other SOTA LLMs do generate about 90% of my code but I feel like we are not closer to solving the last 10% than we were a year ago in the days of Claude 3.7. It can pretty reliably get 90% there and then I can either keep prompting it to get the rest done or just do it manually which is quite often faster.
I learned to write well testable code when I learned go. It pushes you to pass interfaces instead of direct implementations. There's also no inheritance, just composition. While there's no 1 to 1 translation to Python the concepts are still useful. It can be easier in Python thanks to duck typing.