Skip to content
This repository has been archived by the owner on Feb 8, 2023. It is now read-only.

proposal: promote Lead Maintainer Protocol to be Org wide -> Repo Lead Maintainer Protocol #822

Merged
merged 4 commits into from
May 1, 2019
Merged
Changes from all commits
Commits
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
63 changes: 42 additions & 21 deletions LEAD_MAINTAINER_PROTOCOL.md
Original file line number Diff line number Diff line change
@@ -1,51 +1,72 @@
## Tech Leads and Lead Maintainers
## Repo Lead Maintainer Protocol

> This section is a formalization of the proposal and discussion around the [Module Lead Maintainers - Sharing the Responsibility over the IPFS module base](https://github.com/ipfs/pm/issues/600) proposal.
> This section is a formalization of the proposal and discussion around the [Module Lead Maintainers - Sharing the Responsibility over the IPFS module base](https://github.com/ipfs/pm/issues/600) proposal, originally desined for the JS Ecosystem within the IPFS Project.

**Currently, this Protocol is only being executed by the JS ecosystem of the IPFS Project.**
## Motivation

We have two types of leads in the JavaScript project ecosystems, the Tech Lead and the Module Lead Maintainer. A brief description of both roles is:
Copy link

Choose a reason for hiding this comment

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

It seems like you are removing the overall "Tech Lead" role and only having Lead Maintainers per-project or per-working-group. Is this also part of the intent of this change? Is the Tech-Lead role previously filled by you and @whyrusleeping going to be deprecated in lieu of Working Group Captains?

Copy link
Member Author

Choose a reason for hiding this comment

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

Thank you for asking this question! I can understand why this PR would give that idea, however, it's intent is far from changing the definition of Tech Lead and who wears that hat. I believe that will have to be another discussion.

What this PR proposes is that we make the Maintainer role something to be Org wide so that every project benefits from having a DRI and good Repo grooming practices.

Copy link
Contributor

Choose a reason for hiding this comment

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

I still find all the different titles confusing - is this the appropriate breakdown:

  • Project creator (@jbenet) - owns and communicates the vision, has the final say on escalations, the buck stops here
  • IPFS Project Captain (@daviddias) - steers the org, master architect/strategist, can settle disagreements between individual WG Leads/Captains
  • Working Group Tech Lead (Captain?) - steers the working group effort, manages vision and execution for many repos. Can resolve disputes / guide direction for individual module maintainers.
  • Module Lead Maintainer - main shepherd for a particular module including pruning, improvement, and incorporating contributions

aka - the "lead maintainer" title is focused specifically at the repo level, though tech leads / captains are effectively doing the same role for a broader project?

Copy link
Member Author

Choose a reason for hiding this comment

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

aka - the "lead maintainer" title is focused specifically at the repo level, though tech leads / captains are effectively doing the same role for a broader project?

That is correct. This question eventually takes us to what is the Governance of the protocol/project. However, I was hoping we can have that discussion separately as I believe it will require its own pace of review.

Meanwhile, I hope to provide more clarity with my last commit -- 5337910 -- in which I added to the title of the protocol "Repo", so that it is more clear that this is a "Repo Lead Maintainer" protocol and not a "Project Maintainer/Leader/Sheppard" protocol.

Sidenote: The reason why to used the word Repo and not Module is just to accommodate that we have repos that are not code and in some languages, a software unit is called a package and not a module. To accommodate everyone, we can use the word Repo which is common to all.

We develop the IPFS Project as an Asynchronous and Distributed Organization. In order to operate at a global scale, written documentation, curation and improving its discoverability needs be at the core of our competencies. Having clear and lean docs that are well maintained can avoid a misdirection or misinformation, saving hours in productivity and making our contributors happier.

- A Tech Lead directs the development of an entire ecosystem of modules (i.e js-ipfs, js-libp2p, js-ipld and js-multiformats), it has a complete understanding of the stack, the IPFS project, its goals and participates actively in the ROADMAP planning.
- A Lead Maintainer is a contributor that has shown extraordinary ability to contribute to the project and willingness to make the project better by taking the responsibility of stewarding one of its modules forward.
To plant the idea of how important this written communication is, here is a thought example: Imagine that you spend 30 minutes refactoring a README of a repo, fixing broken links, making sure that the information is accurate and so on and in the end, what you achieve is that the next person will be able to save 1 minute of their time searching for the info they need. You might think "whoa, I just spend 30 minutes for an individual to save 1? Maybe this was not worth it at all". This thinking is incorrect, because within a project of 3500+ contributors, you are saving time for thousands. Some of those people might not have ever found the information if not for your work (or may have left the repo confused), which magnifies your contribution even more.

In addition to this, having a clear Repo Lead Maintainer Protocol for Software Projects yields other values results, such as reduced release time, code reviews and faster response to issues.

## Description

A Repo Lead Maintainer is a contributor that has shown extraordinary ability to contribute to the project and willingness to make the project better by taking the responsibility of stewarding one of the repos forward. This repo can be code, documentation, specifications, research discussion, etc.

With this structure, we expect to achieve the following goals:

- Recognize extraordinary contributions and empower contributors to take an even more important role in the project.
- Keep issues and information organized.
- Reduce PR review time and Time To Release.
- Increase the overall quality of the project.
- Help users know who to reach out to for help.
- Have a clear protocol to pass on the baton.

The current Tech Leads are:
The current Lead Maintainers should be identified in a `Repo Lead Maintainer` section in the README.md of the repo and a maintainer.json file at the root of the repo with the following format:

- [David Dias](https://github.com/daviddias/) for js-ipfs, js-libp2p js-multiformats ecosystems.
- [Volker Mische](https://github.com/vmx) for the js-ipld ecosystem.
```JavaScript
{
"repoLeadMaintainer": {
"name": "<Repo Lead Maintainer Name>",
"email": "<Repo Lead Maintainer Email Address>",
"username": "<Github Username>"
},
"workingGroup": {
"name": "<Name of the Working Group that owns this Repo>",
"entryPoint": "<Url to the coordination entry point for the Working Group>"
}
}
```
Copy link
Member

Choose a reason for hiding this comment

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

If a JSON then this should be like this for validity and easy copy/paste:

{
  "repoLeadMaintainer": {
    "name": "<Repo Lead Maintainer Name>",
    "email": "<Repo Lead Maintainer Email Address>",
    "username": "<Github Username>"
  },
  "workingGroup": {
    "name": "<Name of the Working Group that owns this Repo>",
    "entryPoint": "<Url to the coordination entry point for the Working Group>"
  }
}


The current Lead Maintainers can be identified either by the `leadMaintainer` field in the package.json of the module and/or the section `Lead Maintainer` in the README.md of the module.

**Lead Maintainer responsibilities:**
**Repo Lead Maintainer responsibilities:**

- Respect and follow the [IPFS Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).
- Have a complete understanding of the module purpose, its specification (if any) and how the module is used by other parts of the project.
- Review and merge PRs.
- Respond in a timely manner to Github issues and curate them to ensure that duplicates are coalesced, issues are labeled with difficulty and priority, and also tag any issue that is open for new contributors with the `help wanted` label.
- Publish new versions of the module to npm.
- Release new versions of the module/package (if a code Repo).

**Lead Maintainer expected attitude:**
**Repo Lead Maintainer expected attitude:**

- Be proactive in increasing the quality of the module. This goes from improving documentation, tests, codebase and more.
- Show a great level of rigor and polish in the code that they ship.
- Help others in understanding how the module works and why it exists.
- Help others in understanding how the module works (or repo) and why it exists.
- Apply the established Contributing Guidelines to the project and help others do too

**How to become a Lead Maintainer:**
**How to become a Repo Lead Maintainer:**

Currently, there is no formal test or request form to do so. Lead Maintainers will be invited and nominated by the Tech Lead once the expected behaviour and rigor is observed. A Lead Maintainer can nominate the next Lead Maintainer to the Tech Lead
Currently, there is no formal test or request form to do so. Repo Lead Maintainers will be invited and nominated by one of the IPFS Tech Leads and/or Working Group Captains once the expected behaviour and rigor is observed. A Repo Lead Maintainer can nominate the next Repo Lead Maintainer to the IPFS Tech Lead and/or Working Group Captain.

**In practice:**

- Update each package.json and README.md to have a `leadMaintainer` field.
- Update packages table on each entry module (e.g https://github.com/ipfs/js-ipfs#packages) to also list the maintainer for each.
- Protect the master branch and only grant permissions for merge to the Maintainer and the Tech Lead, only.
- Grant publish permission to the Maintainer and Tech Lead (or another Tech Lead if it’s the same person), only.
- Create a maintainer.json and update the README.md to have a `Repo Lead Maintainer` section.
- Protect the master branch and only grant permissions for merge to the Lead Maintainer and respective Working Group members.
- If a software project, grant publish permission to the Lead Maintainer and Tech Lead (or another Tech Lead if it’s the same person), only.
Copy link
Member

Choose a reason for hiding this comment

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

If in a position of great responsibility, 2FA should be enabled where applicable?

Copy link
Member Author

Choose a reason for hiding this comment

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

We currently demand 2FA for everyone that has write access. It was a big thing, see ipfs/community#263

Copy link
Member

Choose a reason for hiding this comment

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

👍 I was thinking for npm (etc.) also

Copy link
Member Author

Choose a reason for hiding this comment

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

Ah, good point!

- Ensure that the repo also has the Working Group respective badge on the README for easy one click jump to entrypoint.

## Repo Lead Maintainers for IPFS Repos

```
TODO - Create table using package-table
```