A couple of times on Twitter I’ve floated the idea of something akin to Chatroulette for pair programming1, albeit with shared desktop environments instead of interpersonal video.
Now that someone has called my bluff and expressed interest, here are some thoughts on what this would entail.
Potential use cases:
I’m inclined to think that the services should be proxied instead of peer to peer, for privacy and security concerns. Let’s face it: if this successfully targets skilled technologists, would you really want a highly knowledgeable stranger attempting to gain remote access to your computer? We’d have to be careful with the communications protocols anyway, but at least this way we’re not exposing the end users’ IP addresses to each other.
Beyond the obvious screen sharing, this service would need chat and/or voice communications. Again, I’m concerned that users not be forced to expose their identity to random strangers, so I’d think that the communications stream(s) should be anonymized somehow, so asking users to Skype each other wouldn’t be ideal.
I would imagine VNC would do reasonably well for screen sharing; there are clients available for the major (and not-so-major) desktop platforms.
Allowing a complete stranger to control your keyboard and mouse is fraught with peril, so it may make sense to centrally limit access to viewing (assuming VNC can be controlled by the centralized service); allowing remote control would be another feature that a company would pay to use the service for their own developers.
For voice services, perhaps Asterisk or similar would give us what we need while allowing for the possibility of group discussions.
Obviously one downside to acting as a proxy for all services is bandwidth. Using Erlang or any similar robust backend concurrent toolset should make it trivial to manage many streams, but I’m not sure what the bandwidth cost would be.
This to me is an interesting problem. Assuming such a service would have enough users to make a complex matching algorithm useful, I could see several questions each user would have to answer:
If you’re looking for someone to help you do hardcore troubleshooting, there’s no point in wasting time with someone with whom you’re having too much difficulty communicating, or someone who doesn’t have the skills you need.
There needs to be an understanding that either party can terminate for any reason, or even for no reason.
This is yet another reason why I’d like anonymity for users, so that a host can terminate a session without risking reprisals.
I’d imagine that, after a session terminates, each user would have the option of flagging the previous partner as someone with whom they should never be matched up again, or as someone that the system should warn them about in the future before they open a new session.
There’s no inherent reason why this would be constrained to programming; I could see people looking for help with math homework, for example.↩