- My workspaces were monolithic. If I changed my workspace, the windows on all my monitors went with it.
- Alt-tab worked globally across all monitors. I wanted it to only list the windows that were on the currently focused monitor.
- Moving windows from one monitor to the next in a predictable way was a chore. (I eventually resolved this with some key bindings, but it was a hack.)
- No window manager I know of afforded me the option of using tiling or (GOOD) stacking layouts on a per-monitor basis. (Some tiling WMs exist that solve the monolithic workspace problem, but they are all tiling.)
My first solution to this was to fork Openbox. It worked well for a while, but it was subject to a lot of state transition bugs and my hack became hard to maintain.
So I wrote my own. In Go. (Including a full X client stack.) https://github.com/BurntSushi/wingo
I love working with three monitors now, because I can freely mix and match the windows on my screen. My workspaces are dynamic (add/remove/rename as I please), so everything is composable. On one monitor, I might have a bunch of terminals in tiling mode. On another, I might have GIMP in stacking mode. Interestingly, in order to achieve this, I had to break compatibility with existing standards (but support as many as possible). As a result, some existing WM tools (particularly pagers and possibly task bars) just can't work well with my WM without explicit support. Perhaps this is why so few of these WMs exist outside the tiling world!