What Do Open Source Software Maintainers Do?
Tags: opensource, javascript, babel, eslint
Published: 2020-04-21 04:30:38

## The Fundamentals

In some ways, maintaining an open source software project is very similar to being a software engineer working on a closed source project at a company. Just as I did during my work as a web developer at my last job at Adobe, I work with others to make the project the best it can be, writing code, reviewing others’ code, and debugging and fixing issues in the codebase. The basics of writing successful software are fairly time tested and universal, but writing and maintaining quality code is only the beginning.

## Doing All the Things!

Most open source software projects are maintained by a small group of passionate volunteers. As the user base of the project increases, so do the amount of hours and different kinds of expertise needed to ensure the project continues to thrive in the fast-changing world of web development. This can include (but is not limited to) triaging bug reports and feature requests, handling security vulnerabilities, maintaining documentation and a website, running social media accounts and mailing lists, maintaining infrastructure for running CI builds and releases, working with foundations, running and attending team meetings, managing additional services such as a community chat, and fund raising. I’m sure I’m forgetting some things in this list, but you get the picture! There’s a _lot_ that goes into ensuring a project survives and can continue serving the community as best it can.

## The Balancing Act

Speaking from experience, the longer I do this, the more hats I have had to wear and the more I have had to learn to balance all my responsibilities against each other. In my day-to-day, I switch between acting as project manager, QA, support, individual contributor, mentor, community manager, dev ops for our infrastructure, and web developer for our website. It’s a lot to do, particularly for those who are volunteering their free time to a project (which, again, is the majority of maintainers).

In the first few years of my open source journey, I was working a day job as a web developer and spending my evenings doing open source. While I was able to learn a _ton_ in a short period of time, this predictably led to burn out and eventually some health issues. I then had to decide between my day job, open source, and my health, and ended up scaling back my open source work. I stuck to this path for a few months, but eventually decided to take a leap of faith and forego the stable web developer career track I was on and try to make my open source work my full-time job. 

It’s worked out so far – and I feel extremely grateful for the community support of both ESLint and Babel – but I want to highlight that my story is not currently the norm. Many projects (yes, even widely used, popular ones) are being maintained by folks that are struggling through the same challenges I faced. Who could blame them for deciding to hang it up and focus on their careers and personal lives instead? How do we, as a community of software developers, ensure that the infrastructure we use to build our software stays alive and well into the future? Empathy and support for open source source maintainers is not only in the maintainers’ best interest – it’s vital to the health of our software products and ultimately the people that rely on them.

## Moving Forward

There are only a handful of others walking this same path as I write this. The advent of platforms and services like Patreon, Open Collective, and GitHub Sponsors has paved the way for all of us to try to start solving the problem of sustainable open source, and my hope is that our community continues to invest in solutions to support maintainers and allow others to not have to choose between their well-being and building the infrastructure that so much of our critical software is built on.


Originally posted on [my personal website](https://kaicataldo.com/writing/2020-04-21-what-do-open-source-software-maintainers-do).