Pair programming so often degrades into one pilot and one person just sitting there trying to catch mistakes. When those mistakes are caught they are mentioned taking the first persons attention away and breaking flow.
In contrast how I like to work, with similar level people, is to work at the same feature in the same codebase at the same time. We either sit next to eachother, or have a remote call, where we continuously talk through what we want to achieve. Sometimes this results in one person writing ahead (code, docs, doesn’t matter) and the second sweeping behind it and cleaning it up. Two cursors, one source. IntelliJ even manages to keep authors correctly in git.
The other mechanism is where we work on different parts of the code base at the same time. Either main code and tests, or split across interfaces and implementations. Because this happens on the same machine the iterations are way faster as they are local and incremental.
This basically saves the whole dance of creating branches, pulling/pushing, the fixing typos etc.