Best practices to manage an open source project
Tags: opensource, github, management, programming
Published: 2022-08-22 09:45:18

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify">A well-managed open source project attracts contributors and gives them a good experience, making them eager to contribute time and time again. So, if you have an open source project and are wondering what good open source project management looks like, know it’s not a one-and-done activity.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify">In today’s article, we’ll show you how to improve your open source project management, assuming that your goal is to attract more contributors. So keep on reading to learn how you can better manage your project and make sure developers have a great experience when contributing to it.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":1} -->
<h1 id="h-onboarding-new-contributors-to-your-open-source-project"><strong>Onboarding new contributors to your open source project</strong></h1>
<!-- /wp:heading -->

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify">When a possible contributor opens your project page and scrolls down, they need to immediately see a clear README.md file. In that file, it’s helpful to introduce the project as supported by a community so that people don’t mistake open source projects for commercial software.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify">However, besides the README.md file, you should also consider having CONTRIBUTING.md, ROADMAP.md, and a LICENSE.md files. If you wish, you can combine them all in the README.md, but we suggest having separate files for better information organization.</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>README.md - introduces the project, its purpose, and basic installation requirements;</li><li>CONTRIBUTING.md - gives clear instructions on how to contribute to the project;</li><li>ROADMAP.md - shares the vision for the project and the tasks that need to be done;</li><li>LICENSE.md - provides information on the reuse and permissions associated with the code.</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify">These files will allow you to clean several obstacles to open source contribution. Let’s take a closer look at all of them and what information needs to be in each.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2><strong>README.md file</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify">The README.md file is one of the first and most important things you’ll add to your project repository. This file helps you welcome, orient, and encourage newcomers to contribute to your project. A welcoming and powerful README.md file includes:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>Welcoming note, saying hello to people and welcoming them to the project;</li><li>Presentation of the project, showing what you’re doing, for who, and why;</li><li>Explanation of what makes your project unique and useful;</li><li>Current status of the project, with build information and main contributors;</li><li>Step-by-step instructions on how to get started using the project;</li><li>Basic uses cases and examples on how to use the project;</li><li>Description of the resources and types of contributions you’re looking for;</li><li>Pointers to key resources, like the CONTRIBUTING.md, ROADMAP.md, and LICENSE.md files;</li><li>Contact information (if you like).</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify">💡 <strong>Examples of README.md files: </strong><a href="https://github.com/processing/p5.js" target="_blank" rel="noreferrer noopener">p5.js</a>, <a href="https://github.com/gitpoint/git-point" target="_blank" rel="noreferrer noopener">git-point</a></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2><strong>CONTRIBUTING.md file</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify">The CONTRIBUTING.md file is a short guide to potential contributors on how they can contribute to your open source project. You can see it as a pillar for your project, around which you’ll build a community and keep everything tidy.&nbsp;</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify">If you don’t have a CONTRIBUTING.md file but already have contributors to your project, build the file in collaboration with the core contributors. That way, they’ll feel a shared sense of responsibility, and you can create the best possible guide for encouraging new contributors. A sound CONTRIBUTING.md file includes:</p>
<!-- /wp:paragraph -->

