This post originated from an RSS feed registered with Agile Buzz
by Martin Fowler.
Original Post: Bliki: CharityCodeJam
Feed Title: Martin Fowler's Bliki
Feed URL: http://martinfowler.com/feed.atom
Feed Description: A cross between a blog and wiki of my partly-formed ideas on software development
Over the last couple of years several of my colleagues have been
organizing code jam[1] events where developers
get together to write software for charitable causes. A good
example is a regular code-jam in New York that works on RapidFTR. Chris George, a ThoughtWorker
based in New York, helped organize a one-off event in New York in
August 2010. The group didn't get as much done on the day as they
had hoped, but in a bar afterwards decided to try to get together
more regularly. Since then they've been meeting every week. It's a
small group, still mostly ThoughtWorkers and friends, with a core
of 3-4 people rising to a dozen when we've had a big project in
town.[2]. (Chris is happy to have more people
join the group, so if you are interested drop him an email.)
Many people have found these events to an enjoyable way to use
our skills for purposes that we find rather more fulfilling than
many day jobs, and a way both to learn new skills and learn from a
different group of people. So I thought I should share our thoughts
on how to set one up.
The first thing is to find a suitable effort to contribute to. We
look to contribute to projects producing open-source software for
NGOs - the open source model fits well for such organizations. The
two that we've built up most of a relationship are RapidFTR and
OpenMRS. RapidFTR is a system
designed to help reunite families after a natural disaster or other
calamity. It allows people to quickly input information about either
a lost child, or a child found without parents - then provide search
facilities to match them up. OpenMRS is an open source medical records
system, designed to support various forms of health care delivery
work. It's used by many health care groups all over the world (and
not just in the developing world).
Like New York, most of our code-jams begin as one-off events, a
single evening or all day event. These days we advertise
heavily, and hope to get a good sample of local developers to come
along and take part. One-off code jams like this don't usually
produce much useful software, since they are too short to really
accomplish much. But they still have value. Firstly they generate
awareness, exposing the local development community both to the
specific project and the notion of working on open-source efforts
for NGOs. More directly they can be the seed for an regular code
jam, so it's useful to put together activities that will encourage
getting back together later.
A regular code jam gets together on a schedule, with core of
people who come most weeks. Such a group can make some significant
contributions to a code base. People come because they get to work
on some different technologies, with a different group of
co-developers, to an audience that (unlike most open-source
projects) isn't just other developers.
To make meaningful progress, you need someone to
prepare for each code jam by breaking down work-items into something
small enough that people will be able to finish them during the time
at the jam. Whatever people may say and hope, they'll rarely work on
the project outside code jam hours, and the schedule is too
infrequent to want half-done things hanging over. Small tasks allow
teams to make perceptible progress each jam - which helps keep
motivation high. We like to put these tasks online before each event
so people can prepare if they want to, or just get a feel for what
we're working on. We also set up a mailing list to keep up regular
communication on the jam and support anyone who does contribute
outside of the jam.
Our regular code-jams succeed best when the group has a couple of
champions who take the lead in organizing the event. It's best to
have more than one champion, to cope with the work load and provide some
resilience if they are absent for a while.
We try to ensure the development environment is set up to allow
people to come in quickly and become productive. Much of this is the
same kind of thing that we do on projects anyway to enable continuous
integration - make sure that installation and build are
automated so people can quickly install the code base and get it
working. It's important to mention this in the advertisements for
the event - people are often put off from coming due to a concern
that they'll never get started due to these issues. Even so, make
sure that each event has at least one person who is familiar with
the code base and build environment, she can then help others find
their way around. Often someone will give a short overview of what
the system does and how it works for new people at the start of the
jam.
We usually provide food to each event - that's an easy thing
for us to do as a corporate contribution. As any XPer knows,
sharing food when working is an important part of gelling a team.
So, if the idea of a code-jam appeals to you, why not give it a
try? Find a suitable project to contribute to, a group of a few
people to act as a core, and spend a few sessions to get things
going. (There are developer guides for both OpenMRS
and RapidFTR to
help you get started if those projects appeal to you.) If you get
going on a stable basis - post in a blog somewhere so we see what
code-jams are avaialable and learn more about how to get them going.
1:
"Code-jam" is a problematic name for these events. As far as I can
determine, the term "code-jam" was originally used for
competitive events where programmers would try to best their
peers in some programming challenge. The events I describe here
are the utter opposite of this, on many levels, but have
attracted the same name.
2:
When one of the team went down to our Porto Alegre office, he got
a group contributing there too.