Skip to content

Contribution Campaign

Hongli Lai edited this page Jun 16, 2014 · 5 revisions

Phusion Passenger has historically had relatively few contributors. Part of the reason for this is that, for a large part, Passenger is written in C++. The lack of developer documentation also played a role. We want change to this. After all, Passenger is open source, and it's important that people can and do easily contribute.

We've already solved the developer documentation problem. But this alone is not enough. We want to setup a campaign to encourage contributions. We ask for your help to setup this campaign.

Why don't we do it ourselves?

  1. Building this takes time away from Passenger core development.
  2. We want to embrace the open source concept much more than we've had in the past. The idea is that everything, even the campaign itself, should be a community effort. :)

What we need to build

We need to build a web app which includes:

  • A front page with motivational messages to encourage contribution.
  • A reward system with profiles, bounty badges and achievements for contributors.

Who we are looking for

We're looking for web developers who can help us build this. Preferably, the web page and reward systems are built in Node.js or Meteor.

Why these technologies, and not Ruby? It's because we want to "eat our own dogfood". We've historically focused a lot on Ruby, so and so Passenger has a lot of Ruby test cases. By comparison, we have limited Node.js and Meteor test cases. We want to change this. Passenger is now a true polyglot app server, so we want to ensure that Node.js and Meteor are treated like first-class citizen.

The tasks are pretty easy, so you don't have to be an expert. Intermediate skill is fine. If you want, we can mentor you, so you can learn from helping.

Interested in helping us? Please let me know through one of the following channels. Use the subject "Helping with the Contribution campaign".

The front page

The front page is a marketing web page which explains why the reader should contribute to Passenger. Reasons include:

  • It improves your skills, because you can learn a lot from the Passenger design, architecture and codebase.
  • It's a great way to learn how open source projects are managed.
  • It's fun and challenging.
  • It gains you reputation in the community.
  • It advances your career, because you can show employers what you've done.

It should also:

  • Explain briefly what the rewards are for contributing to Passenger.
  • Explain how to get started as a contributor. You can link to the Contributors Guide and Developer QuickStart.
  • Explain where contributors can find tasks to pick from (answer: the issue tracker).
  • Contain many call to actions.

We already have a mockup of this web page. Just ask us for it. The mockup is not a strict, pixel-perfect mockup. It's a rough design, so the implementor has a lot of freedom. As long as it looks more-or-less like the mockup, it's fine.

The web page should also be:

  • Responsive.
  • Fast to load.

The reward system

We want to encourage contributions by rewarding contributors. Rewards come in the following forms:

  • Get listed in the Git history.
  • Get listed in the CONTRIBUTORS file in git (the contributor index).
  • Receive a contributor profile page.

Bigger contributors get bigger rewards. Major contributions are also rewarded with:

  • Testimonials from the Passenger core developers, that they can use on their LinkedIn profile, or their Passenger contribution profile page.
  • Tweets from the Passenger core developers about their contributions.
  • A Featured Contributor article on the Phusion Blog.

Profiles

A profile page shows the following information:

  • Name.
  • Gravatar.
  • Some personal information (LinkedIn link, Twitter handle, Github link).
  • Any testimonials that the administrators (Passenger core developers) have added.
  • The contributor's power level (number of bounty points claimed so far), along with a power-level specific badge.
  • A list of claimed bounties.
  • A list of achievements.
  • A list of Git commits.

A profile page can be created by as follows:

  1. A contributor navigates to the web app and clicks on some sort of "Create profile" button.
  2. The web app authenticates the contributor through Github.
  3. The web app checks whether there are any Git commits under that contributor's name. If yes, it creates a profile page. If not, it shows an error.

It should be possible for the administrator to manually create a profile page for someone.

Bounties

Issues in the issue tracker are labeled with bounty levels (e.g. "Bounty/Easy"). Every time a contribution has been accepted, we say that s/he has "claimed a bounty", and s/he will be awarded bounty points based on the level.

  • Very easy: 1 point.
  • Easy: 3 points.
  • Medium: 9 points.
  • Hard: 27 points.
  • Very hard: 81 points.

The profile page shows a contributor's "power level", which is the number of bounty points awarded so far. This is further explained later.

The profile page also shows the list of claimed bounties: a list of issues that s/he has solved, along with the difficulty level.

Bounty points are assigned by the administrator. I imagine it would work like this:

  1. The administrator goes to the reward system's administration panel.
  2. Inside the panel, s/he clicks "Award bounty".
  3. S/he enters the contributor's Github username.
  4. S/he enters the Github issue link or issue number.
  5. The system looks up the difficulty level based on the issue's labels.
  6. The system creates a profile for the contributor, if s/he doesn't have one yet.
  7. The system registers the reward.
  8. The system posts a comment to the Github issue tracker, notifying the contributor that s/he has been awarded bounty points, linking to the profile page.

Power level

The more bounties a contributor has claimed, the more bounty points s/he has. This is called the power level. We want to show a badge in the profile based on the power level.

  • 0 points: Iron.
  • 1-4 points: Steel.
  • 5-12 points: Bronze.
  • 13-36 points: Silver.
  • 37-108 points: Diamond.
  • 109-324 points: Mithril.
  • 325-648 points: Adamantium.

Achievements

Achievements are rewarded for completing specific learning tasks, or for contributing in a specific category.

Learning achievements:

  • The Apprentice: Read the Contributors Guide.
  • Bootstrapped: Watched the Developer QuickStart video or read the Developer QuickStart document.
  • Walk the Walk: Watched the Code Walkthrough video.
  • Detailed Examiner: Read the Design & Architecture document.

Contributors can claim learning achievements by taking simple exams. An exam consists of 3 multiple-choice questions.

Contribution-related achievements are as follows.

Web servers and connection handling:

  • Mighty Tsar: contributed an Nginx-specific patch.
  • Honorable Warrior: contributed an Apache-specific patch.
  • Webmaster: solved an HTTP handling problem.
  • Electric Engineer: solved a WebSocket handling problem.

Operating systems and portability:

  • Penguin Herder: contributed a Linux-specific patch.
  • Cat Herder: contributed an OS X-specific patch.
  • Luggage Specialist: solved a portability problem.

Languages/frameworks:

  • Gem Miner: contributed a Ruby-specific patch.
  • Snake Herder: contributed a Python-specific patch.
  • Ninja: contributed a Node.js-specific patch.
  • Comet Strike: contributed a Meteor-specific patch.

Other:

  • Fast and Furious: contributed an optimization.
  • Friend of Martin: contributed a refactoring patch.
  • Holy Author: contributed documentation.
  • Hero of the Century: contributed significantly.

Your reward

Of course, you will be rewarded too. Put your name on the footer of the website. :) You can also create a contributor profile for yourself. We'll even write a testimonial for you.