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?

6 Comments

  1. JasonY
    Posted May 9, 2008 at 9:49 am | Permalink

    Brilliant. I think you should copyright the idea and the sue the pants off of anyone who tries to use it. Who needs to change the world when you can get rich off of IP piracy?

    Ha. No, but seriously, I think this is has the potential to be a real breakthrough idea. Is it original? If so, color me impressed.

    In light of the fact that MIT has put some of their standard programming classes online for free, there is no limit to where this could go. It is now possible for a poor child in a destitute country to get the equivalent of a fairly good (self-taught) education in programming, and a system like Archimedes (inspired name) could leverage (ouch!) that into a life-changing prospect, while at the same time speeding up the rate of progress. My only concern is that it would devalue the education of those unfortunate folks who have put themselves into usurious debt to attend the MIT classes in meatspace. But hey, the wheels of the future crush the slow, I guess.

    Is there anyone who you could talk to about this? I’ll link it from my blog, but I doubt any of my 30 daily readers is in a position to get this rolling.

    Great brainstorm, Sean. Glad I knows ya.

  2. Posted May 9, 2008 at 9:49 am | Permalink

    I love it! The unit tests in particular are a great idea for speccing work. A realy “duh!” moment. I’ve heard TDD described as contract-driven development – this just makes it a “real” contract!

    You might, in addition, provide hooks in the service so that a user could ask, say McAfee or Symantec to pre-check submitted code for virus-y bits. Just a thought.

    I still love it! Get that man an angel investor, quick!

  3. Posted May 9, 2008 at 10:04 am | Permalink

    Thanks for the comments! I love that I can think of something on the way to work and have great, intelligent feedback (from great, intelligent people) within an hour or two.

    @JasonY: Yep, it’s an original idea, though a bit of judicious googling appears that others have tried somewhat similar things. I haven’t seen that any of them provided the hooks into a source code management system, though.

    Your MIT scenario is exactly the kind of thing that I had in mind! People around the world don’t lack time or intelligence, just good ways to put those resources to us.

    I’m not sure offhand where one would take this to get it going; I would guess that grants might be a good approach, but I’ve no experience with such things.

    @Steve Ivy: The virus-checking is a great idea! Thanks for that!

    I like the unit-testing too — lets the computers do more of the work for us! I also thought that as part of a Phase 2, it might be cool to build tools to make generating acceptance tests easier for non-programmers, so that managers or people with product ideas could specify them without learning a unit-testing framework. That’s considerably more ambitious, though.

  4. Posted May 9, 2008 at 8:11 pm | Permalink

    Now that I’ve actually read your post, your idea makes a lot more sense to me. What I was trying to say at lunch is that programming is definitely a great skill to learn, but I was wondering out loud when we might hit a saturation point where encouraging 3 world countries to amass armies of independent programmers might actually do more harm than good. We have so much productive capacity in the world today, we really need to find a way to steer it in a way that is profitable for the individual, beneficial to society, and sustainable in the long term.

    At some point there could be too few projects and so many reasonably skilled programmers that the price would go down, and/or these people who invested months and years of learning would find their skill gradually less marketable. I really liked your idea and was just trying to think of other skills that could be incorporated into this sort of system, so that a variety skills would be developed and a variety of opportunities would available.

    The thing is, those projects can develop in parallel and don’t have to be a part of Archimedes. For this specific niche, your idea is very innovative and seems worth looking into.

  5. Posted May 20, 2008 at 9:24 am | Permalink

    Other than the hardware part, how does this differ from Amazon’s Mechanical Turk.

  6. Posted May 20, 2008 at 9:55 am | Permalink

    @Patrick: Good to see you!

    MT is a somewhat similar concept, though more generalized in execution. In fact, given that MT has some good tools for creating HITs, one might be able to implement Archimedes on top of it.

    The things that make Archimedes especially attractive to programmers (or at least to this one) is the ability to create requests for work (HITs in Amazon’s parlance) without breaking programming flow. Even if it were build on the substrate of MT, one would still need a piece to watch source code checkins, and to mediate between the system where that lives and Amazon’s system for doling out the work. (And even then, I’m not sure one could verify that the submitted code passed the unit tests and the human acceptance review before giving the work a thumbs-up on MT.)

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*