Skip to content
This repository has been archived by the owner on Apr 29, 2024. It is now read-only.

feat: Add "Effective Communication and Collaboration" chapter #25

Merged
merged 31 commits into from
Jan 19, 2024
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
82662a1
feat: create effective-communication.md
adiati98 Jan 3, 2024
b2cf8ad
feat: add Effective Communication and Collaboration to sidebar
adiati98 Jan 3, 2024
ce86c5f
feat: add chapter 4 to README
adiati98 Jan 3, 2024
800adb3
feat: add intro paragraph
adiati98 Jan 3, 2024
6d46f75
feat: add Project Onboarding section
adiati98 Jan 3, 2024
286b7e8
fix: wording
adiati98 Jan 3, 2024
fde9047
feat: add Regular Communication section
adiati98 Jan 3, 2024
b241aad
add: Effective Communication and Engaging with Contributors sections
adiati98 Jan 5, 2024
9355466
docs: add Managing Expectations section
adiati98 Jan 5, 2024
f76c2c8
Resolve merge conflicts
adiati98 Jan 5, 2024
dfd0730
docs: add Boundaries point to Managing Expectations section
adiati98 Jan 9, 2024
544bba2
docs: add Handling Difficult Situations section
adiati98 Jan 10, 2024
12797d6
docs: improve Regular Communication section
adiati98 Jan 10, 2024
6407f05
docs: improve Managing Expectations section
adiati98 Jan 10, 2024
319a0e7
fix: adjust wording
adiati98 Jan 10, 2024
5d00e2e
Merge branch 'main' of https://github.com/open-sauced/maintainer-intr…
adiati98 Jan 10, 2024
acfc661
fix: apply suggestions and minor wording adjustment
adiati98 Jan 11, 2024
9185e3d
fix: edit Support section
adiati98 Jan 11, 2024
67969c5
docs: add live streams
adiati98 Jan 11, 2024
ec2cdd9
fix: paragraph format in Engaging with Contributors section
adiati98 Jan 11, 2024
f460d8d
fix: add sentences to point Timeline to maintainer powerups chapter
adiati98 Jan 12, 2024
609ec58
Resolve merge conflicts
adiati98 Jan 12, 2024
ad5f684
fix: improve Style Guide section
adiati98 Jan 12, 2024
465c27b
fix: update Chat Service App intro paragraph
adiati98 Jan 15, 2024
fb4f896
fix: change contributing guidelines to all lower case
adiati98 Jan 15, 2024
5451036
fix: rename file to be more descriptive
adiati98 Jan 17, 2024
384c7b4
fix: change link in sidebar.md and README to new file name
adiati98 Jan 17, 2024
e398263
Merge branch 'main' into feat/add-effective-communication
BekahHW Jan 19, 2024
c72418e
fix: change h1
adiati98 Jan 19, 2024
3481bd4
Merge branch 'main' of https://github.com/open-sauced/maintainer-intr…
adiati98 Jan 19, 2024
0eec647
Resolve merge conflicts
adiati98 Jan 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@ The course is divided into X chapters, each covering a different aspect of being

### [Intro: Understanding the role of an open source maintainer](/intro.md)

### [Chapter 1: Setting Up Your Project](/how-to-setup-your-project.md)
### [Chapter X: Setting Up Your Project](/how-to-setup-your-project.md)

### [Chapter 2: Issues and Pull Requests](/issues-and-pull-requests.md)
### [Chapter X: Issues and Pull Requests](/issues-and-pull-requests.md)

### [Chapter X: How to Create Effective Communication and Collaboration](/effective-communication.md)

### Additional Information

Expand Down
1 change: 1 addition & 0 deletions _layouts/sidebar.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
- [What is an Open Source Maintainer?](/intro.md)
- [Setting Up Your Project](/how-to-setup-your-project.md)
- [Issues and Pull Requests](/issues-and-pull-requests.md)
- [Effective Communication and Collaboration](/effective-communication.md)
204 changes: 204 additions & 0 deletions effective-communication.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
# How to Effectively Communicate and Collaborate

Effective communication and collaboration with contributors are the keys to a thriving open source community. As maintainers, you want to smoothly onboard new contributors to your projects and build a welcoming community with open lines of communication between contributors and maintainers.

In this section, we will discuss how to onboard new contributors, utilize different communication channels for your open source project's community, and maintain healthy communication.

## Project Onboarding

Onboarding new contributors to your project is important to maintaining its health and growth. And that will become possible through establishing effective communication, starting from your project's documentation.

Providing clear information and directions about the project's goals, processes, and codebase is the key to helping new contributors collaborate. Effective communication allows you to attract contributors to return, learn more about your projects, and continue contributing. That way, you can create a sustainable ecosystem where knowledge is shared, responsibilities are distributed, and the project can continue to evolve and grow.

