---
title: Adding Committers
tags: ["pmc","committers"]
---

Identifying potential new committers, calling a vote for their recognition
as a committer and processing the relevant documents are tasks to which
the whole community can contribute.

Each project has a different approach to managing new committers. This page
describes a common process found in many Apache projects. It also provides
draft templates for the various communications that are necessary.

Some of the PMCs automatically make committers PMC members. The templates below
have conditional `[if]` clauses for that.

If the PMC has separate process for approving PMC members, see
[new PMC member](/pmc/adding-pmc-members.html).  
The [Contributor Ladder](https://community.apache.org/contributor-ladder.html) helps explain different roles.

{{% toc %}}

<span id="NewCommitter-Summary"></span>
## TL;DR - Inviting a new Committer

1. Discuss the proposed committer (and optionally PMC member). (Use
   the [committer discuss template](/templates/committer-discuss.txt).)
1. If the discussion seems to be going positively,
   call a vote. (Use the [committer vote template](/templates/committer-vote.txt) for
   committer, the [committer + PMC member vote template](/templates/committer-pmc-vote.txt) for
   committer and PMC member.)
1. Close the vote. (Use the [committer vote results template](/templates/committer-results.txt) 
   for a committer vote, or the [committer + PMC member vote results 
   template](/templates/committer-pmc-results.txt) for a committer + PMC member vote.)
1. If the result is positive, invite the new committer. (Use the
   [committer invite template](/templates/committer-invite.txt).)

If they accept, then:

1. If they already have an Apache id, grant appropriate commit privileges.
   Use the Whimsy tool to update the roster via [Comitee Roster](https://whimsy.apache.org/roster/committee/) or
   [PPMC Roster](https://whimsy.apache.org/roster/ppmc/)
1. If they have already filed an ICLA, request creation of the committer account.
   If they need to change anything in a previously filed ICLA, wait until the new ICLA is filed,
   then request the account.
   1. Wait until root says it is done (via an email to the private@ list, with a subject of the form: `[NOTICE] Account created: name (id)`
   1. PMC Chair updates LDAP group membership which enables svn, gitbox and other access.
      If the committer uses GitHub, let them know that they are responsible for linking 
      it to their ASF account.
   1. Add committer to the appropriate access groups for any services
      that your project uses, which are not tied to ASF LDAP.
1. Notify the committer of completion. (Use the [committer welcome
   template](/templates/committer-welcome.txt)
1. If committer is also to be a PMC member, the PMC Chair or other PMC
   members must [update the PMC roster](https://whimsy.apache.org/roster/committee/)
   See [new PMC member](https://www.apache.org/dev/pmc.html#newpmcmember) for more detail.
1. Announce the new committer. (Use the [new committer announcement
  template](/templates/committer-announce.txt).


<span id="NewCommitter-Guidelinesforassessingnewcandidatesforcommittership"></span>
## Guidelines for assessing new candidates for committership

Each project must decide what is the correct measure for inviting a new
committer to their project. There are, however, several things that we
encourage you to consider.

Any PMC member can (and should!) nominate project contributors for a
committer vote. Don't assume that the PMC chair, or some senior project
member, will do this. Watch the contributors, and nominate promising
participants.

Remember that we do all of our development in revision control.
Errors are reversible learning opportunities. Thus, inviting someone
"too early" has very little risk associated with it. On the other hand,
inviting someone too late has the very real risk that they'll get
frustrated and leave, and you'll have missed that opportunity forever.
Setting the bar too high has been the eventual death of many projects.

Think of adding committers as an investment in the future of your
project, rather than as a reward for good behavior. Committers whom you
add today will be the backbone of your project tomorrow, or five years
from now. New committers are the only way to ensure the long-term
sustainability of your project. Look for contributors who seem to have
new ways of thinking.

Think of a committer as someone who is committed to the project, rather
than just someone who writes code. Contributions in other areas, such as
design, end-user support, event management, documentation, or project
promotion, should also be welcomed into the project by inviting them as 
committers, and, eventually, as PMC members.

Finally, if you have specific requirements for committers (such as a
period of time, or number of contributions) we encourage you to document
that on your website. People like to know what their "career path" is in
a project, rather than feeling that it is merely at the whim of a
secret committee. If you see someone who seems to be on the path, point
them to this document, so that they know what to expect, and what they
can do to become a better contributor. See also [Becoming A
Committer](https://community.apache.org/contributors/becomingacommitter.html)
for general advice you might offer.

The following are some points to consider when assessing a candidate's qualifications for committership.

<span id="NewCommitter-Abilitytoworkco-operativelywithpeers."></span>
### Ability to work cooperatively with peers.
How do we evaluate?

  - By the interactions they have through email.
  - By how they respond to criticism.
  - By how they participate in the group decision-making process.

<span id="NewCommitter-Abilitytobeamentor."></span>
### Ability to be a mentor.
How do we evaluate?

  - By the interactions they have through email.
  - By how clear they are and how willing they are to identify or even create appropriate background
materials.

<span id="NewCommitter-Community"></span>
### Community
How do we evaluate?

  - By the interactions they have through email.
  - Do they help to answer questions raised on the mailing list; do they show a helpful
attitude and respect for other people's ideas?

<span id="NewCommitter-Committment"></span>
### Commitment
How do we evaluate?

  - By time already given to the project.
  - By how well they stick with the process through tough issues.
  - By how they help on not-so-fun tasks.

<span id="NewCommitter-Personalskill/ability"></span>
### Personal skill/ability
How do we evaluate?

  - A solid general understanding of the project.
  - Quality of discussion in email.
  - Whether their patches (where applicable) are easy to apply with only a cursory review.

<span id="NewCommitter-NewCommitterProcess"></span>
## New Committer Process

This section describes a typical Apache project's process for handling the
vote to add a new committer. Templates mentioned in the process appear
later in this document.

<span id="NewCommitter-Discussion"></span>
### Discussion

We do the discussion and vote on the `private@` mailing list to enable a frank
discussion. Any PMC member may propose a potential committer or PMC
member. This is **not** the sole responsibility or right of the PMC
chair.

You can use [the committer discussion template](/templates/committer-discuss.txt)
to start the discussion

We invite people to join as committers/PMC members, not GitHub ids. It is
fine to refer to the candidate's GitHub id for context, but the person should
be referred to by their name. It is not necessary to have their full legal
name (that will be kept private) but it is important to use their name, as
they refer to themselves in email. If a person is known only by their GitHub
id, it is ok to ask them for their real name prior to holding a VOTE.

We need to be sure that they are committed people with whom we can work.
They will be our peers. We will have already observed that they are
committed to the project and graceful toward users and other developers.

Don't wait too long before proposing and don't be too hasty. There is a
trade-off and something about timeliness. A point is reached where it
becomes obvious that we should invite them. This encourages them and keeps
them enthusiastic. If we leave it too long, then we risk them becoming
disillusioned.

On the `private@` list we can each say exactly what we feel about each person,
with no holds barred. Keep the discussion concise. The praise part can
be done later in public. Keep in mind, however, that if the member becomes
a PMC member later, they will have access to this discussion.

### Vote

If the proposed candidate seems to be received positively by a majority
of those responding, it's time to [start a vote](/templates/committer-vote.txt). 

In some projects, new committers are automatically also made PMC members.
If this is the case in your project, use the [committer + PMC member vote
template](/templates/committer-pmc-vote.txt) instead.

Start a separate [VOTE] thread for each new person. This makes it much easier
to review the email archives.

Let the Vote thread run for one week.

A positive result is achieved when there are at least 3 +1 votes and no vetoes,
as per the [ASF voting process
document](https://apache.org/foundation/voting).

### Announcing results

After a positive result, record the result on the PMC list with a `[RESULT][VOTE]` subject
using either the [committer vote results template](/templates/committer-results.txt), or the
or the [committer + PMC member vote results template](/templates/committer-pmc-results.txt) 
for a committer and PMC member.

Next, invite the candidate using the [committer invitation template](/templates/committer-invite.txt) 
for a new committer.

We give candidates a chance to decline committership 
in private. They can post a reply to the PMC mailing list.

Do not proceed until you have received explicit confirmation from the Infrastructure team that the committer account has been created.

After we reach a decision on the `private@` list, and after the steps above, we
[announce the new committer on the `dev` list](template/committer-announce.txt)

Alternately, use the [committer + PMC member announce template](/templates/committer-pmc-announce.txt) for new
committer + PMC member.

You can use the [new committer welcome template](/templates/committer-welcome.txt) to welcome
the new committer to your project community. You are, however,
encouraged to create your own version of this template, customized to
your particular project community.

Other notes about the process are available on the main 
[Apache site](https://www.apache.org/dev/pmc.html#newcommitter).

### Committer Account Creation
Please see the [account creation instructions](https://www.apache.org/dev/pmc.html#newcommitter).

In summary:

If the ICLA identifies the project and a valid Apache ID, and the
`[RESULT][VOTE]` message has been posted to the PMC private list,
the account creation request is made by the
secretary or assistant secretary who files the ICLA.

Otherwise, the new account request should be made by the
PMC Chair (or any [ASF Member](https://www.apache.org/foundation/glossary.html#Member)
if the chair is unavailable).

The PMC chair needs to use the [ASF New Account Request](https://id.apache.org/acreq/pmc-chairs/) form to
send a new account request. Members may use [ASF New Account Request](https://id.apache.org/acreq/members/) page.

Please supply the [mail archives](https://lists.apache.org/) URL as
proof of the vote results.

<span id="NewCommitter-EmailTemplates"></span>
## Email Templates

The following templates are recommended ways to phrase your email
communications around inviting a new committer, to ensure that everyone
understands your intent.

* [Committer discussion template](/templates/committer-discuss.txt)
* [Committer vote template](/templates/committer-vote.txt)
* [Committer + PMC vote template](/templates/committer-pmc-vote.txt)
* [Committer vote results template](/templates/committer-results.txt)
* [Committer + PMC vote results template](/templates/committer-pmc-results.txt)
* [Committer invite template](/templates/committer-invite.txt)
* [New committer announcement](/templates/committer-announce.txt)
* [New committer and PMC member announcement](/templates/committer-pmc-announce.txt)
* [Welcome the new committer to your community](/templates/committer-welcome.txt)

