<div class="xblock xblock-public_view xblock-public_view-vertical" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="VerticalStudentView" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="vertical" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@vertical+block@chap-02-seq-05-ver-01" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<div class="vert-mod">
<div class="vert vert-0" data-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-01-html-01">
<div class="xblock xblock-public_view xblock-public_view-html xmodule_display xmodule_HtmlBlock" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="XBlockToXModuleShim" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="html" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-01-html-01" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<script type="json/xblock-args" class="xblock-json-init-args">
{"xmodule-type": "HTMLModule"}
</script>
<div class="edit-link-wrapper"><div class="edit-link"><p style="text-align: right;"><a href="https://gitlab.com/-/ide/project/mooc-floss/mooc-floss/edit/master/-/course/html/chap-02-seq-05-ver-01-html-01.html" target="_blank"><i class="fa fa-pencil mr-1"></i> Edit on Gitlab</a></p></div><div class="edit-link-original-content"><p>The main goal of the course is to allow you to have a contribution merged to an established open source project. Contributing is something that is based on practice - we need to actually <em>do</em> it to understand it. Simply reading through the course without applying the knowledge might provide you with some insights, but it's not really possible to learn how to contribute without actively contributing. It would be a bit like learning how to code by reading a book about code, but without actually writing any code...</p>
<p>It's also important to keep in mind that contributing is <em>not</em> a quick and easy task! As we'll see, writing the code or text of the contributions themselves is only a small part of the effort. It can take a long time, require many interactions with many different people, over a long period of time. It's not uncommon to need several weeks, or even months, to get a meaningful contribution merged.</p>
<p>So don't leave this for the end of the course - that wouldn't provide the time required for some of the interactions. Start applying what we discuss in this course early on, in a specific project. That will give you more time to become familiar with the project, or even to replace it with another project if it doesn't end up being a good fit. It will also give you more time to develop your skills through trial and error.</p>
<p>That said - don't worry <em>too much</em> about the difficulty of getting contributions accepted. It can look a bit frightening and daunting at first, but if you follow the steps and advice described in this course, and follow up diligently and regularly with the upstream, you will see that it's completely achievable, and something that could even become a routine habit in your regular development practice.</p>
<p></p></div></div>
</div>
</div>
</div>
<script type="text/javascript">
(function (require) {
require(['/static/js/dateutil_factory.a28baef97506.js?raw'], function () {
require(['js/dateutil_factory'], function (DateUtilFactory) {
DateUtilFactory.transform('.localized-datetime');
});
});
}).call(this, require || RequireJS.require);
</script>
<script>
function emit_event(message) {
parent.postMessage(message, '*');
}
</script>
</div>
<div class="xblock xblock-public_view xblock-public_view-vertical" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="VerticalStudentView" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="vertical" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@vertical+block@4f337d3507374bc5a7fff92d1b1a3da7" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<div class="vert-mod">
<div class="vert vert-0" data-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@bd20d72e9b424ff89972433235cda8bc">
<div class="xblock xblock-public_view xblock-public_view-html xmodule_display xmodule_HtmlBlock" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="XBlockToXModuleShim" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="html" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@bd20d72e9b424ff89972433235cda8bc" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<script type="json/xblock-args" class="xblock-json-init-args">
{"xmodule-type": "HTMLModule"}
</script>
<div class="edit-link-wrapper"><div class="edit-link"><p style="text-align: right;"><a href="https://gitlab.com/-/ide/project/mooc-floss/mooc-floss/edit/master/-/course/html/bd20d72e9b424ff89972433235cda8bc.html" target="_blank"><i class="fa fa-pencil mr-1"></i> Edit on Gitlab</a></p></div><div class="edit-link-original-content"><p>To get started, the first step is to figure out which project you would like to contribute to.</p>
<p>If you have already a project in mind, great! Personal interest in a given project can be a fantastic source of motivation, and it's nice to get something merged into a project that we like -- that way, it feels like it becomes ours a bit too. :) If you don't yet have a precise idea of which project to pick, we'll help you brainstorm this.</p>
<h4>Keeping options open</h4>
<p>It might even be worth considering several projects, just so you have backup options if it turns out that the initial project you had in mind doesn't work out. Not every project is open to contributions, nor are they all a good fit, so be sure to assess it with the <a href="/courses/course-v1:MOOC-FLOSS+101+2021_1/jump_to_id/chap-05-seq-04-ver-01" target="[object Object]">criteria</a> we will be describing over the next few modules.</p>
<p>The choice you make of which project to contribute to doesn't need to be final at this stage, so don't worry too much about making the "right" choice for now. The important thing here is to experience making first contact, and to start getting feedback and information. In module 4, we will confirm your choice of project. Until then, the modules will provide tips to help you determine if the project is a good match for you, or whether there might be another one to which you'll be able to contribute more easily. Just make sure to start interacting now with at least one project, otherwise you won't have the experience nor the feedback required to make that decision later!</p>
<p>And if you end up with several good options, then great! You can just pick the one that turns out to be the best fit.</p>
<h4>Need ideas of projects to contribute to?</h4>
<div>If you don't already have a project in mind, or if you would like to find additional ideas:</div>
<ul>
<ul>
<li>
<p>Ask yourself: what are some examples of free software that are important in your life? Which do you use on a daily basis? Are there any you would like to help make succeed or want to give back to? Or perhaps there is one with useful features missing that you could perhaps contribute towards. Maybe you would simply like to get to know the people behind a certain project a little bit better.</p>
</li>
<li>
<p>Otherwise, you can get inspiration from the choices made by other contributors in the comments below, or in the <a href="/courses/course-v1:MOOC-FLOSS+101+2021_1/jump_to_id/chap-02-seq-05-ver-02" target="[object Object]">list of suggested projects</a> in the following unit</p>
</li>
</ul>
</ul>
<h4>What to contribute?</h4>
<p>You might already have an idea of <em>what</em> you would like to contribute to a project, and that can be useful, both in terms of motivation and to guide your exploration. But generally, it is easier to remain open-minded about the actual contributions you'll be making.</p>
<p>As we'll see in the following chapters, at first the main challenge is to become familiar with the project, its contribution process and its members. This will make it easier for you to get the attention and help you need to get your work accepted. So it can be easier to start with small tasks that existing project members already want. This will earn you quick wins and help you build relationships. These will come in handy later, especially when you want to get the project to accept work that <em>you</em> care more about.</p>
<p></p></div></div>
</div>
</div>
</div>
<script type="text/javascript">
(function (require) {
require(['/static/js/dateutil_factory.a28baef97506.js?raw'], function () {
require(['js/dateutil_factory'], function (DateUtilFactory) {
DateUtilFactory.transform('.localized-datetime');
});
});
}).call(this, require || RequireJS.require);
</script>
<script>
function emit_event(message) {
parent.postMessage(message, '*');
}
</script>
</div>
<div class="xblock xblock-public_view xblock-public_view-vertical" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="VerticalStudentView" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="vertical" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@vertical+block@chap-02-seq-05-ver-02" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<div class="vert-mod">
<div class="vert vert-0" data-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-02-html-01">
<div class="xblock xblock-public_view xblock-public_view-html xmodule_display xmodule_HtmlBlock" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="XBlockToXModuleShim" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="html" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-02-html-01" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<script type="json/xblock-args" class="xblock-json-init-args">
{"xmodule-type": "HTMLModule"}
</script>
<div class="edit-link-wrapper"><div class="edit-link"><p style="text-align: right;"><a href="https://gitlab.com/-/ide/project/mooc-floss/mooc-floss/edit/master/-/course/html/chap-02-seq-05-ver-02-html-01.html" target="_blank"><i class="fa fa-pencil mr-1"></i> Edit on Gitlab</a></p></div><div class="edit-link-original-content"><h3>List of projects</h3>
<p>The below list of partner projects may help you if you're still unsure which project to pick, are out of ideas, or would simply like a recommendation.</p>
<h4>Partner projects</h4>
<p>This is a list of the projects who have contributed to this course, and are interested in helping new contributors get started:</p>
<ul>
<li><a href="https://inkscape.org/" target="[object Object]">Inkscape</a>: a vector graphics editor for GNU/Linux, Windows and MacOS X. It offers a rich set of features and is widely used for both artistic and technical illustrations such as cartoons, clip art, logos, typography, diagramming and flowcharting. </li>
<li><a href="https://open.edx.org/" target="[object Object]">Open edX</a>: an online learning management platform created by <a href="https://en.wikipedia.org/wiki/MIT" class="mw-redirect" title="MIT">MIT</a> and <a href="https://en.wikipedia.org/wiki/Harvard" class="mw-redirect" title="Harvard">Harvard</a>. It is used to publish <a href="https://en.wikipedia.org/wiki/Massive_open_online_course" title="Massive open online course">massive open online courses</a> (MOOCs). It hosts online campuses, instructor-led courses, degree programs, and self-paced courses across a wide range of disciplines.</li>
<li><a href="https://www.openstack.org/" target="[object Object]">OpenStack</a>: a cloud computing platform which is mostly deployed as infrastructure-as-a-service (IaaS) in both public and private clouds. Users have access to virtual servers and other resources.</li>
<li><a href="https://www.wikidata.org" target="[object Object]">Wikidata</a>: a collaboratively edited multilingual knowledge base hosted by the Wikimedia Foundation. It is a common source of open data that Wikimedia projects such as Wikipedia use.</li>
</ul>
<h4>Projects other learners contributed to</h4>
<p>You can contribute to this list by posting a project you successfully contributed towards during this course. To do this, <a href="https://gitlab.com/-/ide/project/mooc-floss/mooc-floss/edit/master/-/course/html/chap-02-seq-05-ver-02-html-01.html" target="[object Object]">submit a merge request to the course project on the current page's source file</a>. Be sure to include a description of the contribution, as well as a link to it in the merge request.</p>
<h4>Other open source projects</h4>
<p>The following links host lists of free software projects:</p>
<ul>
<li><a href="https://en.wikipedia.org/wiki/List_of_free_and_open-source_software_packages" target="_blank">Lists of FLOSS projects on Wikipedia</a> and <a href="https://www.wikidata.org/wiki/Wikidata:WikiProject_Informatics/Software/List_of_software_using_the_Qt_toolkit" target="_blank">Wikidata</a></li>
<li><a href="https://awesomeopensource.com" target="[object Object]">Curated list of resources</a> for open source projects (<a href="https://github.com/cornelius/awesome-open-source" target="[object Object]">source</a>)</li>
<li><a href="https://framalibre.org">https://framalibre.org</a></li>
<li><a href="https://alternativeto.net/">https://alternativeto.net/</a></li>
<li><a href="https://f-droid.org/">https://f-droid.org/</a></li>
<li><a href="https://fsfe.org/activities/ilovefs/">https://fsfe.org/activities/ilovefs/</a></li>
</ul>
<p></p>
<p></p></div></div>
</div>
</div>
<div class="vert vert-1" data-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-02-html-02">
<div class="xblock xblock-public_view xblock-public_view-html xmodule_display xmodule_HtmlBlock" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="XBlockToXModuleShim" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="html" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-02-html-02" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<script type="json/xblock-args" class="xblock-json-init-args">
{"xmodule-type": "HTMLModule"}
</script>
<div class="edit-link-wrapper"><div class="edit-link"><p style="text-align: right;"><a href="https://gitlab.com/-/ide/project/mooc-floss/mooc-floss/edit/master/-/course/html/chap-02-seq-05-ver-02-html-02.html" target="_blank"><i class="fa fa-pencil mr-1"></i> Edit on Gitlab</a></p></div><div class="edit-link-original-content"><h3>Which project did you pick?</h3>
<p>Share your pick with the rest of the course's community by posting a comment below. Let us know why you picked that project and what you are hoping to achieve.</p></div></div>
</div>
</div>
<div class="vert vert-2" data-id="block-v1:MOOC-FLOSS+101+2021_1+type@discussion+block@01a8864dc0944fa6a5d7d5755801935b">
<div class="xblock xblock-public_view xblock-public_view-discussion" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-block-type="discussion" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@discussion+block@01a8864dc0944fa6a5d7d5755801935b" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<div class="page-banner"><div class="alert alert-warning"><span class="icon icon-alert fa fa fa-warning" aria-hidden="true"></span><div class="message-content">Discussion is only accessible to enrolled learners. Sign in or register, and enroll in this course to view it.</div></div></div>
</div>
</div>
</div>
<script type="text/javascript">
(function (require) {
require(['/static/js/dateutil_factory.a28baef97506.js?raw'], function () {
require(['js/dateutil_factory'], function (DateUtilFactory) {
DateUtilFactory.transform('.localized-datetime');
});
});
}).call(this, require || RequireJS.require);
</script>
<script>
function emit_event(message) {
parent.postMessage(message, '*');
}
</script>
</div>
<div class="xblock xblock-public_view xblock-public_view-vertical" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="VerticalStudentView" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="vertical" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@vertical+block@chap-02-seq-05-ver-03" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<div class="vert-mod">
<div class="vert vert-0" data-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-03-html-01">
<div class="xblock xblock-public_view xblock-public_view-html xmodule_display xmodule_HtmlBlock" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="XBlockToXModuleShim" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="html" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-03-html-01" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<script type="json/xblock-args" class="xblock-json-init-args">
{"xmodule-type": "HTMLModule"}
</script>
<div class="edit-link-wrapper"><div class="edit-link"><p style="text-align: right;"><a href="https://gitlab.com/-/ide/project/mooc-floss/mooc-floss/edit/master/-/course/html/chap-02-seq-05-ver-03-html-01.html" target="_blank"><i class="fa fa-pencil mr-1"></i> Edit on Gitlab</a></p></div><div class="edit-link-original-content"><h3 id="the-importance-of-early-and-frequent-communication">The importance of early and frequent communication</h3>
<p>When considering contributing to a project, it can be tempting to get straight into the code or contribution work. However, communication is almost always a more important first step: remember, an open source project is not just the code, it's a community -- even when it only has a single maintainer! Plus, the project's community will be who decides whether to integrate our work into the project or not.</p>
<p>So, before <em>doing</em> anything, it's important to understand how the project and its community works, and how we (and our work) can fit in. It's useful to think of it like joining an organization, attending a party at someone's home, or posting on an online forum. The ability to successfully contribute to the group will depend on how well we approach it.</p>
<h4>Joining the party</h4>
<p>At first, joining a project's community can feel a bit like being at a party with lots of people we don't know. We go up to someone, a glass in our hand, and strike up a conversation. The topic doesn't need to be brilliant, but it's important for the interaction to be appealing to the person we are talking to. The same is true for a project's community, so it's useful to figure out how to mingle, and to start mingling as early as possible.</p>
<p>The longer we wait in a corner without talking to anyone, the more difficult it becomes to start mingling. On the other hand, if we barge in and immediately try to monopolize the conversation with our own project or topic, it could end up being ignored or rejected. We are much more likely to be well-received by the group if we start by first understanding the current discussions, figuring out the group dynamics and interests, saying hi, or offering to help on an existing project. We can then use these interactions as an opportunity to ask more questions, all the while learning more and more about the community. At first, the interactions may feel superficial, but the earlier we can get the conversation started, the sooner we can move onto more interesting topics. That's when we'll really get to know the community.. </p>
<p><em>[TODO: Media: multiple illustrations showing the different scenes described, showing the effect of the newcomer attitude on the other people at a party]</em></p>
<h4>Getting "hired" as a contributor</h4>
<p>Contributing to a project is similar to networking when looking for a new job. To be recommended for a job, or simply to be aware of good job opportunities, we need people to know and trust us. This is also true in the context of an open source project; we need to be known and trusted enough to warrant the maintainers' time and attention, and to increase the chances that they will accept our work.</p>
<p>It all comes down to the fact that someone will need to accept our first contribution. For this to happen, someone will need to be paying attention to what we submit, when we submit it. This is more likely to happen with people we have known for longer; for instance, someone we've known (even a little bit) for four weeks is more likely to accept our contribution than someone we only met yesterday. When the time comes to accept our contribution, we already need to be a part of the team somehow, even if it's just a little bit. Being around for some time, and interacting with other community members, is the simplest way to achieve this.</p>
<h4>Developing empathy</h4>
<p>Interacting with the project's community directly also develops our own understanding of the project. We are social animals, so social interaction is a huge part of knowledge acquisition within a group. By putting ourselves out there, interacting with others, and adapting how and what we contribute, we are making it more likely that we will be accepted than if we had waited.</p>
<p>Interacting with the community also develops our empathy and understanding of the individuals who manage a project. Take, for example, a domain expert who comes to contribute to a free software project; they might assume that some of the other project contributors are hobbyists, and might not take them very seriously. But by interacting with them directly rather than just looking at the project from a distance, they may soon realize that they were wrong. There are times when experts make mistakes too, so it helps if everyone has a friendly attitude towards those who are less skilled than they are. Friendly interactions bring everyone closer.</p>
<p>There is also the opposite case, where a new contributor assumes that everyone in the project is an expert, and ends up producing code that is too complicated for the project to be able to maintain. Interacting with other project members early and frequently helps to ensure that everyone will be able to understand and maintain the code being produced.</p>
<h4>Picking a gift</h4>
<p>Making a contribution without first interacting with the community would be like trying to buy a gift for someone we have never talked to; we might get lucky, but the chances are slim that we'd pick a gift that they would actually use. The same is true for contributions. In fact, an unused contribution is worse than an unused gift, because here _we_ lose out too; our change won't be integrated into the project, and we might have to keep maintaining it separately each release in order to keep using it. We would stand a better chance by first learning a bit about the community and focusing on small, mutually beneficial contributions.</p>
<h4>Dealing with the social anxiety of public discussions</h4>
<p>Talking to other people, in public, on a respected project can be a difficult psychological step - in fact, it can be one of the hardest, especially when joining a new project for the first time. We are often afraid of bothering people, or of being rejected or ignored. It's important to deal with this feeling now, move passed this step, and realize that it's fine. If we delay it, everything else will also be delayed. Everything about contributing relies on good communication, so it's important to put ourselves out there as soon as possible, and start talking to people.</p>
<p><a href="/courses/course-v1:MOOC-FLOSS+101+2021_1/jump_to_id/chap-05-seq-01-ver-01" target="[object Object]">Module 4</a> will go into more detail about communication, but for now, the goal is simply to get the ball rolling.</p>
</div></div>
</div>
</div>
</div>
<script type="text/javascript">
(function (require) {
require(['/static/js/dateutil_factory.a28baef97506.js?raw'], function () {
require(['js/dateutil_factory'], function (DateUtilFactory) {
DateUtilFactory.transform('.localized-datetime');
});
});
}).call(this, require || RequireJS.require);
</script>
<script>
function emit_event(message) {
parent.postMessage(message, '*');
}
</script>
</div>
<div class="xblock xblock-public_view xblock-public_view-vertical" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="VerticalStudentView" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="vertical" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@vertical+block@chap-02-seq-04-ver-01" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<div class="vert-mod">
<div class="vert vert-0" data-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-04-ver-01-html-01">
<div class="xblock xblock-public_view xblock-public_view-html xmodule_display xmodule_HtmlBlock" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="XBlockToXModuleShim" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="html" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-04-ver-01-html-01" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<script type="json/xblock-args" class="xblock-json-init-args">
{"xmodule-type": "HTMLModule"}
</script>
<div class="edit-link-wrapper"><div class="edit-link"><p style="text-align: right;"><a href="https://gitlab.com/-/ide/project/mooc-floss/mooc-floss/edit/master/-/course/html/chap-02-seq-04-ver-01-html-01.html" target="_blank"><i class="fa fa-pencil mr-1"></i> Edit on Gitlab</a></p></div><div class="edit-link-original-content"><p>We all love some free software projects ☺</p>
<p>Since most of them are maintained by a small dedicated team, or even in some cases by a single individual, they always appreciate positive feedback about their work, and a simple "<em>Thank you</em>" note can mean a lot!</p>
<p>Our goal here is to engage with an open source project, but without committing to anything -- simply to help realize that the contributors are humans that we can talk to and you can engage with. This first contact can be a big psychological barrier, so it's important to deal with it early on, before actually attempting to contribute. Otherwise, it can hinder the necessary level of communication for contributing. </p>
<p>In order to do so, we'll start with the simplest interaction possible: go say thanks to any FLOSS project you like!</p>
<p><strong>Choose a project you use and love, and try to thank the contributors involved!</strong></p>
<p>Feel how it's actually hard to take the step of communicating publicly with a free software project, even just to say "Hello. Thank you for the software that you've done. I love it." The earlier this is confronted with, the easier it will be to deal with it later on.</p>
<p>You don't need to worry about bothering the project: it will be a nice change for the maintainer, who are more used to get people coming to complain than to say thanks! Your post will be a breath of fresh air compared to the more common "Oh, this *** software doesn't work. How do you make it work?"</p>
<p>Where you post your "thank you" will vary depending on the project. Spend a few minutes looking at how folks communicate on the project. Maybe they use Discord, a forum like Discourse, other chat apps, video call meetups, or posts on GitHub or GitLab issues. Pick the platform that makes the most sense, then briefly review the recent history of where you're about to post to ensure it's not already overwhelmed with "thank you!" notes. It is (sadly) rarely ever the case, though. If you only see a few, or none, go ahead!</p>
<p>You can use the discussion space below to get some inspiration on projects where others have thanked some projects, or to see if some big projects are particularly welcoming if you're feeling a bit shy. You are encouraged to go to a variety of projects as wide as possible, but ultimately you're free to chose any! Conversely, once you've chosen a project that's not mentioned in the discussion, come back to the forum and add a topic about it! What did you say, how did you find the channel, how did people respond? Talking about it will remove barriers for future students and foster future interactions.</p>
<p>Ideally, you can take projects which have a synchronous communication channel (discussions, chats, microblogging, github discussions, etc.), as it will be easier for the maintainer to see the message and reply with a "you're welcome" than seeing an email sent to a hundreds people mailing list and pondering whether answering would overspam contributors receiving already hundreds of emails a day for some big projects. </p>
<p>Depending on the software chosen, you'll have different stories, so here are some examples. You can always go for generic short messages like "Thanks a lot for your work!" but the message will be more heartwarming if more personalized, like those examples:</p>
<blockquote>
<p>Thanks @StellariumDev for your awesome software! I used it all night in a starry night during the summer to find all planets and galaxies and Saturn is always the best thing I ever saw 🌌 You're awesome!</p>
<p>@Wesnoth I spent countless hours in your campaigns, and I always love the dedication put into the art and storyline of your awesome game. Keep it up! ♥</p>
<p>@OpenEdX The great work you've put into your platform makes it ever so easy to create a MOOC that would be near impossible otherwise. Thanks to all of you!</p>
</blockquote>
<p></p></div></div>
</div>
</div>
<div class="vert vert-1" data-id="block-v1:MOOC-FLOSS+101+2021_1+type@discussion+block@e539cc6a6ac14bffbc292b802b79d9d1">
<div class="xblock xblock-public_view xblock-public_view-discussion" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-block-type="discussion" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@discussion+block@e539cc6a6ac14bffbc292b802b79d9d1" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<div class="page-banner"><div class="alert alert-warning"><span class="icon icon-alert fa fa fa-warning" aria-hidden="true"></span><div class="message-content">Projects and places is only accessible to enrolled learners. Sign in or register, and enroll in this course to view it.</div></div></div>
</div>
</div>
</div>
<script type="text/javascript">
(function (require) {
require(['/static/js/dateutil_factory.a28baef97506.js?raw'], function () {
require(['js/dateutil_factory'], function (DateUtilFactory) {
DateUtilFactory.transform('.localized-datetime');
});
});
}).call(this, require || RequireJS.require);
</script>
<script>
function emit_event(message) {
parent.postMessage(message, '*');
}
</script>
</div>
<div class="xblock xblock-public_view xblock-public_view-vertical" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="VerticalStudentView" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="vertical" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@vertical+block@chap-02-seq-05-ver-04" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<div class="vert-mod">
<div class="vert vert-0" data-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-04-html-01">
<div class="xblock xblock-public_view xblock-public_view-html xmodule_display xmodule_HtmlBlock" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="XBlockToXModuleShim" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="html" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-04-html-01" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<script type="json/xblock-args" class="xblock-json-init-args">
{"xmodule-type": "HTMLModule"}
</script>
<div class="edit-link-wrapper"><div class="edit-link"><p style="text-align: right;"><a href="https://gitlab.com/-/ide/project/mooc-floss/mooc-floss/edit/master/-/course/html/chap-02-seq-05-ver-04-html-01.html" target="_blank"><i class="fa fa-pencil mr-1"></i> Edit on Gitlab</a></p></div><div class="edit-link-original-content"><p>Even though we are coming to contribute, the members of the project are also contributors volunteering their time -- and have been doing so for much longer. So they don't owe us anything: we don't pay them for their work. We aren't clients, but fellow community members, and it's important to treat them as such. If anything, at the beginning <em>we</em> owe the project contributors a lot:</p>
<ul>
<li>The time they have spent building the project before we join it</li>
<li>The time they might spend answering our questions and helping us while we learn the ropes. This is a precious gift from very skilled developers, and it would be expensive if we had to pay for it</li>
<li>The time they spend maintaining the project on an ongoing basis. This includes taking responsibility for any patches they accept in the project, including our own contributions. Once a contribution has been merged, maintainers take over the burden of having to carry it over in each release. Sometimes this can become a larger commitment than the patch itself.</li>
</ul>
<p>The most scarce resource in a FLOSS project is the project maintainers' time. As new contributors, we will need them to spend some of that time on us so that we are able to contribute successfully to the project. At the very least, we will need them to take some time to review our work. If we're lucky, they might give us some further guidance and answers while we learn. To get the maintainers to prioritize spending some of their time working with us, we'll have to show to them that we are worth the time investment.</p></div></div>
</div>
</div>
<div class="vert vert-1" data-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-04-html-02">
<div class="xblock xblock-public_view xblock-public_view-html xmodule_display xmodule_HtmlBlock" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="XBlockToXModuleShim" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="html" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-04-html-02" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<script type="json/xblock-args" class="xblock-json-init-args">
{"xmodule-type": "HTMLModule"}
</script>
<div class="edit-link-wrapper"><div class="edit-link"><p style="text-align: right;"><a href="https://gitlab.com/-/ide/project/mooc-floss/mooc-floss/edit/master/-/course/html/chap-02-seq-05-ver-04-html-02.html" target="_blank"><i class="fa fa-pencil mr-1"></i> Edit on Gitlab</a></p></div><div class="edit-link-original-content"><h3 id="starting-as-small-as-possible">Starting as small as possible</h3>
<p>As new contributors arriving at a project, we often feel overwhelmed by the sheer amount of information to absorb in order to be able to make successful contributions. We can also be blocked by what we don't yet know -- amongst other things, we're not yet familiar with the process and code base, nor do we know the opinion and priorities of the maintainers.</p>
<p>Mutual trust, knowledge and relationships take time to build, so it's important not to overload ourselves nor the maintainers by aiming too high, too fast. It's similar to the reasons why agile development exists -- to be useful, code needs to meet specific needs from users or other developers. To achieve this, it requires frequent communication and iterative changes reflecting new information you collect over time. Therefore, it's a good idea to plan work in small, short iterations, and avoid writing a lot of code at one time.</p>
<p>One good advice encourages to "<a href="https://blog.codinghorror.com/check-in-early-check-in-often/">commit early and commit often</a>", i.e. making a small and frequent stream of commits while working, rather than making one large infrequent commit. The idea, besides preserving a more granular history of changes, is to facilitate the integration of your work with that of other developers. Commits are a form of communication; they show other developers what you're currently working on, and allow them to reconcile their work with yours more easily. When it comes to contribution, this is even more important. Initially, existing developers won't even be aware of you, but if you push code their way in small and frequent quantities, they will soon notice your work. In turn, you will be able to see some of their code through their reviews. The saying then becomes, "get merges early and get merges often".</p>
<h4>Quick feedback loop</h4>
<p>We want to maximize the amount of feedback we get from the project, as this information will help us to shape our contributions in a way that will get them accepted. Small iterations optimize this information collection process:</p>
<ul>
<li>By producing concrete work, we incentivize the project maintainers to review our code and provide feedback</li>
<li>When we keep patches of iterations small, there is less effort required from maintainers, so they will likely get to it faster</li>
<li>Getting feedback allows us to approach each set of changes more efficiently, as we will have information from previous rounds of feedback</li>
</ul>
<p>Example of what not to do: In OpenStack, Hewlett-Packard forked the code base and worked for 1-2 years on a huge contribution, without frequent interaction. When it was time to be merged, it was a catastrophe of epic proportions to the point that it made the news, and its management was forced to acknowledge the issue.</p>
<p>Keeping the size of commits small is especially important in the initial stages when we know very little about the project and have not yet earned the trust of the project maintainers. At this stage, we also don't yet know what we _don't_ know, so shouldn't over-commit. This could turn a positive experience into a negative one, for example, if we were to realize that we didn't actually have the time to complete what we committed to.</p>
<p>It's a good idea to take on a little work at a time, be sure to complete it, and then only take on more once you're done.</p>
<h4>The Golden Rule of Contribution Size</h4>
<p>The golden rule for new contributors:</p>
<blockquote>
<p><strong>The size of a contribution/interaction should not exceed the total <em>combined</em> size of the previous accepted contributions to the project</strong>, starting with the smallest possible useful contribution.</p>
</blockquote>
<p>The idea is to start by making small contributions very frequently in order to get quick and frequent feedback. From there, we can progressively increase the size of the contributions we make.</p>
<p>Math-inclined readers will notice that the rule above contains an exponential formula. It can seem excruciatingly slow at first, but after a while, the size starts to build up very quickly. This reflects the amount of learning that's required initially in order to make a contribution -- <em>any</em> contribution, even a small one, requires a large amount of effort, learning and coordination. The level of trust from the project will also be low at first, but will quickly build up once people start to notice that we are regularly getting contributions in. As we start to earn trust and develop our understanding of the project, the amount of hand-holding we need will decrease, and other contributors will become more comfortable that the effort they use helping us won't be wasted.</p>
<p style="text-align: center;"><em><img src="/assets/courseware/v1/4bc3ae878be7bee93b5c9f57bf4147fa/asset-v1:MOOC-FLOSS+101+2021_1+type@asset+block/natural-exponential-function.png.webp" alt="An exponential curve" style="display: block; margin-left: auto; margin-right: auto;" width="401" height="278" />Fig 1 - An exponential curve</em></p>
<p>An accepted contribution is one that has been merged (for a pull request), or explicitly accepted or welcomed by a project member. This is an important step, as it gives us feedback, as well as confirmation, that we are headed in the right direction -- otherwise, we have no way of knowing if we are really contributing to the project, or if we are simply piling up a lot of code that will never be used.</p>
<p>To minimize the amount of effort that is wasted, the most efficient approach is to start by picking the smallest interaction or contribution we can think of. The goal isn't to demonstrate technical excellence, or to show that we've done a lot of work, but rather to get our work accepted or recognized -- that's where the actual work will be required at first. If the contribution isn't accepted or isn't even noticed, that's still useful information; it means that we need to try something else. We should then work on something else of a similar size, and only start to increase the size of our contributions once we've managed to get something (anything!) accepted.<br /><br /><br /></p>
</div></div>
</div>
</div>
</div>
<script type="text/javascript">
(function (require) {
require(['/static/js/dateutil_factory.a28baef97506.js?raw'], function () {
require(['js/dateutil_factory'], function (DateUtilFactory) {
DateUtilFactory.transform('.localized-datetime');
});
});
}).call(this, require || RequireJS.require);
</script>
<script>
function emit_event(message) {
parent.postMessage(message, '*');
}
</script>
</div>
<div class="xblock xblock-public_view xblock-public_view-vertical" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="VerticalStudentView" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="vertical" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@vertical+block@chap-02-seq-05-ver-05" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<div class="vert-mod">
<div class="vert vert-0" data-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-05-html-01">
<div class="xblock xblock-public_view xblock-public_view-html xmodule_display xmodule_HtmlBlock" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-init="XBlockToXModuleShim" data-runtime-class="LmsRuntime" data-runtime-version="1" data-block-type="html" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@html+block@chap-02-seq-05-ver-05-html-01" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="False">
<script type="json/xblock-args" class="xblock-json-init-args">
{"xmodule-type": "HTMLModule"}
</script>
<div class="edit-link-wrapper"><div class="edit-link"><p style="text-align: right;"><a href="https://gitlab.com/-/ide/project/mooc-floss/mooc-floss/edit/master/-/course/html/chap-02-seq-05-ver-05-html-01.html" target="_blank"><i class="fa fa-pencil mr-1"></i> Edit on Gitlab</a></p></div><div class="edit-link-original-content"><h3>Activity: First interactions with the project</h3>
<h4>Interacting is contributing!</h4>
<p>When we think of a contribution, we often think of contributing code, but there are many other forms of contribution. Simply interacting with a project by saying "thanks!" (like we did in the activity earlier), providing feedback, reporting bugs, and answering questions, are all useful forms of contribution. What's more, they usually don't require any specific permissions, setup, special project knowledge, or even any technical skills at all (unlike when we're trying to get code merged into the project). These contributions can also be a lot smaller and quicker to do, which is exactly what we're after at the moment while we're still finding our bearings.</p>
<h4>Step 1. Giving some love</h4>
<p>If you haven't already done so during the <a href="/courses/course-v1:MOOC-FLOSS+101+2021_1/jump_to_id/chap-02-seq-04-ver-01" target="[object Object]">activity "Give some love!"</a> (perhaps because you've picked a different project for the current activity), the first step is to say thanks to the project. This is the most basic form of interaction, and will allow you to identify the project's communication channels as well the people involved. It will also allow you the opportunity to have a positive interaction with the community.</p>
<p>Refer to the <a href="/courses/course-v1:MOOC-FLOSS+101+2021_1/jump_to_id/chap-02-seq-04-ver-01" target="[object Object]">activity "Give some love!"</a> for the details.</p>
<h4>Step 2. Asking a question</h4>
<p>Now we need to go a bit further. We want to have a proper interaction where someone responds to us, and we have a little bit of back-and-forth. The idea is first to break the ice, and then to keep the conversation going.</p>
<p>It might be worth opting for a more synchronous way of communication for this, to shorten the feedback loop (chat/IRC can be a good option for this), but it all depends on the project, and how much time you have available. Sometimes forums or mailing lists work well too.</p>
<p>It's a difficult and awkward step -- for everyone. Often, we don't know what to ask, and it can feel artificial. But that's normal, and it's exactly what we are trying to overcome here. We need to get past the initial awkwardness of meeting strangers, so that later on, we can focus on the work we want to do. By that stage, we'll have our hands full, so we need to get the initial interactions out of the way now.</p>
<h4>Step 3. Contributing support work</h4>
<p>Contributing support work is one of the easiest forms of contribution, and also one of the most useful for the project. The project maintainers are often really grateful for this kind of help; they almost always have too many questions to answer, too many bug reports to review and to try to reproduce. It's a low-friction way to start contributing immediately, all the while gaining knowledge about the project, and recognition from other project members.</p>
<p>Depending on the project, there are a few places where this type of contribution can be done:</p>
<ul>
<li>In the forum: Look for threads which are missing an answer</li>
<li>On chat/IRC: See if there is a question that you can help answer, or a conversation you can contribute meaningfully towards</li>
<li>Bug tracker: Look for bugs which haven't been acknowledged or confirmed by project members yet and try to reproduce them. Post the outcome of your attempt in the ticket (remember to include your setup details). Ask clarifying questions, and include links to similar tickets if you can find any</li>
</ul>
</div></div>
</div>
</div>
<div class="vert vert-1" data-id="block-v1:MOOC-FLOSS+101+2021_1+type@problem-builder+block@eadf8e3f44e942849f1c85549b0441ff">
<div class="xblock xblock-public_view xblock-public_view-problem-builder" data-course-id="course-v1:MOOC-FLOSS+101+2021_1" data-block-type="problem-builder" data-usage-id="block-v1:MOOC-FLOSS+101+2021_1+type@problem-builder+block@eadf8e3f44e942849f1c85549b0441ff" data-request-token="51e24bae902911ee8c631237928d7ffd" data-graded="False" data-has-score="True">
<div class="page-banner"><div class="alert alert-warning"><span class="icon icon-alert fa fa fa-warning" aria-hidden="true"></span><div class="message-content">Posting the results is only accessible to enrolled learners. Sign in or register, and enroll in this course to view it.</div></div></div>
</div>
</div>
</div>
<script type="text/javascript">
(function (require) {
require(['/static/js/dateutil_factory.a28baef97506.js?raw'], function () {
require(['js/dateutil_factory'], function (DateUtilFactory) {
DateUtilFactory.transform('.localized-datetime');
});
});
}).call(this, require || RequireJS.require);
</script>
<script>
function emit_event(message) {
parent.postMessage(message, '*');
}
</script>
</div>