There are ways to establish effective communication on your project to achieve good collaboration.

### Clear Documentation

Easy-to-understand and well-organized documentation will ensure a good onboarding experience for new contributors. Clear documentation can save time, prevent errors, and promote transparency and accountability, which can be vital for effective communication. It is best to invest time and effort in creating clear documentation for your project.

Consider these when you write or update your documentation:

- **Simple language and universal examples**

You want to ensure that your documentation is easy to understand by most contributors β€” if not everyone β€” including non-native English speakers.

- **Clear guide**

Whether it's the setup guide on the README, instructions to run and use the project, or Contributing Guidelines, you always want to provide a clear direction for contributors to follow for better collaboration.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will probably need to be a separate PR but there are inconsistencies on how we are treating the word README.

The intro file and this file have README without backticks

the issues and prs file uses both README.md and README in backticks

There are also inconsistencies between whether to include the .md for file names like README, CONTRIBUTING and SECURITY.

we will need to open a new issue for that resolve it for all existing files

Copy link
Member Author

@adiati98 adiati98 Jan 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From this, I also checked our intro to OSS course. There is no consistency too there. We have:

  • README
  • README file
  • README.md
  • a few README.md (without backticks)

As our courses would be massively used by GitHub users, for terms that related with GitHub, I think it would make sense to follow their style:

README

  • README when talking about README in general.
  • README file instead of README.md when referring to the file.

Here is an example on their docs.

CONTRIBUTING

  • contributing / contribution guidelines (all lower case) to refer the guidelines in general.
  • CONTRIBUTING file when referring to CONTRIBUTING.md.

Here is the example in their docs.

Would love to have yours and @BekahHW thoughts on this.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@adiati98 I think going with the GH style is the right move.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll leave this unresolved for our reference. πŸ‘


- **Dedicated place for documentation**

If your README is growing longer, consider creating a new file or repository dedicated to your project's documentation. This will ensure a good documentation flow, allowing you to communicate your project better.

### Issue Labels

Labeling issues is an excellent way to categorize and communicate the status of issues in your project. It can also be a way to create contributors' paths. The [Issues and Pull Requests](/issues-and-pull-requests.md) chapter covers this topic more in-depth.

The `good first issue` label is perfect to be added to beginner-friendly issues. Think of contributors who are beginners in the tech stack or open source in general. It can be a good starting point for them to contribute to your project. Consider pointing to the code blocks and providing step-by-step instructions to work on the solutions for this type of issue.

If an issue is complicated and has to be fixed promptly, you can add `core team work`, `critical`, or any other label based on your project's convention to prevent frustrations and confusion.

### Issues and Pull Request Templates

Having issues and pull request templates in your project makes it easier for you to triage and review them and helps contributors understand how to approach the project and what you expect them to look closer at when creating one.

## Regular Communication

Providing spaces outside your project for contributors to ask questions, request guidance, and give ideas is recommended. That way, they can communicate and collaborate actively with other collaborators and maintainers.

Here are some channels for you to consider to create regular communication:

### Chat Service App

You can accommodate synchronous communication for your community by providing a chat service app. Besides having one allowing contributors to ask questions, connect, and collaborate openly in real-time, it can also benefit you as a maintainer. You can quickly announce project updates, ask for help, hold synchronous office hours, and many more.
adiati98 marked this conversation as resolved.
Show resolved Hide resolved

Tech communities widely use the apps mentioned here. But which one to choose is based on your preference and the needs of your community.

#### Discord Community