<!-- wp:list {"className":"is-style-default"} -->
<ul class="is-style-default"><li>Welcoming note, saying that you’re keen for contributions;</li><li>Table of contents, if your file is long, with links to different headings in your document;</li><li>Pointers to key resources, like ROADMAP.md, issue tracker tool, and forum (if existent);</li><li>Information on how to set up the development environment;</li><li>Description of how to test the project and where the tests are located;</li><li>Protocol to submit code changes, what response they’ll get, and expected timelines;</li><li>Guidelines for the types of bugs contributors should tackle;</li><li>Protocol to report bugs and issues;</li><li>Protocol to suggest improvements or new features;</li><li>Information on style guides and coding standards;</li><li>Templates for pull requests and bug reports that contributors can copy and add context to;</li><li>Description of the recognition model, with a pre-emptive "thank you for contributing” and listing any recognition contributors might receive for participating in your project;</li><li>Description of the code of conduct and rules of your project;</li><li>Ways to contribute to the project other than code;</li><li>Links to communication channels for anyone who needs help and wants to ask questions.</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>💡 <strong>Examples of CONTRIBUTING.md files: </strong><a href="https://github.com/atom/atom/blob/master/CONTRIBUTING.md" target="_blank" rel="noreferrer noopener">Atom</a>, <a href="https://github.com/github/docs/blob/main/CONTRIBUTING.md" target="_blank" rel="noreferrer noopener">GitHub docs</a></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2><strong>ROADMAP.md file</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify">The ROADMAP.md file organizes the tasks that need to be done in your project. In addition, it helps potential contributors understand your project's current status and where it’s going next. The roadmap can be as simple as a collection of issues in your issue tracker or a detailed timeline with milestones. If your roadmap is more than a list of issues, an inviting ROADMAP.md file includes:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul><li>Presentation of the project, showing what you’re doing, for who, and why. You can adapt the summary in your README.md file and add a shorter version here.</li><li>Description of how contribution can get involved. Point contributors to the parts of the project they can immediately work on and link to the CONTRIBUTION.md file.</li><li>Timeline: the star of your roadmap. This section organizes all the tasks needed to complete your project around milestones, mapping out what you're working on now and where it's going. You can organize it around short, medium, and long terms items.</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><strong>💡 Examples of ROADMAP.md files:</strong> <a href="https://github.com/mozillascience/paperbadger/issues/17" target="_blank" rel="noreferrer noopener">PaperBadger</a>, <a href="https://github.com/goharbor/harbor/blob/main/ROADMAP.md" target="_blank" rel="noreferrer noopener">Harbor</a></p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2><strong>LICENSE.md file</strong></h2>
<!-- /wp:heading -->

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify">The LICENSE.md file provides information on the reuse and permissions associated with the code in your open source project.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify">There are several open source licenses with different terms and restrictions, but the most popular ones are Apache 2.0, BSD, MIT, Mozilla 2.0, and GNU general public licenses. To choose the best license for your project, check out the <a href="https://license.md/" target="_blank" rel="noreferrer noopener">license.md website</a>, or the <a href="https://choosealicense.com/" target="_blank" rel="noreferrer noopener">choose a license page</a>.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":1} -->
<h1><strong>Foster an excellent open source community</strong></h1>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>An exciting project, excellent documentation, and a stellar onboarding make people want to contribute to your open source project for the first time. However, the community you build makes them return and keep contributing to your project.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>You want to build a community of open-minded people that welcomes new joiners and communicates effectively with everyone, creating a respectful environment. In the end, open source project management is mainly about people management.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2><strong>Nurture your community and create a respectful environment</strong></h2>
<!-- /wp:heading -->

<!-- wp:list -->
<ul><li>Give periodic project status updates.</li><li>Answer as much and as fast as you can.</li><li>Acknowledge when a new issue or bug is reported.</li><li>Create automated or standard answers to manage users and messages for time efficiency.</li><li>Always be welcoming and respectful in all types of communication.</li><li>Be exceptionally polite when rejecting contributions, explaining your reasons.</li><li>Assign a project or community manager to handle people and discussions.</li><li>Mentor people who show interest in the project and want to learn and contribute.</li><li>Give more rights on the project to people who earn them.</li><li>Write clear rules about getting more rights and causes for being banned (in the code of conduct section of your CONTRIBUTING.md file).</li><li>Remember that contributors come from around the world with different backgrounds, cultures, and native languages. Stay open and tolerant.</li></ul>
<!-- /wp:list -->

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify">Finally, contributing to other open source projects is a great way to experience first-hand how project management works. You can see what you like and dislike in different projects and make adjustments to your project based on that information.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":1} -->
<h1><strong>[Live Talk] Maintaining Code Quality in Open Source</strong></h1>
<!-- /wp:heading -->

<!-- wp:paragraph {"align":"justify"} -->
<p class="has-text-align-justify"><a href="https://youtu.be/-ltk8wpAMls" target="_blank" rel="noreferrer noopener">Watch here</a> <strong>Codacy CEO and co-founder Jaime Jorge</strong> in an exclusive live talk about code quality in open source, with <strong>Neils Lohmann</strong>, founder of the <a href="https://github.com/nlohmann/json" target="_blank" rel="noreferrer noopener">JSON for modern C++</a> on GitHub.</p>
<!-- /wp:paragraph -->