Archimedes: A Big Enough Lever

This morning on the way to work, I was thinking about the critics of the One Laptop per Child program. Lots of people maintain that, rather than sending a $100 laptop to kids in third-world countries, we would do far better to send them $100 in food. And to a degree, I think they’re right — laptops are of no use to a child who is starving. However, there’s a crucial difference in the sort of help these two options provide: food is finite, and will be used up, past which it provides no ongoing benefits (except perhaps a bit of fertilizer). A laptop has ongoing utility and can ideally open up altogether new opportunities for the person who is connected to the global community through it.

In The End of Poverty, Jeffrey Sachs demonstrates that people can climb the ladder out of poverty once they’re on it, but often need help to reach that first rung. (Reading this book is what made me a big fan of microlending in general, and later Kiva in particular: it’s an excellent way to help people to get their foot on the first rung of the economic ladder and to pull themselves out of the morass.) So how could the availability of the Internet and initiatives like OLPC help to achieve that end? Or, put another way, how can the XO laptop be worth more than $100 to the people who receive it?

It can turn them into programmers who can be paid for their work.

The idea would be a central service — let’s call it Archimedes — which would consolidate requests for discrete bits of code and allow programmers to complete those requests for a cash reward. The requests would include standards for completion and what the client is willing to pay for it. The system would be designed to make the transaction as friction-free, lightweight, and unambiguous as possible so that doing small-scale contracts would be easy.

Here’s what it might look like from the client’s side:

  • Let’s say I’m working on Bibliofile, my application for tracking what books I’ve read. I decide that I want to add a new statistics page that shows monthly trends in my reading, but that writing SQL queries has never been my thing. I could do the research, learn how to do what I want, and write it up myself, but that’s for chumps! I’m an Archimedes client!
  • Because I know what I want this section of code to do, I write the necessary unit tests using the standard testing frameworks. I also add a specially-formatted comment in my code that indicates that I’m putting it out for contract, how much I’m willing to pay for the work, and any other special directives (such as “only make this available to programmers who have completed 5 or more jobs already” or “If nobody has completed this contract within a day, increase the price by $5 every 24 hours until it’s finished.”). Then I check it in to my source code repository.
  • I’ve already configured Archimedes to keep an eye on my repository, so it notices my special comment and automatically creates a new request for work on the site which can be seen by any programmers on the site looking for work. They can look at the language, the task, and the amount being offered, and decide whether they want to work on it. If they do, they can check out the change from the DMZ — a special source code repository that duplicates information from my repository.
  • If the programmer has completed the task and has all the unit tests passing, he checks his code into the DMZ. Archimedes then builds it and verifies that the unit tests are passing. If so, it sends me an email with a link to the code diffs in the DMZ. I can look at the code and verify that it’s not just feeding the tests the values they expect or adding a back door to my program. If it passes muster, I click the “Accept” button.
  • When the submission is accepted, several things happen: the programmer is paid the amount that I offered; the submission is merged from the DMZ into my code base; both the programmer and I receive a reputation point to show that we’ve completed a transaction in an agreeable manner.

I think the use of automated acceptance tests and the ability to generate requests for work without leaving one’s usual development environment would help to make this an attractive prospect for developers who want to extend their reach. (This seems very much in line with the Four Hour Work Week way of doing things.) And the ability to take on programming tasks with little ramp-up or commitment for pay would make this an attractive prospect for programmers, especially those who are time-rich but cash-poor.

There are lots of details and refinements possible, but I think the basic idea has some good potential. What do you think, sirs?