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:

Strangers looking for assistance and/or education

Recurring collaborators

Companies with a distributed workforce

This is particularly interesting because it could lead to commercialization of the service, with reserved resources (if there are a limited number of“slots” to work with at any given point in time) and/or additional features such as a whiteboard.

Privacy

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.

Communications

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.

Technologies

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.

Costs

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.

Discovery

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:

Are you interested in hosting or just contributing?

Another way of asking: do you have a specific project you want to work on?

Are you looking to collaborate with a mentor, a peer, a trainee, or a rubber duck?

The difference between a trainee and a rubber duck is subtle: in the latter case, you’re looking for someone to act as a sounding board, which could be practically anyone. A trainee would be someone who specifically wants to learn a new language, new programming techniques, etc.

A peer would be someone at roughly your skill level.

Computer languages:

Contributor: What languages do you know, and at what skill level? Is there some language/toolkit you’re specifically looking to help with today?

Host: What language is your project in?

Natural languages: in which spoken/written languages are you comfortable?

Social niceties

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.↩