Sustainable Open Source

Or, the importance of being good to each other.

Before we begin…

It’s a new year and I’m going to open with a bit of a personal “2015 retrospective” to frame these thoughts. You’ve been warned.

2015 was a huge year for me, and also I think the whole JavaScript community that I enjoy being part of so much. On a personal level, I smashed my “attend an International Conference” goal and was privileged to not only go to the first React Conference in January, but then speak at two amazing conferences in Paris and Nashville. Along the way I met a bunch of amazing people I am stoked to call friends.

I also doubled-down on my commitment to open source contribution, node.js and React. I publish at least two of the most-downloaded React packages (classnames and react-select), two major React UI frameworks (TouchstoneJS and Elemental UI), and my primary project KeystoneJS has become a major (possibly the major) CMS platform for node.js.

As of today I’m on a GitHub Streak of 865 Days and am ranked the 28th most active GitHub user worldwide, by Paul Miller’s algorithm.

Meanwhile I’ve smashed a full-time job helping run Thinkmill — a web and mobile app development company in Sydney — and brought several major commercial projects to life, spoken at local meetups, started running React Sydney, mentored at JavaScript Study Group and NodeSchool events, and somehow maintained a happy marriage, friendships and life in general.

So… will I burn out?

Bigger things have happened in the world of JavaScript in 2015; that scrappy little project 6to5 has become Babel, and made the future of the language we write in accessible to all.

Bundling tools like Browserify and Webpack have become the new standard, bringing npm and the powerful node.js ecosystem to the front-end.

React.js went mainstream, changing the way we think about UI development for the web. React-Native and NativeScript were released, changing the way we think about mobile development.

Maybe most important of all, the node-forward movement and io.js project achieved the most optimal of all possible outcomes and became the new Node.js with v4.0.0 and the creation of the Node.js Foundation (I can never express enough respect for the people involved in this).

But two major themes have also come to the front, dangerous and with a scary/beautiful symmetry: JavaScript Fatigue and Open Source Burnout.

Fatigue

This has been well covered, with many write-ups, tweets and rants dedicated to the difficulty of keeping across such a rapidly developing ecosystem.

It can be overwhelming; learn something, and find out tomorrow there’s a new great idea. Choose a framework and realise next week everyone’s jumping on a new bandwagon. Integrate a tool and hey — the next major version breaks everything. Or just learn the language and, whoops — all the examples are using (arrow) => functions now! wtf even are they, anyway.

It’s hard to reconcile the difficulty and time investment needed with the “hey, you’re getting this for free, and everything is amazing, and you don’t even have to support old IE anymore so seriously shut up” argument.

Both perspectives are valid. But the vitriol! The indignant, entitled, bullying and ungrateful sentiment that humans are capable of expressing! It sickens me. And worse, it’s the biggest contributor to our problem #2:

Burnout

The concept of open source burnout is not new. The fact that open source development is rarely sustainable is news to, well, nobody. But this year it’s been a real talking point, and I’ve been thinking about it a lot.

Pick a handful of “top” open source developers, and there’s a good chance some of them have or are dealing with burnout. And that’s sad. Because the way I see it, these people are providing incredible value to our community, funded substantially by their own personal energy. And without them, we would be much poorer.

Where would we be without Sebastian’s herculean effort to build Babel and shape it into the tool it is today? How much value has Ryan Florence and Michael Jackson’s work on react-router provided the React community with? How much have we all benefited from Dan Abramov’s perspective-shifting hot loader and redux projects? Once I start naming names I should list a hundred more, but I won’t.

We’re all, whether we are excited or fatigued by the pace of development, significantly enriched by these open source heroes. And it costs us nothing. They’re our golden goose.

And you know what? This golden goose is fragile. Easy to feed, easy to kill.

Imagine if Sebastian gave up on Babel back in early 2015. Just stopped working on it. Imagine if Michael and Ryan never finished shipping react-router 1.0. Imagine if Dan hadn’t maintained his motivation to complete those redux egghead tutorials. We would, as a community, be poorer.

