First it started with front end development. I couldn't get emacs to play nice with syntax highlighting modern front end. I could get JSX highlighted OR I could get TypeScript highlighted. Not both. I started using WebStorm and discovered that the emacs keybindings were pretty good! Not perfect but the best I've found outside of emacs. And the refactoring! So nice, so convenient.
I still used emacs for various languages. Ruby, Python, then some Rust. I wrote a solid amount of Rust in emacs. But then my Rust projects started growing, I started wanting automatic refactors and good type info. A couple times setting up language servers on emacs had chastened me. So I switched to IntelliJ Rust. And damn, it's really nice. Same decent emacs keybindings, with really good language tooling. I can see the inferred type of a variable while I'm typing it out. I can refactor without having to run cargo all the time.
At this point I use emacs for writing blog posts, Python/Ruby, and config files. That's it. Oh and debugging wasm binaries. Hexl-mode is still unrivaled. It's a little sad though. I learned to program as I learned emacs. I like the idea of having a powerful, text crunching editor. But it's so damn inconvenient. Everything feels a little tacked on. Language servers are super brittle and hard to get right. Multiple cursors mostly work but aren't the first class citizens of IntelliJ.
If I had to provide a thesis on why emacs is failing me, it's because emacs was designed to manipulate text. It's incredibly good at that. But code these days isn't text. It's hypertext. It's a code graph that is automatically formatted, refactored and linked. Emacs can certainly treat code that way, but it's a lot of work and a lot of suffering that IDEs provide out of the box.