Pages

09 June 2010

Random Hacks of Kindness

Pure kindness

My last coding week-end is worth a few notes. I participated to the Random Hacks of Kindness event in Sydney. The idea is to gather techies and make them code during the week-end on software projects that help the organisations working on humanitarian crises, like the earthquake in Haiti.

I joined the event thinking that, for once, the code I would create would have a direct impact on people lives! Not that working in banking, telecom, or testing tools has no benefit, for no one, but this is guaranteed to help.

First of all I want to say that the organization was flawless, with a very nice room at the University of New South Wales and all the network equipment you would expect: a proper wifi network, video and audio facilities, an additional meeting room, a nice terrace to appreciate the view around and get fresh inspiration/air.

It is also worth mentioning that food and (non-alcoholic) drinks were provided in abundance (maybe because the crowd was less that expected :-)).

Then I must say that one big success factor to the event was the incredible energy conveyed by Heather, a (completely jet-lagged :-)) Canadian girl who animated and coordinated the teams locally and across the continents. A special thank also to Martin Bliemel (from the University) who co-organized and Tolmie for the videos and pictures! (including a video of me if you crawl the links below well enough, you should find it!)

"Crises are chaos, so expect chaos"

One day before the beginning of the week-end the list of projects was published. I had a quick look, the list was huge. My first thought was: "wow, a lot of Python over there. How can I be effective in 2 days only?".

I also realized that most projects had very vague specifications, some looked more like brainstormings indeed.

Eventually, when I arrived on Saturday morning, I had really no idea where I could bring any meaningful contribution, so I just followed someone who had chosen one project and seemed really motivated by it: the PersonFinder project. It turned out that he eventually went on to something else, leaving me and 2 others continuing the project.

But that's the rules of the game. As an introduction for the week-end, Heather reminded us that crises situations generate a lot of chaos, so that's only normal that we experience part of that during the week-end.

For me, that chaos took the form of a long "What am I supposed to do for God's sake?!!" during most of the Saturday (you can read that here).

We did a lot of research: what is already there? what's valuable? How could it be done? It was like a mini business plan for the day. Of course that's a bit frustrating for a software developer who wants to save the world by coding like a madman, but I kept thinking to myself that laying down the foundations of what could be a productive coding session for others, if not for me, was definitely worthwhile. So that become my objective for the week-end:
  1. define exactly what needs to be done
  2. prepare the environment (development, test)
  3. code at least a single, well-defined, small feature
Another way of saying it: reduce the chaos,... Actually most of that became clear to me after I had a discussion with Alice, from the DC team, who had a well-defined idea of where we should go with the project. If only I had that discussion to start with,...

I learned a lot

Let's say it straight, I failed to deliver even a single small feature. But I learned a lot! On the "functional" side, I learned that:
  • there's a whole ecosystem of "crises software" with platforms like sahana (PHP, Python) or usahidi (PHP)
  • the integration of social web services is only at its infancy. Website like pipl do not offer a public API for example. There a Google Social Graph API, but it's still in the Labs.
  • there is available data on the web which is incredibly difficult to grab. For example, knowing my full name, you can easily get my personal address. But for that, you have to know in which country I live and which white page directory website to use. There's no generic query for that kind of search. Hmm, I'd be interesting in knowing which "semantic web" initiative or magical pattern language addresses that in a near future
  • Web 2.0-this, Social-that, this is a bit of chaos too. Quizz question: what's Google Wave? An email client, a wiki, a code-review tool, a forum? Not only the frontiers and definitions blur, but the amount of possibly related data grows exponentially. Managing all that, including in "crisis" environments will require a lot of "social" heuristics, mixing all kind of CS and social knowledge
The technical side was very illuminating too, as I'm way behind the curve in terms of web technologies:
  • I learned how to install and deploy a Google Web App on the Google App Engine (GAE)
  • I realized that my Java skills were useful after all, with the GAE
  • I read about the Twitter search API (kudos, effective and well-documented)
  • I had a look at JSON as a data format
That may seem silly but for the first time, the whole notion of webservice started to make sense to me!

And now?

Well, the features are still not fully delivered. Thanks to the heroic work of the DC team, we've made some progress but nothing has been yet approved and reused. Can we do better next time? Sure we can:
  • we need to have "Product Owners". People who know what they *want* to be done and are able to specify it. Then they can validate the deliverables and can be a stable point of contact after the event is finished
  • we need more preparation on the projects: for example, what to install for development and testing, some hints about what could be used in the solution. I'm killing a bit the fun and brainstorming aspect of the event here, but the next point is
make a clearer separation between:
  • "proof of concept" projects: show me this could work
  • "brainstorming" projects: what could be cool
  • "prototype" projects: cool + some code
  • "feature" projects: add a new functionality
  • "problem-solving" projects: fix something by using a brilliant algorithm for example
  • "specification" projects: prepare the problem statement for a "feature" project
I think that by making clear what are the expectations and deliverables on each type of project we give more chances to the community to converge towards something eventually useful and durable.

My personal dilemma is that I would love to contribute more to what was started but I have a few open-source commitments that are taking priority over this at the moment. On the other hand I will be really happy to be involved next year in the preparation of the event so that everyone can get the maximum out of it. And that's because, as one of my colleagues said at work:
These projects have a spiritual meaning