Pair programming has a reputation for being exhausting, and remote pairing has a reputation for being exhausting and awkward. Most of that reputation comes from doing it badly: unstructured sessions that run for hours, one person silently watching another type, and tooling that makes switching who is typing a two-minute ordeal. Done with a little structure, remote pairing is one of the fastest ways to spread knowledge across a team and to get unstuck on hard problems.
Before choosing tools it is worth being clear about why you are pairing, because the answer changes how you should do it.
Routine feature work usually does not need pairing. Forcing it there is where the "exhausting" reputation comes from.
The classic roles still apply. The driver types. The navigator thinks one step ahead: what the next test should be, whether the current approach will handle the edge case, what to name the function. The navigator does not dictate keystrokes.
Remotely, the most important adjustment is to swap roles more often than you think you need to. In person, the navigator stays engaged because they are physically present; on a video call it is very easy to drift into checking Slack. Swapping every fifteen to twenty minutes keeps both people active. Use a timer; it feels artificial for the first session and natural after that.
Swapping only works if swapping is cheap. If changing drivers means stopping a screen share, starting another, and re-opening files, you will not do it. This is the single biggest argument for a tool where both people can type at any time.
Ninety minutes is a reasonable upper bound for a single remote pairing block. Beyond that, quality drops noticeably. A good pattern for a half-day of pairing is:
There are broadly two options, and the right one depends on what you are pairing on.
These share a full development session: the project, the terminal, the debugger, language-server features. They are the right choice when you are working inside a large existing codebase and need to run tests, step through code, and navigate across many files.
Their cost is setup. Both people need the same IDE and the extension installed, one of them needs the project checked out and building, and session invitations and permissions take a minute or two to sort out. For a planned two-hour session that is fine. For "can you look at this for five minutes" it is a barrier high enough that people skip pairing altogether.
A shared editor in the browser trades depth for speed. There is no project, no terminal, and no debugger. In exchange, starting a session is: open a URL, send it, start typing. Nobody installs anything, and it works identically from a work laptop, a personal machine, or a phone.
This is the right tool for a large share of real-world pairing moments:
Many teams use both: a browser editor for the first fifteen minutes of thinking, then move into the IDE once the approach is clear and it is time to write real code with real tests.
Fully synchronous pairing needs overlap, and distributed teams often have only two or three hours of it. Make those hours count by pairing on the things that genuinely need two people in real time, and use a persistent shared workspace for the asynchronous part.
A pattern that works: at the end of the overlap, the pair leaves the workspace in a known state with a short comment block at the top ("Done: X, Y. Next: Z. Open question: should we handle nulls here?"). The engineer in the later time zone continues in the same workspace, updates the comment, and the next overlap starts with both people already on the same page. Because the content is at a stable URL and does not require either person to be online at the same time, the hand-off is nearly free.
Remote pairing works when sessions are time-boxed, roles swap frequently, and switching the driver is instant. Use IDE-integrated tools for deep work in a real codebase; use a browser-based shared editor for the frequent, short, low-ceremony moments where the alternative is not pairing at all. Pick the one that removes friction for the situation in front of you, and keep a written trail in the workspace so the session outlives the call.