Planning: I often ask it to help me plan an approach if we are dealing with something I don't have a lot of experience with, most recently working with the DOM. If there is a library or an API that is new to me, I ask for an overview and run my plan by it for comments. Feed it the documentation and it is like talking to author.
Coding: I have a pretty reliable sense for when a section of code that I want to write is obvious enough for the LLM to one-shot based on the other code in the file, and on those occasions I call in completion. I do this with code that I can verify at a glance.
Analysis: If I have any uncertainty at all about the code I've written, I run it by the LLM to find issues. Out of all the other uses, I think this is the most productive and time saving. If I run into a bug and I'm stumped, I show it the section of code. I'm amazed at how good it is at finding mistakes.
I'm working solo as a full stack developer coming from a different background, so I sometimes find myself out of my depth. Having access to the breadth of knowledge that an LLM brings and its attention to detail has been game changing. I've tried a couple agents and configuring them to work competently seems like a rabbit hole, and I like the tight control over the context that chatting with the web prompt interface brings. It seems like half the value is putting into words my intent, it forces me to have a cohesive understanding myself. It is like rubber duck debugging where the duck can actually talk back and sometimes provide the critical part that I'm missing. I have it speak like a pirate which is just for fun but sometimes the sailing metaphors that it uses are really intuitive.