> [Discord](https://discord.com/) is a voice, video and text communication service used by over a hundred million people to hang out and talk with their friends and communities.

Discord is a good choice if your community heavily uses group voice and video calls. Creating a channel for voice calls makes it easy for community members to join the channel and talk to anyone instantly. Discord is also suitable for building a larger community because if your server is public, anyone with a Discord account can search and join your group.

#### Slack Group

> [Slack](https://slack.com/) is the productivity platform that empowers everyone with no-code automation and AI, makes search and knowledge sharing seamless, and keeps teams connected and engaged.

Slack primarily targets businesses and professional teams. That said, if your community prioritizes using chat more than voice or video calls, Slack can accommodate this through its simple and intuitive interface and ability to organize conversations. Slack can automate workflow and be integrated with thousands of business applications, including Zoom and GitHub.

### GitHub Discussions

[Discussions](https://github.com/features/discussions) is a collaborative communication forum for the community around an open source project. It's a feature on GitHub to ask questions, share ideas, and build connections with each other around the project.

You can easily enable discussions in your project by following the [complete instructions](https://docs.github.com/en/discussions/quickstart#enabling-github-discussions-on-your-repository).

### Community Forum

Another place to create a communication space is a forum. A community forum is an online space where community members connect, engage, and discuss topics with each other.

One of the benefits of having a community forum is a place for members to discuss and ask specific questions about your project. Whenever someone encounters the same problem that has been fixed before, they can fix it faster by searching for the solutions on the forum. This can increase the productivity of maintainers because you don't have to answer the same questions repeatedly. A forum is also available publicly, so it's searchable on search engines and can increase the number of users and contributors.

You can create and host a forum on a website. Or, you can make it a subdomain of your website. Take the [freeCodeCamp forum](https://forum.freecodecamp.org/) as an example for inspiration.

## Effective Communication

Effective communication is key to project success. It plays a vital role in resolving issues, building trust and transparency, and encouraging collaboration. By enabling open and healthy communication, you can ensure everyone is on the same page and working towards a common goal.

### Engaging with Contributors

Having contributors come back and continue contributing to the project is one of the maintainers' goals. To nurture this relationship, you should have time to engage with your contributors between tasks.

Start by acknowledging and thanking them for the issue or pull request they created. Ask them questions if something is unclear, and don't assume.

One of the golden rules in an international remote environment is never to make an assumption. Asynchronous communication, more often than not, can lead to misunderstanding because writing is different from speaking. People with different cultural and language backgrounds might need help explaining their intentions or understanding specific cultural sayings. Consider using words with explicit meanings when you communicate, and keep your message clear and short so they can understand your purpose. When you deliver a few topics, using bullet points in a comment or splitting your message into several comments is recommended.

Another way to engage with your contributors is through live streams. At OpenSauced, we do monthly live streams to thank our contributors for their pull requests and other support and give shoutouts as a token of our appreciation. You can also do live streams to work on issues publicly and ask your community to attend.
adiati98 marked this conversation as resolved.
Show resolved Hide resolved

Maintainers are human. Sometimes, a discussion with a contributor can upset you when you're tired or having a bad day. Always remember that you want to foster a healthy communication and welcoming environment. So, it's okay to cool down and take time to answer them. You can take a couple of hours or even a day before you return to them to avoid a bitter tone.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be worth adding a paragraph above here about other ways to interact with your community like livestreams.

Copy link
Member Author

@adiati98 adiati98 Jan 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed the office hours and added a paragraph to add livestreams in line 95 as per your suggestion.
Now I'm thinking, line 97 doesn't flow well here.

There are two ideas and I need your thoughts:

  1. Remove it completely.
  2. Move it up to before the live streams, as part of thanking issues and PRs.

I'm also thinking if it's worth it to add "Social Media (X and LinkedIn)" as part of engagements. We can say something like engage with post mentioning your projects, weekly shoutouts for contributors, holding X Space, etc.

We can make the subsections like:

  • Issues and Pull requests
  • Live Streams
  • Social Media


### Managing Expectations

The earlier you let contributors know what they can expect from you and what you expect from them, the better. Setting and managing expectations is the key to smooth contributions and project management. So, how can you manage and communicate your expectations?

#### Small Issues

Just like maintainers, most open source contributors are volunteers. They are not required to, but they help you fix and enhance your project in their spare time. So you can't expect them to work on their issues promptly like a regular employee. With this expectation, you can, for example, break your issues into several small ones to prevent them from taking a long time to work on an issue.

#### Styling Guide

You might prefer contributors to add a prefix to issue, pull request titles, and their commit messages. Or you might select particular Markdown rules for your project. Every project has its own convention. So, don't expect your contributors to know what to do when contributing to your project. Consider communicating this in a clear styling guide they must follow.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be useful to share some examples of contributing styles. Maybe an example of conventional commits with a link.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you mean here adding a sentence after the first one that mention about conventional commits?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After the first sentence would work.

feat: add new feature for user authentication

https://www.conventionalcommits.org/en/v1.0.0/


#### Support

What kind of support can you provide your contributors? You can think of these amongst other supports:

- **Space**: Where can contributors ask questions and throw ideas?
- **Pair programming**: Some contributors, especially beginners, might need extra guidance and hand-holding. Can you give them support in pair programming when necessary? How can they ask for one?
- **Office hours**: Regular office hours is a great way to engage directly with your contributors. It allows you to listen to their ideas and challenges, what needs to be improved, communicate with them about the direction of your project, and build a better relationship with them.

When you support your contributors, you can gain their trust and motivation and create a more collaborative and productive environment. By providing them with the help they need, you can establish a culture where everyone feels respected and supported, leading to even greater achievements.

You can add a section in your README or Contributing Guide to inform about the support you can give and how to get one.

#### Timeline

Let your contributors know how long they can expect you to review a pull request or to answer their questions. Inform them if you, for example, won't be available on weekends or after working hours.
adiati98 marked this conversation as resolved.
Show resolved Hide resolved

#### Boundaries

As your project grows and gains popularity, it will attract more contributors. Creating and setting clear boundaries becomes essential to prevent you from getting burned out quickly and balance your life. Here are some ways to create boundaries:

- **Take a Break**

You need to know that it's okay to take time off, step away from your project, and take care of yourself. You can inform your contributors that you will review their pull requests after you return. Here is an example of what you can say:

> "Hey {username}, thank you for your PR. I will take two weeks off starting tomorrow and review this upon my return. You may ask about the status of your PR if I haven't responded to it in the next three weeks."
adiati98 marked this conversation as resolved.
Show resolved Hide resolved

When pull requests come during your days off, after you return, you can thank and let the contributors know you will review the pull requests. Consider to say something like this:

> "Hey {username}, I just got back from my days off. Thank you for taking this on! I need time to review it and will get back to you soon. I appreciate your patience."

- **No Private Message**

Another boundary you can set is for contributors not to send you private messages on chat service apps like Discord or social media.

The culture of open source is open communication and transparency. It is best to keep all contributors in the loop by communicating anything related to the project in the open so everyone knows what's happening and what to expect. It will also give you the necessary privacy, separating your project from your personal life.
adiati98 marked this conversation as resolved.
Show resolved Hide resolved

### Handling Difficult Situations

You might need to handle difficult situations or resolve conflicts around your project's community one day. There is no easy way to handle situations like this. But sooner or later, you need to prepare yourself.

Here are essential things to do when handling difficult situations:

#### Active Listening

Active listening plays a vital role in handling a difficult situation. You can only resolve a problem if you understand it clearly.

Active listening is a communication skill to not only hear the words of a speaker but also try to understand their intentions completely and acknowledge their feelings.

Here are some techniques that you can train for active listening:

- **Being fully present**

Avoid listening to someone talking while preparing your answer. Doing so will distract you and make you miss something they've said, which can cause you to fail to understand the exact intention.

- **Showing interest**

If it's a synchronous conversation, use eye contact to show your interest in what the speaker is saying. In an asynchronous chat, you can repeat what they are saying in your own words based on your understanding. It will show them that you are interested in their conversation. And they can correct you if you need help understanding it clearly.

- **Acknowledging emotions**

You want to be able to recognize and acknowledge the speaker's feelings in synchronous or asynchronous conversations. For example, you can say, "I see that it upsets you," or, "I'm excited for you!" when the speaker uses many exclamation marks in their writing.

- **Asking and clarifying**

When someone feels many emotions, they usually want to talk and let their feelings out fast. That can result in a lack of information or the inability to think of more suitable words to describe the situation. You always want to gain more information and clarify what is said. For example, "You said they contacted you on Monday [_clarifying_]. Did they file the complaint on the same day? [_asking for more information_]"

#### Having Empathy and Compassion

It would be best to be emphatic and compassionate when handling a problem, for example, when you face a dispute between contributors or community members.

You must look at and listen to the problem from both sides to keep yourself non-judgemental. Then, put yourself in their shoes to see the case from their perspective to understand it better. Empathy and compassion will help you not only resolve a conflict but also create a positive environment.

#### Being Tactful and Diplomatic

A critical factor in successfully addressing a problem is to approach it in a way that values and respects the feelings and perspectives of others. This not only prevents any harm to the relationship but also leads to positive outcomes when resolving conflicts.

The key is to think before you speak and choose your words wisely. You want to be able to tell the truth, but at the same time, also consider others' feelings and make them feel safe. Use positive yet direct language to prevent misunderstandings; consider balancing being straightforward and sensitive, and avoid pointing fingers.

**Here is an example of a scenario**:

You have a contributor who contributes multiple times and has been working fast to deliver their code. But when you review their pull request and test their branch locally, it works differently than you intended. You know they often don't understand the issue, but they assume they do. And you also notice that they rarely run the code locally to test it. You keep giving them support and positive feedback until, one day, you can't take it anymore.

Instead of saying:

> "Hey, why do you always deliver the code that doesn't align with what we want? I notice you've done this so many times. Do you even understand the issues? I'm also wondering if you ever run your code locally because it often doesn't work the way it should and, worst, breaks the app."

You can say something like:

> "Thank you for your prompt work on the PRs, {username}. I really appreciate it! However, let's focus more on quality than quantity. I noticed a few things that I believe could further improve the quality of your work:
>
> - It might be a good idea to take time to fully understand the issue before starting work on a PR, as this solution is different from what we asked in the issue. If you need help or clarification, don't hesitate to reach out.
> - Another thing that could be helpful is running and testing the code locally before submitting a PR. This way, you'll be able to ensure that the code runs as it should. It can save you time from going back and forth on revisions.
>
> I hope you find this feedback helpful. If there's anything I can do to support you, please let me know.