07. Community & Contribution

How to Set Healthy Discussion Norms in Open Source

Issue threads and chat channels shape your project culture. Learn how to set clear, kind discussion norms before conflict grows.
Table of Contents
In: 07. Community & Contribution

Open Source communities are built in public. That means your issue tracker, pull requests, chat, and forum posts are not just support channels. They are also the place where people learn what kind of project this is.

If the conversation is clear, respectful, and focused, contributors are more likely to stay. If every thread turns into a debate, complaint, or guessing game, even a useful project can become hard to help.

This matters for public benefit software. At Software for Progress Foundation, we believe Open Source developers can create tools that improve education, accessibility, security, and civic life. But those tools need communities that are safe enough for people to participate in and organized enough for work to move forward.


Why Discussion Norms Matter

A discussion norm is a shared expectation for how people talk, disagree, ask questions, and make decisions in your project.

You do not need a large community to need norms. In fact, the best time to set them is before you have a large community. A small project with three contributors can still run into unclear feedback, tense review comments, repeated arguments, or support requests that drain the maintainer.

Healthy discussion norms help you:

  • Protect focus: Threads stay connected to the project goal instead of drifting into personal opinions or endless debate.
  • Reduce stress: Maintainers do not have to invent a response style every time something gets uncomfortable.
  • Welcome different experience levels: New contributors understand how to ask for help without feeling foolish.
  • Support public benefit users: People who depend on your tool can report needs clearly and be heard respectfully.

Norms are not about making every conversation formal. They are about making participation easier.


Step 1: Name the Kinds of Conversations You Expect

Start by listing where conversation happens in your project and what each place is for. This prevents one channel from becoming a confusing mix of bug reports, feature requests, private support, and arguments.

For example:

  • Issues: Bug reports, feature requests, accessibility problems, documentation gaps.
  • Pull requests: Specific code, test, design, or documentation review.
  • Discussions or forum: Open-ended ideas, user stories, project questions.
  • Security contact: Private reporting for sensitive security issues.

You can add a short note to your README or contributing guide that says what belongs where. This is especially helpful for projects serving schools, nonprofits, or local communities, where users may not be experienced developers.


Step 2: Set a Default Tone

Your project tone does not have to be overly cheerful. It does need to be clear and respectful.

Write down a few simple expectations contributors can follow. Keep them human, not legalistic.

  • Assume good intent, but ask for clarification when something is unclear.
  • Critique code, ideas, and tradeoffs, not people.
  • Explain the reason behind feedback when possible.
  • Use plain language, especially when discussing user needs.
  • Be patient with first-time contributors and non-developer users.
  • Do not demand unpaid work from maintainers or contributors.

These expectations set the tone before there is a problem. They also give you something to point to when a conversation starts moving in the wrong direction.


Step 3: Make Feedback Actionable

Many community problems come from vague feedback. Comments like this needs work, I do not like this, or just fix the UX may be honest, but they do not help someone improve the contribution.

Encourage feedback that includes three parts:

  • What: What specific thing needs attention?
  • Why: Why does it matter for the project or users?
  • Next step: What could the contributor try next?

For example, instead of:

  • This accessibility fix is wrong.

Try:

  • The new color passes in dark mode but fails contrast in light mode. This matters because low-vision users may not be able to read the error message. Could you update the light mode token and add a screenshot to the PR?

This kind of feedback teaches. It protects quality without shaming the person doing the work.


Step 4: Use Templates to Guide the Conversation

Templates are not just paperwork. They are a way to help people participate well before a maintainer has to step in.

Create lightweight templates for common threads:

  • Bug report: What happened, what you expected, steps to reproduce, device or environment, screenshots if useful.
  • Feature request: Who needs this, what problem it solves, any possible alternatives.
  • Accessibility issue: Assistive technology used, page or feature affected, what blocked the user.
  • Pull request: What changed, why it changed, how it was tested, what feedback is requested.

A concrete example: imagine an Open Source reading app used by adult literacy tutors. A user opens an issue saying, The app is confusing. That is hard to act on. A template can ask: Which screen were you on? What were you trying to do? What confused the learner or tutor? Were you using a phone, tablet, or desktop?

Now the conversation is more likely to produce a useful improvement instead of frustration on both sides.


Step 5: Have a Plan for Disagreement

Disagreement is normal in Open Source. The goal is not to avoid it. The goal is to keep it useful.

When a thread gets tense, respond early and calmly. You can use a simple pattern:

  1. Restate the shared goal: We all want this tool to be easier for screen reader users.
  2. Separate facts from preferences: The current behavior fails in this workflow. The proposed solution is one option.
  3. Ask for evidence or examples: Can someone share a test case, screenshot, or user story?
  4. Set a decision path: If there is no new information by Friday, I will choose the smaller change for this release and keep the larger redesign open.

This keeps the discussion from becoming a contest over who argues longest.


Step 6: Model the Behavior You Want

Maintainers set the strongest norm by what they do repeatedly.

If you want careful bug reports, thank people who include reproduction steps. If you want kind code review, write kind code review. If you want users to explain impact, ask questions that make impact easier to describe.

Small phrases can change the feel of a project:

  • Thanks for reporting this. I may need more detail before I can reproduce it.
  • This is a good problem to raise. I am not sure this solution fits the project yet.
  • I am going to pause this thread because it is becoming repetitive.
  • Let us bring this back to the user need.
  • I cannot commit to building this, but I can help shape it into a clear issue for contributors.

You do not need to be perfect. You do need to be consistent enough that people understand what respectful participation looks like here.


Step 7: Write the Norms Where People Can Find Them

Do not hide your discussion norms in a long file no one reads. Put a short version near the places where people participate.

Good places include:

  • The contributing guide.
  • The issue template introduction.
  • The pull request template.
  • The README community section.
  • A pinned discussion or welcome post.

Keep it short. A useful version can be five to eight bullet points. Link to your code of conduct if you have one, but do not rely on that alone. A code of conduct often explains unacceptable behavior. Discussion norms explain everyday good behavior.


TL;DR

Your project culture is shaped by everyday conversations. If you want people to contribute, report problems, and stay involved, make those conversations easier to join and easier to trust.

  • Define where different kinds of project conversations belong.
  • Set a clear default tone: respectful, plainspoken, and focused on users.
  • Ask for actionable feedback with a what, why, and next step.
  • Use templates to help people share useful details.
  • Handle disagreement with a calm process, not a louder argument.
  • Model the behavior you want other contributors to repeat.
  • Put your norms where people will actually see them.

Healthy discussion norms help Open Source projects become more sustainable. They also help public benefit software serve more people, because the community around the tool becomes a place where real needs can be heard and useful work can happen.

Written By
Cory Fail
Cory Fail leads the Software for Progress Foundation, helping developers build Open Source tools for education, accessibility, and social good through mentorship and community support.
Comments
More From Software for Progress Foundation
Great! You’ve successfully signed up.
Welcome back! You've successfully signed in.
You've successfully subscribed to Software for Progress Foundation.
Your link has expired.
Success! Check your email for magic link to sign-in.
Success! Your billing info has been updated.
Your billing was not updated.