I have tried this setup but I found it particularly problematic that there isn't a separate 'dock' per desktop so I end out accidentally switching desktops for common apps such as a browser and shell. Have you found a work around for this issue?
How about having a separate user for projects, too radical? Automate user creation and initialization.
That's part of the reason you have tools like Vagrant and VMs.You don't have to create separate accounts for each project but emulate that in your VMs.
I don't really have this problem. I mostly use command-tab to switch between apps, which seems to honor the desktop I'm on. For browser and shell I right click the app and choose "new window" in the desktop of choice.
Yeah, I'm usually working on some remote machine, and keep multiple tmux instances running with the state of each medium or high level project. I've found I rarely have more than two going at once though.