Since switching between two buffers is so important, I bound M-o to other-buffer . I quickly found myself switching to unrelated buffers, so I bound it to projectile-project-buffers-other-buffer , and configured projectile to ignore some classes of buffers, like irc, compilations, or tags. This ends up being much less thinking than left/right, even in the optimal case where they end up right next to each other.

Switching between buffers is much faster with Emacs buffer selection than through tabs. A bonus is that C-x b <RET> will go to the last buffer, (which is a fallback if the buffer I want is not the 'most related buffer' but really the last buffer viewed. I recommend setting up ido, ivy, or helm to make switching more of a breeze if you don't know the exact name.

The last flow is really bad practice. Even in the tabbed workflow it's mostly a waste of time, and removing tabs forced me to stop doing this. I replaced this with project wide searches (in my case counsel-rg ) and tag jumps ( projectile-find-tag ). I'd recommend trying to find any alternative besides blindly cycling through your tabs. If I really need this, I'll use ibuffer.