When I talk about open source projects, a huge point of emphasis for me is sustainability. It’s also a point that is quite challenging to wrap your head around; after all, it’s really hard to think about the future with so much going on in the present. Open source projects often model the same pattern that start-up companies have, and for a start-up, thinking about the long term before the short term is hard because, without some degree of revenue and success, there is no long term. Open source projects tend to not be so heavily dependent on the short term, but at the same time, they can’t ignore it. A good project, just like a good company, focuses the appropriate attention on both and considers both in decision-making.
A piece of the sustainability puzzle is bringing more people into the project in various roles. The natural pool of these individuals is people already invested in the project; within a community of end users, contributors will naturally emerge that help drive new ideas and fixes into a project. This chapter will talk about how to grow those contributors so that they become the maintainers of the future.
We’ll cover the following topics in this chapter:
Growing contributors into maintainers is a piece of the larger conversation we will get into in Chapter 9, Handling Growth, but with this chapter, I want to take a deep look at this topic, as it tends to be one of the most dominant struggles for project maintainers. Part of this is likely due to some of the social dynamics we talked about in the last chapter, but also it comes down to having an intentional focus on identifying talent within your community and helping find a place for them in the project.
Before we get into identifying potential maintainers, let’s first chat about why this is so important.
When someone is a new maintainer and sees their personal involvement in a project increase, they are often ignorant to the larger needs a project might have as it grows. It’s easy for them to say, “this is an easy bug fix; I can do it” or “I can spend a weekend writing documentation,” which is appealing when they are so heavily emotionally invested in the project. But what happens when that one bug becomes five, or a weekend that needs to be invested in writing documentation also has to compete with spending time with friends and family or being able to rest and recharge? Having more maintainers lessens that load and helps all maintainers focus on where their energy is best spent.
Let’s look more specifically at some of the main reasons why growing contributors into maintainers is so important to a project, starting with the need to alleviate the stress on current maintainers.
Coming out of the COVID-19 pandemic, one of the greatest challenges is maintainer burnout. Maintainer burnout has in some sense always been a problem in open source, but like many things, has been exacerbated by sudden cultural and lifestyle changes. It also hit hard with the Apache Log4j vulnerability that was big toward the end of 2021, just like the OpenSSL Heartbleed vulnerability many years before was critical for maintainers whose projects did not have good security practices.
With open source software being so ubiquitously used, the pressure on maintainers is at an all-time high. One article in Business Insider (https://www.businessinsider.com/open-source-developers-burnout-low-pay-internet-2022-3) talks about how some maintainers have gotten to the point where they are sabotaging their own projects. This sabotaging is not because of a lack of love for the project but because of the pressure put on them by end users and other downstream constituents, treating maintainers as though they are a full software development shop and not somebody maintaining all the aspects of a project in between different activities.
I’ve worked on a few projects that had great potential but suffered from this. Each one had maintainers with interesting code and a valuable use case, but they struggled to get others involved in the project. These maintainers had the stereotypical “if you build it, they will come” philosophy, but it never panned out. Here’s what tended to happen instead:
All of this adds to stress on the maintainer. Having contributors grow into maintainers can help offset the stress and keep maintainers engaged and excited.
But it’s not all about continuity planning; new maintainers bring new ideas and perspectives as well. Let’s look more at that now.
We talked about the “benevolent dictators” model of governance back in Chapter 5, Governance and Hosting Models. One challenge we illustrated with that model is the fact that the hub of decision-making comes back to one person, and depending on the style of leadership, that can end up either helping drive consensus or stifling other opinions. Either way, it’s hard on a maintainer to be in that role; imagine being that person and every single project decision having to come through you. It’s overwhelming, for sure.
When you bring in new maintainers, you bring in new ideas and energy. In my current role at the Linux Foundation, I work on a team with a group of skilled program managers and directors, each with different levels of experience in stakeholder management, open source project guidance, and general organizational skills. One of the things I like the most is bringing in a new member to the team, as each person comes with different skills and experiences. Some of our team members are Project Management Professional (PMP)-certified. Others come from the non-profit sector. Some might have event or marketing experience. Even a few of us have extensive open source project backgrounds. Most of us have a combination of these skills, and our outcomes as a team give us two key things:
When you, as a maintainer, get comfortable with new maintainers coming into your project, you no longer have to be the fulcrum of everything in the project. Let’s look at how bringing in new maintainers enables current maintainers to step back from the project.
Coming back to the point raised earlier in this section, the “Benevolent Dictators” model of governance back in Chapter 5, Governance and Hosting Models, puts the single maintainer in the position of the sole person allowing the project to “sink or swim.” However, I’ve seen this happen in projects with several maintainers as well, especially if that group of maintainers has been the maintainers since day one.
This becomes a big problem in projects with a perceived high barrier to entry to be a contributor, let alone a maintainer. Media and entertainment space projects I’ve worked with have struggled with this, as specific domain backgrounds in visual rendering and color science were often requirements, in addition to deep C/C++ experience. Because of this barrier, they immediately had the challenge of getting new contributors to the project – which, in turn, created the problem of too much work on the maintainers and lots of stress overall on the project.
What I have started to see as a trend in the case I just illustrated is new contributors emerging that do meet the requirements, from two general categories:
For a maintainer to step back, they must feel comfortable doing so. In industries such as the media and entertainment, there is a small community of people who tend to move from company to company rather than floating between multiple industries. I will note that long-term, the pattern of “tapping the same well again and again” is not sustainable. Still, as a starting point, it creates the right culture of bringing in new maintainers and transitioning leadership, which can often be hard for the initial leaders of a project.
Another part of enabling maintainers to step back is thinking about how to best optimize the time of a maintainer. As open source projects I’ve worked with start to hit maturity, one of the best ways to help scale growth is building out documentation, training, and certification resources that enable mass education on the project itself. Building these out is a lot of work, and something we’ll discuss in more detail in future chapters, but it also requires someone with deep project knowledge to direct and lead for it to be successful. If the maintainers spend tons of time doing singular enablement, meaning responding to forum posts and bug reports, they are caught in a never-ending cycle. Having new maintainers who can lead those activities effectively lets those other maintainers take on “higher-level activities” such as this, which helps the project grow and scale.
Stepping back as a maintainer can result in shifting roles and responsibilities, letting the maintainer focus on specific areas with their available time, but it can also be a path for succession, meaning a maintainer leaves a project entirely. As a maintainer, there is no requirement to be part of a project for life, just as in our careers; we aren’t wedded to a single employer or job for life. We might even want to retire someday; Guido van Rossum, the founder of Python, has been able to step away from the project and retire, with Python continuing to grow and evolve as a key programming language. Having this foresight as a project leader helps you set a course for how to get there while ensuring the community and its work can continue.
Hopefully, this has given you enough perspective on why this is such an important focus for a project. Let’s now jump into our next topic of how to find contributors with the potential to grow and mentor them to success.
Identifying who among the current contributors will be a great future maintainer is the hardest part of getting new maintainers. In the early days of a project, or for a less experienced maintainer, everyone showing up looks like a possible maintainer. That’s not only overly optimistic but can also deter people from becoming a contributor. Remember that often contributors and end users come to a project with the “scratch-your-own item” mentality and doing work in a project for a maintainer likely isn’t that itch.
At the same time, as we will learn more about in Chapter 11, Open Source and the Talent Ecosystem, contributors may also have the motivation to gain development experience or even be part of the project leadership in time to open up their future employment opportunities. As a maintainer, know that you don’t have the responsibility of career development for a contributor looking to become a maintainer, but if interests align, then it could be a good opportunity for the project and you as a maintainer
Let’s start on the journey of identifying future maintainers by looking at what qualities you should look for.
Early in open source, when it was viewed as more “counter-culture,” we had the idea that open source leaders resisted the concept of leadership. Leading an open source project is much harder than leading a team of employees. For one, contributors can bail out at a much lower threshold than an employee can, as there is rarely any economic impact on the contributor. Secondly, these contributors don’t come with any vetting process ahead of time; they see your project, like it, use it, and contribute to it as it fits their needs. This requires a maintainer to look at both the technical and soft skills of the individual to see how they could evolve into being a maintainer.
Let’s break down the skills into two categories – technical skills and soft skills. Here are some of the typical ones I see:
Technical skills |
Soft skills |
Knows the code base well |
Organized |
Understands the technology |
Good communicator and writer |
Can debug issues |
Problem solver |
Good software development skills |
Curious thinker |
Table 7.1 – Technical skills versus soft skills
Being a maintainer is one part technical management and another part people management, which requires soft skills. The technical side is usually fairly trivial to evaluate; look at the code contributions made and you can quickly see whether the person is a good software developer or not. However, for the soft skills side, there isn’t one place to look and evaluate; you’ll want to review a number of different places:
Knowing what qualities a good future maintainer has is a good indicator of which contributors could be future maintainers, but know that many of the preceding questions can’t fully be answered upfront. As you build a relationship with the person, you learn more about their style, personality, work ethic, technical skills, and more. Additionally, the project might have some excellent documentation and governance written down, but there is still a fair amount of “cultural knowledge” in the project, so the person will learn about the current maintainers’ style, personality, work ethic, technical skills, and so on over time, which will determine whether this is the right fit for them or not.
Mentorship is a great tool here, as it gives both the prospective maintainer and current maintainer that space to determine whether the fit is there; let’s learn more about that now.
One of the biggest challenges talked about with organizations is hiring great talent. As I spoke about in the previous section, both the organization and the employee need to see whether there is a mutual fit. Open source projects are no different; each has a different style and culture, which aren’t right or wrong, but not everyone is a great fit for each one. A great way to discover this for both maintainers and prospective maintainers is through mentorship.
One of the groups I work with, Open Mainframe Project, holds a summer mentorship program. The goal of this program is to bring in students and those in career transition to work on one of the open source projects in the mainframe space, with the anticipated end goal of both good contributions to the project and involving the mentee in the industry and the project going forward. The project has seen this work out great for bringing in new persons to the mainframe industry, with many taking jobs in the mainframe ecosystem post-mentorship. For projects, we’ve had three great examples of a mentee getting involved and taking leadership roles in the community:
These examples illustrate formal mentorships, but informal mentorships work just as well. Early in my open source career, I built the PHP Windows Installer with support from the current maintainer of the Windows support project for PHP. This person provided me with some advice and guidance on how PHP is best installed and configured on Windows, helped validate my approach, and then worked with me to get the code into the project itself. You could use this same pattern for getting people engaged in other aspects; I’ve seen projects that might not have a strong Continuous Integration/Continuous Deployment (CI/CD) environment have someone step up to help, and this person has become a maintainer of that work with the support of other maintainers. The main idea here is that there is an interest for the person, a need in the open source project itself, and the opportunity to work together on something that gives each party a good sense of what working together is like.
As mentoring and shadowing continue between a current maintainer and a potential future maintainer, you get a better feel for whether this contributor will serve well as a maintainer. Let’s now look at those conditions.
Mentorship can be a slow path. You don’t want to overwhelm yourself or the contributor too much, as it will become frustrating to you both. On the other end, if the contributor isn’t getting involved in the maintainer group much, they will become disinterested and drift away. Mentorship done well is an intentional process, with both the contributor and the maintainer setting clear goals and timelines to ensure the expectations are clear while having good communication to know how things are going and address concerns early on.
Sensing the moment at which a contributor is ready to become a maintainer tends to be more of an “art” rather than a “science.” There are some signals to look for to best gauge how things are going – let’s look at some of them now.
Each mentorship and project is a bit different, but you can generally look for a few signs to tell whether things are going well; here are some:
Building on that last point, a great example in a different domain is being a sports official. Recently, I got involved in being a certified volleyball official, and one thing that impressed me is all the good and great referees who constantly work on improving their skills. It might be that they are good at recognizing net faults but aren’t good at recognizing alignment issues, or perhaps they understand how to properly assess sanctions but aren’t as good at back-row awareness. Officiating has multiple aspects to it and can be demanding, but the way you improve is by recognizing what you’ve done well and not as well and setting a plan on how to improve on each skill. Becoming a great official requires humility, recognizing the skills you need to improve on and having the desire to improve.
The same is true of being a maintainer; great maintainers are made over time. The domain and scope of a maintainer stretch across deep technical knowledge, public speaking, and community management; you will rarely be good at all of these at first, but over time, you improve in each area. All maintainers go through the same struggles and learning experiences, but much like the examples with a volleyball official, the great maintainers go through those experiences, learning how to improve and grow.
We hope that mentoring a potential maintainer goes well and that they develop into the maintainer role and become an asset to the project, but it doesn’t always end that way; how do you manage a situation where they may never be ready to be a maintainer? Let’s look at this situation and see how to handle it gracefully.
Sometimes, even with the best of mentors, the contributor isn’t a great fit for being a maintainer. It could be the person is a poor communicator, or perhaps disorganized. Maybe the person’s personality isn’t a great fit for the project community. This doesn’t mean they are wrong for the project, just not right for the role. And that’s not a permanent status; over time, people grow and change (as the project does as well) and the fit might be better at a different stage.
Some tips for managing when it might be good to end a mentorship include the following:
Remember – being a maintainer isn’t for everyone. Even if someone has the aptitude to be a maintainer, it doesn’t mean the interest is there. Another thing to remember is that moving from being an end user to a contributor and then to a maintainer isn’t per se a career path, and not becoming a maintainer isn’t a failure. There might be other roles the person might have within the project community; perhaps they will be out there answering questions or writing blog posts. Be appreciative of any contributions people make to a project because without them, it would fall on you.
If your goal is to have a successful, sustainable open source project, thinking about how you develop your project leadership over time is crucial. As we spoke about in Chapter 2, What Makes a Good Open Source Project?, and Chapter 5, Governance and Hosting Models, end users look at how a project is run as much as the code itself. A project might have an amazing code base, be technically innovative, and solve the exact problem an end user is looking to solve, but to use it as a critical part of their infrastructure, they will want to make sure this project is maintained for years to come. As a maintainer today, that might not seem like a big deal, but after years of maintaining a code base, answering questions, fixing issues, and doing releases, being a maintainer can lose its luster. The only way to make a project sustainable for the long term is by bringing new maintainers into the project regularly.
One of the main stressors on maintainers, as well as open source projects in general, is conflict. Conflict is a sign of a healthy project; it means you bring diverse opinions and perspectives to help a project have better outcomes, but conflict can be a stressor, especially when that conflict becomes negative. Let’s look at strategies for dealing with conflict in our next chapter, Chapter 8, Dealing with Conflict.