10 min read

The reality of OSS maintainer fatigue

Navigating the open-source jungle: a cheeky peek into the thrills of maintainer mayhem and the art of herding keyboard cats!
The reality of OSS maintainer fatigue

Previously, I made an article on what I call "The Moral Contract": the unspoken agreement between free software creators, whether companies or individuals, and their users, who may also fall into either category.

The spotlight was previously on how companies sometimes exploit free software, prompting certain developers to adopt... let's say, "innovative" business models, ironically breaching the very moral contract they depend upon. If you're curious about that content, I recommend looking back at:

The moral contract
Balancing openness and revenue: navigating the moral contract in the evolving world of free software.

Navigating the relationship between software maintainers and a sea of users can be a tightrope walk that often leads to maintainer fatigue. The scales may seem to favor the user majority, but it's this interaction that can make or break an open-source project. In my experience, the relentless demands and high expectations can exhaust even the most dedicated teams. We need to encourage a community culture that values clear communication, appreciates the craft, and understands the limits of volunteer efforts to keep the project and its contributors thriving.

❤️ Honey moon

Launching an OSS project is often an answer to an existing problem and this is typically how many OSS initiatives take off. The original community cluster usually consists of early adopters, those already well-versed with the ecosystem. Consider a fork, for instance: If you initiate one, you'll likely attract people who felt constrained by the original project and are now excited about this fresh direction. These users won't require extensive documentation; they're ready to dive in, test, and become a solid group of champions for your cause.

This phase is a tremendous boost for developers. It reinforces the belief in the project. At this point, I want to express heartfelt gratitude to all our Xen Orchestra and XCP-ng early adopters. Your enthusiasm and constructive feedback were instrumental in shaping our journey. For any OSS developer out there, my advice is to capitalize on this honeymoon phase: it's a golden opportunity to accelerate development and enhance your project.

📈 Growth phase

If your project gains traction, whether through sufficient sponsorship to allow full-time dedication or through successful sales, you'll naturally expand your community. And rightly so. Your software will begin to reach a broader audience, some of whom may be completely new to the initial user circles, yet they could be sympathetic to the open-source cause. This stage is crucial; it's when you can significantly refine your product based on fresh perspectives that offer insights beyond what you or your early adopters could have envisioned.

It is also the time to establish comprehensive documentation. Without it, you risk losing countless hours rectifying user setups due to misunderstandings of "obvious" issues. Good documentation encompasses not only the "general" usage but also steers the contribution process: clarifying how to report bugs, complete bug reports, and so forth.

🎉 Success phase

Reaching this phase means your community has become self-sustaining, with hundreds or thousands of members engaging with each other. At this juncture, you'll encounter users with diverse experiences from similar software and, possibly, unexpected expectations. They may wonder, "Why does it work this way?" or say, "I'm accustomed to that." It’s vital to provide context quickly so they can grasp the philosophy behind your tool.

There are moments it seems like people searching for a spoon are critiquing your knife, lamenting, "0/10, can't eat soup with it". I know this all too well. Your job is to articulate the intended purpose of your tool. The more accessible this information is, the less you'll have to repeat it. For our virtualization platform, XCP-ng, constantly explaining that it's not a regular Linux distribution but rather an appliance meant for specific use cases has been time-consuming. However, the more we communicate this, the more people understand and stop trying to use it in ways it wasn't designed for.

😫 The onset of fatigue

So, your community is flourishing, congratulations! Yet, with a growing user base come observable patterns that can be taxing.

The majority of your users are well-meaning, but some may not grasp the enormity of the effort behind an OSS project or the nuances of such an endeavor. A lack of respectful communication is sometimes evident, perhaps intensified by the anonymity of digital interactions.

Let's explore the elements that contribute to OSS maintainer fatigue:

🦚 Entitlement

One of the most prevalent issues in open-source projects is the sense of entitlement. Community spaces, whether forums, Discord, or others, often witness individuals who expect immediate fixes for their problems. These users, having never contributed, express extreme dissatisfaction when they encounter issues with the tool they utilize daily, violating the underlying moral contract. Such attitudes mirror those encountered in customer service settings, where there’s always a demand to "speak to the manager."

