Often you can find these during design. Design phases felt like a waste of time when you could just start coding and find the issues as you go. Now I find it faster to do a detailed design, then hand it over to agents to code. You can front-load the hard decisions and document the plan.
Sometimes the agent might discover a real technical constraint during dev, but that's rare if the plan is detailed. If so you can always update the plan, and just restart the agent from scratch.
This is my (cheesily named) process: https://github.com/scosman/vibe-crafting
I try out ideas that are intended to explore some small aspect of a concept, and just ask the LLM to generate the rest of whatever scaffold is needed to verify the part that I'm interested in. Or use an LLM to generate just a roughest MVP prototype you could imagine, and start using it immediately to calibrate my initial intuition about the problem space. Eventually you get to the point where you've tried out your top 3-5 ideas for each different corner of your codebase, and you can really nail down your spec and then its off to the races building your "real" version.
I have a mechanical engineering background, so I'm quite used to the concept of destructive validation testing. As soon as I made that connection while exploring a new idea via claude code, it all started feeling much more natural. Now my coding process is far more similar to my old physical product design process than I'd ever imagined it could be.