Working remotely doesn't necessarily mean working in isolation, but it does tend to impose it as a default. Seeking out more pair-programming sessions is one of the ways I'm compensating. Here's what I've learned so far:
80mbps/20mbps FTTC connection via Zen Internet. If decent fibre is available at all in your area you have no excuse. If it isn't, set up a strong 4G connection. Install an external antenna and a mast if necessary.
Logitech C920 camera. Nothing super-fancy but the autofocus is good. I consider HD (1920x1080) to be a reasonable standard; to get this in Zoom, you'll need to go to Settings and turn on HD Video.
LED light panel. You wouldn't show up to a physical meeting and lurk in the corner with the lights off, shrouded in darkness. Unless your desk faces a window and it's light out, get a light panel.
USB headset with microphone. Perhaps surprisingly, all bluetooth headsets (yes, including expensive "true wireless" earbuds) have noticeably degraded quality and much higher latency. Both of these will affect the quality of your communication in subtle ways.
Dual screens. I have the codebase open on a large screen, and the laptop open next to it with the video chat fullscreen. This means that my partner can see whether I'm looking at the code, or looking to them - a really useful cue.
Zoom. Whatever you think about their security or ethics, right now they have the best audio/video quality and reliability in the game. If your work is security-critical, obviously use something else.
VSCode Live Share. This is an absolute gamechanger. One of the worst things about physical pairing is having to use someone else's desktop OS / weird keyboard / custom IDE setup. It also tends to inhibit driver-navigator changeovers, which makes the communication less effective.
If you aren't already a convert, VSCode Live Share syncs code changes rather than sharing screen + mouse/keyboard inputs, so everyone uses their own system and own IDE, but sees code changes in realtime. You can also share local servers and terminals so you don't need to go through the work of getting the codebase working on everyone's machine. It's magic.
(It's also possible to get it to go out of sync, which can do weird gaslighting effects to the pair since you'll see different code. This has only happened to me once so far.)
I've found that my own stamina is only good for about 90 minutes at a time at maximum intensity. But that's enough to get a lot done. I'd rather break the pair and work solo for a bit at that point than pair at other than maximum intensity.
But in remote pairing, using VSCode, you can all drive at once. This works better than you might think. I've found that we settle into a flow where we 1) pick a feature, 2) both navigate, discussing the changes that need to be made (often writing a temporary list in a shared text file), and then 3) both drive.
At (3), you can actually race to write the code, editing different files, different functions in the same file, or even the same line - which is like being so in sync that you can finish each other's sentences. I have been known to correct my pair's typos faster than he can.
It's not always the right way to do things but it is absolutely awesome and you should totally try it.
If I'm mid-flow but have somehow forgotten how to get the current timestamp, I can write
if (??currenttime?? - myRecord.last\_updated > STALE\_RECORD\_MSEC) {
and carry on without even slowing down, and my partner can fix it with Date.now() on the fly. Fewer context switches mean happier developers.
You can do this with physical pairing, too, but it's much slower - either you have to pause and verbally ask, then type in the dictated code, or push the keyboard across the desk, or leave a loose end and (hopefully) come back to it when you're out of the flow.