There’s also a misconception that open-source software should come with 24/7 support and stability, at no cost and with no effort from the user's side. This reveals a fundamental misunderstanding: one either opts for a supported, paid "turnkey solution" or a free alternative that may require some groundwork. It’s crucial to actively discourage this toxic behavior to safeguard the project's future. Understanding why certain behaviors are detrimental is key to maintaining a healthy community.

💬 Unsolicited private messages

Nearly every day, private messages pop up, stemming from a sense of entitlement. While seeking help is perfectly acceptable, doing so privately undermines the very essence of a community-based support system. Public discussions not only facilitate collective problem-solving but also set realistic expectations about the nature of community support versus professional, paid services. Ironically, the expectation of free, personal support in private messages conflicts with the paid professional support our business offers. Engaging in this way through community tools breaks the moral contract and dilutes the benefits of open collaboration.

Furthermore, there are those who try to draw my direct attention in public threads by tagging me, forgetting that in a community forum, they’re addressing everyone, not just me.

📖 To RTFM or not RTFM

The criticism around the "RTFM" response is widespread. Striking a balance is essential: you want to be welcoming and guide users to resources, but it’s also draining to repeatedly handle basic queries that are clearly addressed in the documentation. Persistent questions about fundamental issues can indicate where the software could be more user-friendly. Yet, it's a fine line; even when the software is intuitive, there will always be those who bypass the manual. Navigating this challenge is part of maintaining a supportive community while managing personal fatigue.

🪳 Insults, FUD or unproductive feedback

Constructive criticism is vital for any software development, as it often leads to meaningful improvements. It’s beneficial to hear users' concerns about missing functionalities or outdated interfaces—it’s feedback that can spur positive changes. When feedback is articulated with clear reasons, such as "This doesn’t suit my needs because of X," it’s welcomed because it provides insight into diverse user needs. You can see a recent example of a great way to provide constructive feedback and valid criticism on this Youtube video.

However, derogatory comments like "your software is shit" offer no value. They fail to contribute to the discourse and are unhelpful to all parties involved. A more structured critique, such as "I’m struggling to accomplish X because of Y," is far more beneficial as it pinpoints specific areas for potential enhancement. It’s clear that insults or rude behavior will not result in productive conversation or support, although this may not be self-evident to everyone.

👆
FUD means "Fear, uncertainty and doubt". It's a is a manipulative propaganda tactic used in sales, marketing, public relations, politics, polling and cults. FUD is generally a strategy to influence perception by disseminating negative and dubious or false information, and is a manifestation of the appeal to fear. Source: Wikipedia.

Dealing with FUD, or even deliberate misinformation, can be one of the most challenging aspects of managing a project. This negativity can be damaging if left unchecked. We've been fortunate to experience such incidents infrequently within the XCP-ng and Xen Orchestra communities. When they do occur, addressing them decisively and with factual responses is crucial to prevent them from escalating and affecting the community's health. It’s about maintaining a balance between openness to constructive feedback and the firm rejection of harmful rhetoric.

🧌 Thread hijacking

Thread or discussion hijacking is another disruptive behavior to watch for. It occurs when individuals derail a conversation by introducing negative feedback or an entirely different subject, especially if the thread is already being affected by trolling or toxic comments. Such environments become magnets for further negativity. We've seen numerous instances on platforms like GitHub where highly contentious issues are hijacked as outlets for venting frustrations (or worse), as platforms for indirectly attacking the project. In these situations, it's imperative to shut down the conversation before it spirals into chaos.

💸 Time or money doesn't grow on trees

As the CEO of a company with over 40 employees, I allocate around 30% of my work time to engaging with our community. This commitment reflects my deep belief in the community's power and aligns with my core values. Yet, this involvement comes at a cost. The time spent here is time not spent directly growing the company and generating the income necessary to support our team, who rely on us for their livelihoods.

Decisions must be made, and sometimes this means postponing the development of desirable features for the enthusiast's "home lab" due to budget constraints or choosing not to respond to every query on the forums immediately. Naturally, we prioritize support for those who contribute financially to the project, it's essential for our survival. I firmly stand by the priority to ensure that my employees are paid fairly and punctually.

Balancing this responsibility with my commitment to our community is challenging, but it's a balance I am dedicated to maintaining.

