Open source is how we create raw ingredients for the digital economy. It's a rough, organic, and hugely important process. In fact, open source represented $143 million of Instagram’s $1 billion acquisition. Yet the role of open source as economic infrastructure is perilous at best — the next Heartbleed could be any day. Bridges don't collapse often, but sustainably maintained open source projects are few and far between. Unless a project has the backing of a benevolent organization, it’s all too easy to fall into a state of disrepair.
I do my part by volunteering several hours each week to maintain an open source project called WP-CLI. Last November, I launched a Kickstarter project titled “A more RESTful WP-CLI” to provide a way for me, a self-employed freelancer, to spend a large amount of dedicated time on WP-CLI and the WordPress REST API. The funding wrapped up last month, so I thought it might be helpful to provide a retrospective on what worked, what I’d improve upon next time, and where I think this is all headed.
We all love #shipping
As a very brief summary of how I used the money:
- Over seven months, I spent 226 total hours on WP-CLI (150 of which were funded by the Kickstarter project) and 111 total hours on the WordPress REST API (92 of which were funded by the Kickstarter project).
- I shipped three major versions of WP-CLI, and helped with three releases of the WordPress REST API v2 plugin.
- In each release, I personally introduced dozens of new features to each project, fixed ten times as many bugs, provided code review, answered support questions, and revised documentation.
There's a very complete project landing page if you’d like to go through all of the details.
“I’d love to get paid to work on open source too”
On the surface, using Kickstarter seems like a great way to fund open source involvement: create a campaign, people give you money, and you get paid to work on your project. It's actually fraught with challenges, though. The more appropriate way to think about using Kickstarter for open source is that you're creating a one-time project for yourself, and have hundreds of customers to serve.
Kickstarter can help freelancers make significant open source contributions
It's worth highlighting the single most important outcome of the crowdfunding campaign: I was able to spend dedicated time on WP-CLI and the WordPress REST API that I wouldn’t have been able to spend otherwise (or at least in such a concentrated period).
As a freelancer, I evaluate every hour of my working day as either billable or non-billable. While I'm fortunate I can already spend a large amount of non-billable time as I please, at the end of the day the time I don't spend on billable hours is money out of my pocket. Kickstarter enabled me to consider open source contributions as billable, and rationalize dedicating a large number of hours each week to the projects.
In hindsight, the timing of the Kickstarter project turned out really well too. Because I didn't have any clients when I quit my full-time job, the funds were a helpful cushion during the slow holiday period, and I had something to work on in January.
It's important to have backers with deep pockets
Incorporating higher contribution levels, which I had primed by chatting with prospective backers in advance, meant the funding leapt forward in huge bounds. Every time one of those contributions came in, it moved the needle in a substantial way, and kept the excitement level up. This also helped keep lower level contributors engaged and willing to participate. I can’t imagine how difficult it would be to try and fund a Kickstarter exclusively on sub-$100 contributions.
Ben Welch-Bolen, who I hadn't met until he snagged the top contribution slot, explains:
What attracted us to the WP CLI Kickstarter project was the higher pledge options that had some meaningful exposure for us to his community, and to him as a resource. Plus it was great to give back to a tool we use ourselves and follow closely.
I consider myself fortunate to have an existing audience willing to financially back my open source contributions. Because of my track record, I was able to put my own social capital on the line as collateral, to “guarantee” the project. If you can’t name fifty people who would realistically fund your project, then you’ll need to have a substantial marketing budget (of time or money) to raise awareness.
Scope in open source is a double-edged sword
While I had an established objective for the Kickstarter, I didn’t have a clearly defined scope. This meant that some intermediate implementation details blocked later features. For instance, you can’t use RESTful WP-CLI to manage menus, because the menu endpoints don’t yet exist in the WordPress REST API.
At the same time, not having a super defined scope meant I could take the liberty to spend some of the time on what I thought was most useful. WP-CLI package management and the documentation portal essentially launched because I burned out working on the WordPress REST API.
Crowdfunding requires a certain type of personality
As far as honoring my commitments to my backers goes, I’d consider my Kickstarter a success. I did what I said I was going to do, on the schedule I communicated. I was able to do this, in part, because I’m a very meticulous person. I produce reasonably accurate estimates, keep track of how I spend my time, and over-communicate with stakeholders.
If this doesn’t sound like you, then crowdfunding might not be a great fit. As a freelancer, you need to know in advance how the work will fit alongside client commitments. As a full-time employee, you need to make sure you're capable of completing the project on nights and weekends.
Josh Strebel, to whom I'm thankful for a great deal of early feedback, thinks:
The open source community is primarily reputation based, WordPress especially. Getting a campaign funded on Kickstarter is about trust. Trust and reputation are shades of the same color so to speak. If you build a reputation of trust, launching and promoting a Kickstarter project should be fairly easy as your peers trust you to execute against your stated goals (their money is used for it’s stated intent and appears to achieve the desired outcome). I do not think you can reverse the order, the reputation in the community must be cultivated prior to seeking funds.
One huge challenge with a Kickstarter project is that you have to do all of the work after you receive the money, which can be really difficult for procrastinators. You're also faced with dozens of stakeholders to make happy, with your credibility and reputation on the line, so you need to make sure they’re regularly kept in the loop.
Most of what goes into open source isn’t very sexy
Contributing to open source isn’t just cranking out lines of code.
I spent a huge amount of the funded WordPress REST API time on discussion, code review, and support. These maintenance tasks aren’t very appealing for crowdfunding, and probably wouldn’t make it very far as a part of a Kickstarter project. People want to fund sexy new features, not bug fixes, maintenance, documentation, etc.
At the same time, this type of work is hugely expensive, and represents a substantial majority of the effort involved in maintaining an open source project.
Fortunately, Josh Koenig has a healthy understanding of where open source fits into his business:
We believe that open source software is a crucial part of the internet's value proposition to humanity. However, at this stage in the development of our company, investments in open source have to be strategic. Any sustained contribution we make has to be justifiable in terms of hour it helps us improve our platform or grow our business.
As such our primary code and sponsorship contributions tend to be down the stack, to projects or libraries that we depend on to run our platform. When it comes to WordPress or Drupal, we typically contribute in ways that will have the most impact for our core audience: professional developers. So that means tools and utilities like WP-CLI, Redis or Solr integration, diagnostic tools, etc.
Simplicity means more time spent on the project
On the practical side, offering consulting-time rewards instead of physical swag helped me keep reward costs manageable. Only two-thirds of backers redeemed their rewards, so I spent a total of 41.25 hours on that part of the project.
As it turns out, Jason Resnick even appreciated the open-ended approach to rewards:
The best part of the project was the ability to choose my own path, so to speak. Kind of like those Choose Your Own Adventure books when you were a kid. WP-CLI can be used in so many different ways for different tasks, it was awesome to be able to just hop on a call with you and one or two other folks that also wanted to learn the same thing, and get the answers to the specific questions.
It also proved helpful to produce a landing page for the project with the overall goal, links to blog posts and milestones, and over-communication on how I was “spending” the money. In hindsight, I wish I had been more diligent about my progress updates and communication about what I was actually working on.
My favorite production trick: I used HTML and CSS to produce a graphic in my browser, and took a screenshot of it — quite possibly the easiest way to create a Kickstarter header image, for you other non-designers.
Kickstarter is only the beginning
Kickstarter is an amazing platform for funding creativity. The next time I launch a crowdfunding project, I'll make sure to:
- Get feedback on the idea from as many people as possible, as a way of generating interest and buy-in.
- Establish a project scope with features people want, while making sure there's ample budget for the unglamorous work.
- Keep the rewards rewarding, and as simple to deliver as possible.
- Over-communicate progress, knowing I have hundreds of customers to make happy.
In the case of WP-CLI, runcommand is my new company to pick up where Kickstarter leaves off.
An increasing number of businesses use WP-CLI as a key part of their infrastructure. Right now, each business has to internalize much of the cost associated with creating WP-CLI-based features. For instance, many web hosts would benefit from offering a web browser interface for running WP-CLI commands. However, there isn't yet a great way for them to collaborate and produce a common solution.