Yesterday I tried a remote ping pong coding session with a friend.
The social dynamics and the fun are amazing. If you want to try it out get the
MoonEdit collaborative editor and setup a coding session. We split the editor space in 2 parts. While one of us was writing tests, the other just by glancing at the tests was writing the code.. the amount of information that passed through, just by coding, not even by talking about it, is amazing. People also somehow develop social protocols so that they don't get in each others' way.
It is an intoxicating experience :-) Who said that when two minds meet, a third mind emerges? That's the feeling that it gives you while you see the code emerge and evolve. It almost feels like you are looking after a living thing, pruning some code here, splitting some code there, rather than doing actual coding. I guess it's due to small seemingly unimportant changes building up into functional code.
It's amazing when, after having done the work, you replay the session using the 'history' feature and you see the living code evolving, growing, getting fatter, splitting and adjusting to a new position.. it feels like the tests are nudging the code to a new shape, to a new position.