I like pair-coding and think it can be great. Done well, it multiplies the abilities/usefulness of two developers, rather than just adding them together.
The easiest way to pair in a remote setting is one person driving the keyboard and sharing their screen, and one person observing and communicating verbally or by sending code snippets via direct message.
The observer can provide a lot of value by
- reading the driver's code as it is being written and mentally validating that it solves the problem at hand (kind of like a linter, but for business logic)
- looking up documentation or searching Stack Overflow so that driver doesn't have to mode-switch away from the code they're staring at
- validating or checking assumptions that the driver is making
- asking questions about current/next steps
The better the driver is at "programming out loud" and narrating their thought process, the easier it is for the observer to provide value.
If the observer is paying attention and knows what you're trying to do, the driver can often bang out code pretty efficiently, trusting the observer to catch issues on the fly that would have burned time in tracking them down later.
Distracted coding kills
If the driver or the observer (especially the observer) ever get distracted and aren't highly engaged in what you're working on, it can suck all the energy out of the session and make it difficult to spin back up again.
If something happens that you really need to pay attention to, you should immediately say "I need to step away for a bit" and disconnect from the call until you're able to be engaged again.
It's really great to be able to lean on someone else's brain while problem-solving. If they're not engaged, leaning on their brain will lead to falling over, and train you not to count on them.
Communicating verbally while coding can be frustrating
Verbalizing what you are trying to do to another human while you're in coding-mode can be really difficult if you're not used to it.
Don't give up on it – it gets easier as you exercise it, and I believe the skill transfers over to lots of other communicating-with-prose-about-code contexts.
One of the reasons I dislike screen-sharing tools like Screenhero that let you click/type on the other person's screen is because it lets you give in to the "it's hard to explain, just let me do it".
Having to explain it with words is where a lot of the value comes from, and I believe it levels up your ability to communicate as teammates.