Note: I’m not calling these people out because these things might have happened, or lobbying specifically on their behalf; they’re simply friends who I’ve watched deal with incredible load in 2015 thanks to their explosively popular projects, and I hope they don’t mind me picking on them

Maintaining an open source project is hard. It’s time consuming, delicate, and driven by creativity and passion. That’s true whether you're an independent author or employed by a major tech company. Everyone has limited time on this earth and limited energy for creation.

If somebody offers you some of theirs, respect it.

How we kill the golden goose

The biggest danger I see to open source innovation is entitled users. Open source is fun; I love it. I share ideas with the world and people engage with them. I invest effort and people benefit from that. It’s exponential value creation. That’s what drives me. And I don’t think I’m unique.

But some — and even just a few — bad actors can easily ruin it. Open Source authors don’t work for you. They owe you nothing, yet give you so much.

If you show up in a repo rudely demanding something, if you trash-talk a project, or worst of all if you personally attack someone — for whatever reason — you’ve just cost the world something of value. Maybe it’s 5 minutes that could have been spent fixing an issue. Or maybe it’s much more.

We all need to defend against this culture of entitlement. Protect our vibrant community, which is sourced all over the world. Thank people. Let them know their work is valued. Make an effort to contribute and help.

If everybody engaged with a mentality to add more value than they receive from a project, we would see much less stress and burnout among authors.

On a larger scale, there’s another discussion to be had about how to make major projects that start personal but become commercially valuable en masse sustainable. But until we crack that, and even after, every single person counts.

Every interaction either adds to, or subtracts from, the value of the ecosystem as a whole.

On privilege

I am incredibly privileged. Some parts luck, some parts self-made, but there it is. I have, to date, only had positive interactions on my projects. And I’ve been joined by some fantastic collaborators who make them more sustainable.

Professionally, my company was set up in part to sustain R&D and community contribution — in the form of open source, learning, teaching and community involvement. It’s by design that I am able to sustain the work I do. Not everybody has this opportunity, so I try and make mine count.

Companies supporting open source, whether they’re Thinkmill, Facebook, Google or Microsoft, are incredibly important. Thankfully by 2016 this seems well accepted to be commercially viable. But we need more of them, and better ways to connect resources to indie developers.

Personally, I’m also very lucky to have a wife who encourages what I do. I never take that for granted, and anyone who has ever thanked me for something I’ve done should probably thank her too :)

The most difficult thing I have to deal with is stress and guilt. I just can’t respond to every issue, or review & merge PRs straight away. And if something’s complicated, sometimes I just move on to a simpler task and leave it for another day.

It’s difficult. I have respect for every moment someone has dedicated to one of my projects; whether they’re just trying to use it, or whether they’ve put hours into a PR. But I need to take care of myself as well.

As I write this, I’m on holiday in New Zealand — the first major holiday we’ve had since getting married. Yet I’ve still kept up some level of responsiveness across my projects.

Why? because I enjoy it.

What you can do

Remember that behind every GitHub account, and every package on npm, is a person. Treat them well, respect them, and (hopefully) you’ll receive the same in return.

Guilt is a common theme for authors of popular projects. We have enough trouble dealing with it on our own, without anyone else adding to it. Just support us instead.

If you are in a position to help a project, reach out. Offer (without expectation of service) support, either monetary or effort. This is doubly true for companies.

And if you’re an author, think strategically about what you’re doing. Before you build something that blows up, make sure it’s going to be sustainable. Seriously, have a plan. Otherwise you may be doing more harm than good.

And if you’re doing something that is sustainable, talk about it. Tell the world what you’re doing, what you’ve achieved, and how you’ve made it work for you.

There’s a lot written about how start-ups succeed, how they scale, how they are managed, etc. Personally, I’d love to read more about how open source authors and projects succeed. It’s another form of contribution, and one which could lead to many more.