From bb6df50489528e74d623fa9d02af499024df7b62 Mon Sep 17 00:00:00 2001 From: Nadia Eghbal Date: Tue, 9 Aug 2016 13:18:34 -0700 Subject: [PATCH 1/7] create troubleshooting folder --- troubleshooting/index.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 troubleshooting/index.md diff --git a/troubleshooting/index.md b/troubleshooting/index.md new file mode 100644 index 00000000000..e4bb29d073d --- /dev/null +++ b/troubleshooting/index.md @@ -0,0 +1,10 @@ +--- +title: Troubleshooting +--- + + +This section of the handbook addresses some common situations or questions that may come up as you maintain your open source project. + +These topics aren’t fun. They may feel unfamiliar or force you out of your comfort zone. No matter what you do, people may feel upset or criticize how you handled the situation. + +Sometimes, being a maintainer is a thankless job. If you’re reading this section, though, you’ve taken an important first step towards becoming a leader, and for that, we thank you. ❤️ From cdf8615d6610e23fdcb26992cbc099434d7147d9 Mon Sep 17 00:00:00 2001 From: Nadia Eghbal Date: Tue, 9 Aug 2016 13:19:30 -0700 Subject: [PATCH 2/7] Create conduct.md --- troubleshooting/conduct.md | 63 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 troubleshooting/conduct.md diff --git a/troubleshooting/conduct.md b/troubleshooting/conduct.md new file mode 100644 index 00000000000..ae852254c1c --- /dev/null +++ b/troubleshooting/conduct.md @@ -0,0 +1,63 @@ +--- +title: Enforcing your code of conduct +--- + +Your code of conduct helps create a healthy and constructive social atmosphere for your project’s community. Sometimes, despite your best efforts, somebody will do something that violates this code. In this section, we’ll talk about how to address negative or harmful behavior in your project’s community. + +## Write down how you’ll enforce your code of conduct + +Ideally, you’ve explained how your code of conduct will be enforced **_before_** a violation occurs. There are several reasons for this: + +* Tying values to action turns the code of conduct from a philosophy into a policy. It demonstrates that you are serious about enforcing the code of conduct. + +* You will empower your community by explaining how to report a violation and assuring them their complaint will be reviewed. + +* Community members will feel reassured that there is a clear review process if they are ever investigated for a violation. As with any other aspect of managing an open source project, transparent communication helps prevent decisions from being made by a few people behind closed doors. + +You should give people a private way (such as an email address) to report a code of conduct violation and explain who receives that report. It could be a maintainer, a group of maintainers, or a code of conduct working group. + +Don’t forget that someone might want to report a violation about someone who usually receives those reports. In this case, give them an option to report violations to someone else. For example, [@ctb](https://github.com/ctb) and [@mr-c](https://github.com/mr-c) explain on their project, [Khmer](https://github.com/dib-lab/khmer): + +*Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by emailing **khmer-project@idyll.org** which only goes to C. Titus Brown and Michael R. Crusoe. To report an issue involving either of them please email **Judi Brown Clarke, Ph.D.** the Diversity Director at the BEACON Center for the Study of Evolution in Action, an NSF Center for Science and Technology.* [1] + +## Gather information about the situation + +Treat each community member’s voice as important as your own. If you receive a report that someone has violated the code of conduct, take it seriously and investigate the matter, even if it does not match your own experience with that person. Doing so sends a signal to members of your community that you value their perspective and trust their judgment. + +The community member in question may be a repeat offender who consistently makes others feel uncomfortable, or they may have only said or done something once. Both can be grounds for taking action, depending on context. + +Before you respond, give yourself time to understand what happened. Read through the person’s past comments and conversations to better understand who they are and why they might have acted in such a way. Try to gather perspectives from other community members about this person and their behavior. + +## Take appropriate action + +When you feel you sufficiently understand the context of the situation, you’ll need to decide what to do. As you consider your next steps, remember that your goal as a moderator is to foster a safe, respectful, and collaborative environment. Consider not only how to deal with the situation in question, but how your response will affect the rest of your community’s behavior and expectations moving forward. + +Here are some ways you might respond to a code of conduct violation: + +* Give the person in question a public warning and explaining how their behavior negatively impacted others, preferably in the channel where it occurred. Where possible, public communication helps convey to the rest of the community that you take the code of conduct seriously. Be kind, but firm in your communication. + +* Privately reach out to the person in question to explain how they violated the code of conduct and how their behavior negatively impacted others. You may want to use a private communication channel if the situation involves sensitive personal information. If you communicate with someone privately, it’s a good idea to CC those who first reported the situation, so they know you responded. Ask the reporting person for consent first before CCing them into your response. + +Sometimes, a resolution cannot be reached. The person in question may become aggressive or hostile when confronted or does not change their behavior. In this situation, you may want to consider taking stronger action. For example: + +* Suspend the person in question from the project, enforced through a temporary ban on participating in any aspect of the project + +* Permanently ban the person from the project + +Banning members should not be taken lightly and represents a permanent and irreconcilable difference of perspectives. You should only take these measures towards a community member when it is clear that a resolution cannot be reached. + +It’s not always easy to enforce your code of conduct, but this type of work is necessary to maintain a healthy and active community. When a project seems hostile or unwelcoming, even if it’s just one person whose behavior is tolerated by the rest of the community, you risk losing the contributions of many others, some of whom you may never even meet. + +### Footnotes + +[1] [https://github.com/dib-lab/khmer/blob/master/CODE_OF_CONDUCT.rst](https://github.com/dib-lab/khmer/blob/master/CODE_OF_CONDUCT.rst) + +### Further reading + +* [https://www.djangoproject.com/conduct/enforcement-manual/](https://www.djangoproject.com/conduct/enforcement-manual/) + +* [http://www.slideshare.net/aeschright/enforcing-your-code-of-conduct-effective-incident-response](http://www.slideshare.net/aeschright/enforcing-your-code-of-conduct-effective-incident-response) + +* [https://www.rust-lang.org/en-US/conduct.html](https://www.rust-lang.org/en-US/conduct.html) + +* [http://producingoss.com/en/producingoss.html#difficult-people](http://producingoss.com/en/producingoss.html#difficult-people) From 47853890d01b3234123d3a03cb416af9f044a820 Mon Sep 17 00:00:00 2001 From: Nadia Eghbal Date: Tue, 9 Aug 2016 13:20:18 -0700 Subject: [PATCH 3/7] Create burnout.md --- troubleshooting/burnout.md | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 troubleshooting/burnout.md diff --git a/troubleshooting/burnout.md b/troubleshooting/burnout.md new file mode 100644 index 00000000000..961ca882328 --- /dev/null +++ b/troubleshooting/burnout.md @@ -0,0 +1,43 @@ +--- +title: Feeling guilty or burned out +--- + +Open source work once brought you joy. Maybe now it’s starting to make you feel avoidant or guilty. Perhaps you’re feeling overwhelmed or a growing sense of dread when you think about your projects. And meanwhile, the issues and pull requests pile up. + +Burnout is a real and pervasive issue in open source work, especially among maintainers. Let’s talk about how to make things better. + +## Clearly communicate your limits + +Most people who come across your project don’t know anything about you or your circumstances. They may even think that you get paid to work on the project, especially if it’s something they regularly use and depend on. + +Maybe at one point you put a lot of time into your project but now circumstances have changed. You’re juggling a new family and a full-time job, and you just don’t have that much time to spend on open source work anymore. That’s perfectly okay! Make sure other people know about it. Other people won’t know what’s happening in your life unless you tell them. + +Write your time constraints directly into your README. If your time is purely volunteered, make sure that people are aware of your circumstances. You can even tell them exactly how many hours you spend on the project per week, or let them know which days you’re most active. If your project is completely unmaintained or a low priority in your life, tell people that, too. (You can read more about proactive communication under **"Best Practices for Maintainers" (link)**.) + +## Write an agreement for maintainers and contributors + +If you haven’t noticed by now, the more you write down, the easier your life will be. 😎 One thing you may want to consider writing down are ground rules and expectations for maintainers (and contributors!). Think of it as an extension of your code of conduct. + +For example, as a maintainer, you might promise to acknowledge every contribution, even if you don’t accept them. You might ask contributors to promise that their code passes all tests before they submit it. + +[Jekyll](https://github.com/jekyll/jekyll/pull/5011/files), [CocoaPods](https://github.com/CocoaPods/CocoaPods/wiki/Communication-&-Design-Rules), and [Homebrew](https://github.com/Homebrew/brew/blob/master/share/doc/homebrew/Maintainers-Avoiding-Burnout.md) are several examples of projects that have ground rules for maintainers and contributors. + +## Don’t forget to take breaks + +Although it should go without saying, take a vacation! Sometimes it can be hard to take a break from open source work when it feels like everybody is depending on you. People may even try to make you feel guilty for stepping away. + +Do your best to find support for your users and community while you’re away from a project. If you can’t find the support you need, take a break anyway. Be sure to communicate when you’re not available, so people aren’t confused by your lack of responsiveness. + +Taking breaks applies to more than just vacations, too. If you don’t want to do open source work on weekends, or during work hours, communicate those expectations to others, so they know not to bother you. + +## If you can’t manage your project, let someone else take over + +There’s no shame in admitting when you don’t have the bandwidth to care for your project anymore. If other people are enthusiastic about its direction, however, give them commit access or formally hand over control to someone else. If someone forked your project and is actively maintaining it elsewhere, consider linking to the fork from your original project. Take it as a compliment that so many people want to see your project live on! + +Further reading: + +* [http://progrium.com/blog/2015/12/04/leadership-guilt-and-pull-requests/](http://progrium.com/blog/2015/12/04/leadership-guilt-and-pull-requests/) + +* [https://archive.is/j8zAk](https://archive.is/j8zAk) + +* [https://publicobject.com/2016/05/03/the-open-source-maintainers-dilemma/](https://publicobject.com/2016/05/03/the-open-source-maintainers-dilemma/) From 6c98deb0f282db197520c30a44fc5c202a82c5fb Mon Sep 17 00:00:00 2001 From: Nadia Eghbal Date: Tue, 9 Aug 2016 13:21:01 -0700 Subject: [PATCH 4/7] Create finding-consensus.md --- troubleshooting/finding-consensus.md | 57 ++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 troubleshooting/finding-consensus.md diff --git a/troubleshooting/finding-consensus.md b/troubleshooting/finding-consensus.md new file mode 100644 index 00000000000..43384a1467c --- /dev/null +++ b/troubleshooting/finding-consensus.md @@ -0,0 +1,57 @@ +--- +title: Finding community consensus +--- + +Early in the life of your open source project, making major decisions is easy. When you want to do something, you just do it. + +As your project becomes more popular, more people will take interest in the decisions you make. Even if you don’t have a big community of contributors,, you’ll find that people will start to weigh in on your decisions or raise issues of their own if your project has a lot of users. + +For the most part, if you’ve cultivated a friendly, respectful community and documented your processes openly, you and your community should be able to reach a resolution. But sometimes you run into an issue that’s a little bit harder to address. Here are some strategies to reach consensus. + +## Set the bar for kindness + +When your community is grappling with a difficult issue, tempers may rise. People may become angry or frustrated and take it out on one another, or on you. + +Your job as a maintainer is to keep these situations from escalating. Even if you have a strong opinion on the topic, try to take the position of a moderator or facilitator, rather than jumping into the fight and pushing your views. + +Remember that others in your community are looking to you for guidance. Set a good example for others. You can still express disappointment, unhappiness, or concern, but do so with a sense of calm and detachment. Keeping your cool isn’t easy, but your leadership will improve the health of your community. The internet thanks you. 🙏 + +## Focus on the journey, not the destination + +Some projects use a voting process to make major decisions. While sensible at first glance, voting can emphasize getting to an "answer," rather than listening to and addressing each other’s concerns. Voting can also become political, where community members feel pressured to do each other favors or vote a certain way. + +As much as you are able, emphasize "consensus seeking" rather than consensus. Under a consensus seeking process, community members discuss major concerns until they feel they have been adequately heard. When only minor concerns remain, the community moves forward. A consensus seeking process acknowledges that a community may not be able to reach a perfect answer. Instead, it prioritizes listening and discussion. + +Even if you don’t actually adopt a consensus seeking process, as the maintainer of your project, it’s important to make sure that people know you are listening. Making other people feel heard and committing to resolving their concerns can go a long way in diffusing a sensitive situation. Then, follow up on your words with actions. + +Don’t rush into a decision for the sake of having a resolution. Make sure that everybody feels heard and that all information has been made public before moving toward a resolution. + +## Keep the conversation focused on action + +While discussion is important, there is a difference between productive and unproductive conversations. Encourage discussion so long as it is actively moving towards resolution. If it’s clear that conversation is languishing or going off-topic, jabs are getting personal, or people are quibbling about minor details, it’s time to shut this thing down. + +Allowing these conversations to continue is not only bad for the issue at hand, but bad for the health of your community. It sends a message that these types of conversations are permitted or even encouraged, and it can discourage people from raising or resolving future issues. + +With every point made by you or by others, ask yourself, *"How does this bring us closer to a resolution?"* If the conversation is starting to unravel, ask the group, *“Which steps should we take next?”* to refocus the conversation. + +If a conversation is taking place on an Issue that clearly isn’t going anywhere, there are no clear actions to be taken, or the appropriate action has already been taken, close the Issue and explain why it has been closed. + +## Pick your battles wisely + +Context is important. Consider who is involved in the discussion and how they represent the rest of the community. Is everybody in the community upset about, or even engaged with, this issue? Or is a lone troublemaker raising the issue? Remember to consider your community members who are silent, not just the active voices. + +A notable exception to this framing is when the issue concerns community behavior or governance. In this case, consider whether addressing the issue makes your community healthier or less healthy. A community’s health involves not just the people who are in your community right now, but people you may never hear from because they don’t feel comfortable joining or participating. Healthy and welcoming communities help ensure a future for your project by encouraging active contribution. Unhealthy communities threaten the life of your project and will leave you feeling stressed and unhappy. + +If the issue does not represent the broader needs of your community, you may just need to acknowledge the concerns of a few people. If this is a recurring issue without a clear resolution, point them to previous discussions on the topic and close the thread. + +## Identify a community tiebreaker + +With a good attitude and clear communication, most difficult situations are resolvable. However, even in a productive conversation, there can simply be a difference in opinion on how to proceed. In these cases, you should identify an individual or group of people that can serve as a tiebreaker. A tiebreaker could be the primary maintainer of the project, or it could be a small group of people who make a decision based on voting. Ideally, you’ve identified your tiebreaker and the associated process in your GOVERNANCE.md before you ever have to use it. + +Your tiebreaker should be a last resort. Divisive issues can be an opportunity for your community to grow and learn. Embrace these opportunities and try to use a collaborative process to move to a resolution wherever possible. + +### Further reading + +* [http://producingoss.com/en/producingoss.html#common-pitfalls](http://producingoss.com/en/producingoss.html#common-pitfalls) + +* [https://en.wikipedia.org/wiki/Consensus-seeking_decision-making](https://en.wikipedia.org/wiki/Consensus-seeking_decision-making) From 2f8fe36d38a5d61ab1f9b9c10e3f31634185c013 Mon Sep 17 00:00:00 2001 From: Nadia Eghbal Date: Tue, 9 Aug 2016 13:22:22 -0700 Subject: [PATCH 5/7] Create contributions.md --- troubleshooting/contributions.md | 33 ++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 troubleshooting/contributions.md diff --git a/troubleshooting/contributions.md b/troubleshooting/contributions.md new file mode 100644 index 00000000000..77979d9e142 --- /dev/null +++ b/troubleshooting/contributions.md @@ -0,0 +1,33 @@ +--- +title: Handling contributions you don't want to accept +--- + +As a maintainer of an open source project, you’ll inevitably receive contributions that you don’t want to accept. Maybe the contribution changes your project’s scope or doesn’t match your vision. Maybe the idea is good, but the execution is poor. + +Regardless of the reason, here are some strategies to tactfully handle contributions that don’t meet your project’s standards. + +## Say something! + +If you receive a contribution you don’t want to accept, your first reaction might be to ignore it or pretend you didn’t see it. Doing so could hurt the other person’s feelings and even demotivate other potential contributors in your community. + +Contributing to an open source project can be intimidating, especially if it’s someone’s first time. Even if you don’t accept their contribution, be sure to respond to their submission. Acknowledge the person behind it and thank them for their interest. It’s a big compliment! If you don’t want to accept the contribution, clearly explain why and offer suggestions for improvement if you’re able. + +## Write down what you won’t accept beforehand + +Having a clear contribution policy helps depersonalize situations where you don’t want to accept a contribution. Saying "Your contribution doesn’t match this project’s criteria" feels less personal than “I don’t like your contribution”. In addition, clear contribution policies can reduce the chances that someone will submit something you don’t want in the first place. + +## Ask that people discuss major changes first + +In your contributing guide, explain your project’s process for submitting and accepting contributions. Many projects specify that if someone is proposing a major change, that they open an issue first before doing any work. This policy reduces the chances that someone will put in many wasted hours of work into a pull request that you aren’t going to accept. And, if someone does make an unexpected pull request, you can point to your policy and say that major changes need to be discussed first. + +## Require tests and other checks to improve the quality of code + +Require that all code contributions pass your tests before they can be submitted. You’ll help set a minimum standard of quality for all submissions. You can also emphasize the use of style guides, linters, and other tools to help people meet your quality standards. + +## Mentor or find a mentor for your contributor + +Maybe someone in your community regularly submits contributions that don’t meet your project’s standards. It can be frustrating for both parties to repeatedly go through rejections. + +If you see that someone is enthusiastic about your project, but needs a bit of polish, be patient. Explain clearly in each situation why their contributions don’t meet the expectations of the project. Try pointing them to an easier or less ambiguous task, like an issue marked "good first bug," to get their feet wet. If you have the time, you can even mentor them through their first contribution, or find someone else in your community who might be willing to mentor them. + +Ultimately, if a contribution isn’t good enough, remember that you are under no obligation to accept it. Be kind and responsive when people contribute to your project, but only accept changes that you truly believe will make your project better. From b8895760e51a7f483b20d0d1ed0baece569b4844 Mon Sep 17 00:00:00 2001 From: Nadia Eghbal Date: Tue, 9 Aug 2016 13:23:25 -0700 Subject: [PATCH 6/7] Create getting-paid.md --- troubleshooting/getting-paid.md | 37 +++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 troubleshooting/getting-paid.md diff --git a/troubleshooting/getting-paid.md b/troubleshooting/getting-paid.md new file mode 100644 index 00000000000..4801576c3ae --- /dev/null +++ b/troubleshooting/getting-paid.md @@ -0,0 +1,37 @@ +--- +title: Getting paid for open source work +--- + +If you make regular, substantial contributions to open source, or you’re just considering your first contribution, you may start to wonder whether anybody gets paid to work on open source. + +Today, some open source work is paid. Projects sometimes raise money from companies, individuals, or others to fund ongoing work. [Ruby Together](https://rubytogether.org/), for example, is a foundation that pays for work on [bundler](https://github.com/bundler/bundler), [RubyGems](https://github.com/rubygems/rubygems), and other Ruby infrastructure projects. + +For an individual contributor, a company may hire an employee to work on an open source project, or encourage employees to make open source contributions during work hours. [Nodesource](https://github.com/nodesource) and [Rackspace](https://blog.rackspace.com/rackspaces-policy-on-contributing-to-open-source/) are two companies with these types of arrangements. + +Other open source work is unpaid or volunteered. For example, someone might come across a bug in a project they use and submit a quick fix, or they might enjoy tinkering with an open source project in their spare time. (Did you know that [@gvanrossum ](https://github.com/gvanrossum)started [Python](https://github.com/python) over a Christmas holiday?) + +There are plenty of reasons why a person or project would not want to be paid for open source work. They may already have a full-time job that they love, which enables them to contribute to open source in their spare time. Others enjoy thinking of open source as a hobby or creative escape and don’t want to feel financially obligated to work on their projects. + +For others, getting paid to contribute to open source is the only way they can afford to make it work. Maintaining popular projects can be a significant responsibility, taking up 10 or 20 hours per week instead of a few hours per month. + +Paid work also allows people from different walks of life to make meaningful contributions. Some people cannot afford to spend unpaid time on open source projects, based on their current financial position or family situation. That means we miss out on many potential contributions from talented people who can’t afford to volunteer their time. + +As open source’s popularity increases, availability of funding has not yet caught up to the need. If you are interested in finding funding for your open source work, there are some options available to you. Here are some examples: + +* Raise money for your work through crowdfunding campaigns or donations. This works well if you have a strong audience or reputation already. + +* Find a company to hire you to work on your idea, or ask your current employer for dedicated work time. + +* If you have a large project, you could raise money from companies and individual donors through a software foundation. Or you might try to start a business to support the project. + +If you’d like to explore other different funding options, you can check out [this list](https://github.com/nayafia/lemonade-stand). Different types of funding require different skills, so consider your strengths to figure out which funding option works best for you. + +### Further reading + +* [http://lifeofaudrey.com/essays/love_and_money.html](http://lifeofaudrey.com/essays/love_and_money.html) + +* [http://blog.cocoapods.org/Why-we-dont-accept-donations/](http://blog.cocoapods.org/Why-we-dont-accept-donations/) + +* [http://marijnhaverbeke.nl/blog/sustainable-maintenance.html](http://marijnhaverbeke.nl/blog/sustainable-maintenance.html) + +* [https://medium.com/open-source-life/money-and-open-source-d44a1953749c#.nyk44wmm1](https://medium.com/open-source-life/money-and-open-source-d44a1953749c#.nyk44wmm1) From ac2f58f395cd684178e88003d064c73332f36f3e Mon Sep 17 00:00:00 2001 From: Nadia Eghbal Date: Tue, 9 Aug 2016 13:25:59 -0700 Subject: [PATCH 7/7] add table of contents --- troubleshooting/index.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/troubleshooting/index.md b/troubleshooting/index.md index e4bb29d073d..0730314a25c 100644 --- a/troubleshooting/index.md +++ b/troubleshooting/index.md @@ -8,3 +8,10 @@ This section of the handbook addresses some common situations or questions that These topics aren’t fun. They may feel unfamiliar or force you out of your comfort zone. No matter what you do, people may feel upset or criticize how you handled the situation. Sometimes, being a maintainer is a thankless job. If you’re reading this section, though, you’ve taken an important first step towards becoming a leader, and for that, we thank you. ❤️ + +## Troubleshooting topics +* [Enforcing your code of conduct](conduct.md) +* [Feeling guilty or burned out](burnout.md) +* [Finding community consensus](finding-consensus.md) +* [Handling contributions you don't want to accept](contributions.md) +* [Getting paid for open source work](getting-paid.md)