😆 Similar examples

I strongly suggest to read (at least) the "People" category from the "Uncurled" book from Daniel Stenberg, the main author of the Curl project. He listed many similar "interesting" behavior, but also other ones that are contributing to the maintainer fatigue, like "Know-it-best people", "Feedback on irrelevant places" and such. I think it's a great addition on what I wrote here.

README - Uncurled

✅ Contributing with consideration: a checklist

As someone who actively engages with Open Source projects, I hold myself to a certain standard of conduct to ensure that my contributions are meaningful and respectful. Here's a straightforward checklist that I believe streamlines one’s contribution effectively:

  1. Examine Documentation First: Before raising a question, comb through the existing documentation. Start with the README and CONTRIBUTING files, which are gateways to understanding a project’s ethos and procedures. Adhering to the suggested communication channels (be it forums, Discord, or other platforms) ensures smoother interactions.
  2. Provide Detailed Reports: When you encounter a problem, use any available issue templates to furnish a detailed report. Include software versions, environmental contexts, and steps to replicate the issue. Thorough reports can drastically reduce the time developers spend on reproducing and resolving issues.
  3. Express Gratitude: Approach every interaction with appreciation. The creators have invested significant time, perhaps even a lifetime, into the software you’re using. Gratitude fosters a positive tone, which not only makes the interaction more pleasant but also increases the likelihood of receiving a helpful response.

Real-world examples

For instance, when I interacted with Documenso, a stellar open-source document signing application, I noticed their documentation lacked details on VM installation, only providing Docker instructions. Rather than jumping in with demands, I did some groundwork first.

Upon not finding the required information, I approached their Discord to inquire if I could open an issue for a documentation enhancement. They welcomed the idea as it would help track the progress of my proposed changes. Consequently, I filed an issue:

Improve the README for self-hosting · Issue #589 · documenso/documenso
Improvement Description Right now, there’s no guide on how to deploy Documenso outside for dev purpose. I’m not counting Docker because some people might want to do the deployment the way they want…

Following this, I was able to prepare a Pull Request to augment the documentation, linking the issue for context:

feat: update the README for the self-hosting users by olivierlambert · Pull Request #591 · documenso/documenso
Fixing #589

Moreover, when I stumbled upon a bug, I devoted time to ensure it wasn’t already reported. Finding none, I submitted a comprehensive bug report, which led to a swift and effective solution:

Module not found: Can’t resolve ‘react-hook-form’ · Issue #587 · documenso/documenso
Issue Description Can’t access the application (see the screenshot below) when using npm run dev, also failing to compile when trying to npm run build:web (likely related I assume). Steps to Reprod…

This exemplifies the value of investing time in crafting quality bug reports—it pays off substantially!

🤗 Supporting Open Source: a community effort

If you're part of an open-source community, there are numerous ways you can contribute to reducing maintainer fatigue, which benefits the entire ecosystem. Here’s how different stakeholders can contribute:

From the Maintainers’ Perspective

As maintainers, it’s within our power to mitigate fatigue by establishing robust documentation and streamlining the onboarding process. It’s our responsibility to foster a conducive environment that encourages productive contributions. By improving our processes and support systems, we lead by example, nurturing our community's growth and ensuring its longevity.

Acknowledgment is also due to every single contributor. Our project's success is a collective achievement, a testament to the incredible work of countless dedicated individuals. You are the unsung heroes of the open-source world.

As a member of the community

Every member of the community acts as a steward, preserving the integrity and health of the space. Promote positivity and offer help to cultivate a culture of mutual support. Be vigilant against negative behaviors; your perspective can provide validation when maintainers face uncertainty, such as distinguishing between critical feedback and outright trolling.

Furthermore, community members are instrumental in combating FUD and misinformation. Confronting such challenges with facts and respectful discourse can significantly lessen their harmful effects and safeguard the project's reputation.

🎇 Conclusion

This discussion aims to shed light on the realities faced by open-source maintainers, realities that can be as demanding as they are rewarding. I am a firm believer in channeling our energies into creating exceptional software rather than engaging with negativity. Cultivating a thriving open-source community is one of the most fulfilling aspects of the endeavor. It is a shared responsibility to maintain a constructive and respectful environment for all.