The main issue I have with this setup is Cmd-Tab doesn't handle multiple windows of the same app that well. If I have multiple Safari windows in different desktops, it would basically just (randomly?) pick one and open it when I Cmd-Tab into Safari.
I really wish Cmd-Tab would be constrained to the desktop I'm currently using... Anybody has a solution for this issue?
It provides Cmd-Tab/Option-Tab replacement that shows all apps' all windows regardless of their desktop or full/split screen status. You can even search within window list.
It also has gestures and numberered switch for apps/groups.
Mostly it works without a hitch. Sometimes macOS' original Cmd-Tab manages to get first and both can arrive together, but that rarely happens. When macOS opens apps to multiple desktops and full screens on startup I have to sometimes let it know what apps are available by switching through them using Exposé (or whatever that's called).
I have no affiliation, but I'm a paid user.
Personally I've no issues with cmd+tab - I use it to cycle between 2-3 recently used apps, works fine for apps in the same space (which is the idea of per-project spaces).
The dock I keep minimized, not much use for it with spaces because it has global state.
Cmd+h is handy for hiding global apps out of way (can be revealed again with cmd+tab).
There are couple of issues¹, but this is still by far the best approach I can think of. Actually, I don't understand how other people can manage their stuff without per-project virtual desktops.
¹ cannot rename virtual desktops on macOS, not all apps can restore their windows on correct desktop after reboot, not all apps support multi-window workflow (e.g. Slack), "minimized windows" area in dock should be per-desktop instead of global
PS. Fluid.app is nice way to create project-specific native app instances from web applications, e.g. Trello, Jenkins, etc. Plays nicer with virtual desktops / cmd+tab than browser windows. (With the cost of memory.)