Open Source is Easy. Community is Hard.

Open Source is Easy. Community is Hard.
Bandwagon movie poster

Open source is awesome. I’m a card-carrying zealot; a vast digital public commons has been created that seems to fly in the face of basic economics. It’s one of the great achievements of the technology era.


We’re in the sustainability business here in the international development sector. Despite what I thought coming into this gig, open source is not synonymous with sustainability. If you think about it, any computer software is the antithesis of sustainability. Hardware changes. Bugs are found. Hackers figure out ways to break it, totally ruining your weekend.

Commercial providers solve that problem by paying developers to work on these problems day in, day out. It’s part of the revenue model, of course - pay for subscriptions or buy the new version when it comes out. How does open source do it? A community. (No, not that one.) Anyone has the ability to download and improve the code. “With enough eyes, all bugs are shallow” is hory wisdom from the open source world. Great; totally makes sense. But how many eyes actually do you have? How big is your community? “Putting the code on GitHub” is not a sustainability strategy.

Open source seems like the right approach for international development. Code developed belongs to the world; taxpayers fund it, and it doesn’t create a profit for anyone. Great. But who’s going to sustain it after the initial funding grant ends?

If we’re being honest with ourselves, the field of international development is littered with the wreckage of well-intentioned – and often well-executed – open source projects that have not been maintained after the initial funding ran out.

Here’s our take: building software is relatively easy. Building communities is hard. Go with an existing, successful project, and then help make it better for the international partners you’re trying to help. NDI used this model of improving existing open source software with a couple projects we’re really proud of.

We’ve worked closely with the core development team behind Tails, a super-secure bootable Linux operating system, to help them add some important features, from core changes like persistence to enable saving files to much more pedestrian things like saving printers. (Usability matters, people!) The end result: a secure, bootable version of Linux much closer to what our partners needed - and one that NDI doesn’t need to maintain. Tails is still going strong, 3 years after NDI last was able to give them any financial support.

CiviCRM, a popular open-source Constituent Relationship Management system, is another example. Civi is great. Civi is powerful. Civi is… complex. We wanted to try and make it as easy as such a people tracker could be. Rolling our own CRM wouldn’t be a good idea. So over the last years we’ve bankrolled improvements to Civi including SMS integration, a GUI for casework management, and geographically-based access control. Again, the large existing Civi community is able to provide the support to keep these improvements up-to-date.

But Civi is still too complex to be easily usable by most of our partners; in-house user testing made that painfully clear. We decided to address that by producing a series of Civi extensions that simply disable or mask functionality; this is what we use to create our CiviParty and CiviMP variants of CiviCRM. Again, we’re not building anything new, simply using a lightweight and flexible framework that we can update as the core product changes.

Working with existing products isn’t a panacea; maybe the thing your partners really need simply doesn’t exist. However, any new products that international development groups produce need to be - wait for it - sustainable, by us and our communities.

NDI is confident we can do that with our Elections DemTool, which is the one major FOSS project we’ve rolled on our own, as we couldn't find anything out there that really matched the specific needs of our partners. NDI supports loads of elections every year, each of which can be an opportunity for us to update and improve this system on our own - though help is always welcome. 

We all can be susceptible to thinking it’s faster and easier to build something custom than jump into the messiness of an existing project, and sometimes we’re right. But unless you can create a new community with your shiny new tool, you’re unlikely to be able to bear the load for all your users in the future - any you may leave them in worse shape than if you had never tried.