I recently experienced a new (to me) approach to pair programming. Given a set of user stories, my teammate and I were ready to begin coding the core domain library for a project. The problem: we are located about 500 miles apart. Our solution: Jitsi and Git.
With the solution created and the projects defined and waiting for us in the repo, we established a video chat. One of us shared the screen so the other could see the IDE. We talked our way through the appropriate Unit Tests which would ensure the domain entities were coded to match the requirements. As I was writing the tests, my teammate started writing the code to make the tests pass. As soon as a set of unit tests were complete, I’d commit/push my changes to the repo. My teammate pulled the changes into his local and then ran the tests. Tests passed, he committed his changes and pushed them to the repo. In less than three man-hours, we had working code with a great test coverage and a respectable portion of the requirements addressed.
This was the most efficient pair programming and the most gratifying TDD experience that I’ve had. It helps to be working with a competent engineer that understands the benefits of TDD. But it also makes pair programming a little bit easier when you don’t have to literally share a desk.