Skip to content
This repository has been archived by the owner on Nov 1, 2022. It is now read-only.

Reconciling Project Lifecyce with io.js WGs and future projects #33

Merged
merged 10 commits into from
Apr 15, 2015
130 changes: 70 additions & 60 deletions governance-proposal/TSC-Project-Lifecycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,77 +2,87 @@

# Node.js Foundation Project Lifecycle

Node.js Foundation’s technical Projects shall follow a lifecycle described in this Project Lifecycle document.
## Project Definition

The TSC shall create, align and coordinate Projects that are ideally developed together, including possibly, the creation of sub-Projects. The TSC shall have the power to reorganize Projects and sub-Projects after sufficient review and discussion with the Projects and community involved.
The Node.js Foundation hosts several "Top Level Projects." These projects are autonomous from each other and governed by their own TSC (Technical Steering Committee) and chartered by the Node.js Foundation's Board of Directors.

The TSC shall encourage new Projects and innovation in the technical community. New Projects enter the Node.js technical community through a Proposal to the TSC and if approved, are granted Incubation-state status.
Projects are free to create "Working Groups" which are autonomus groups collaborating to fulfill a set of responsibilities. Working Groups are eventually chartered by the TSC.

Projects shall change state following TSC reviews. Projects typically change states independently from each other, but can cooperate closely and leverage each other’s results. Projects graduate from Proposal-state, through Incubation-state and Mature-state to Core-state. Archived–state is a Project state reserved for those Projects no longer being actively developed or used by the community.
```
Board
|
|-- Project A (Chartered By Board)
| |
| |-- TSC
| |-- Working Group (Chartered By Project TSC)
|
|-- Project B (Chartered By Board)
|
|-- TSC
|-- Working Group (Chartered By Project TSC)
```

The TSC shall have the authority to grandfather proposed Projects with a significant history and record to meet the project state descriptions below into a higher order state during the first 12 months after the first TSC meeting.
## Lifecycle

| Project state | Description |
The Foundation shall encourage new Projects and innovation in the community. New Projects enter the Node.js Foundation through a Proposal. The proposal should include their TSC Charter and Development Policy.

Project should have some prior history and be considered mature and contain a wide contributorship before submitting a proposal to enter the foundation.

## Project Life-Cycle

| State | Description |
| ------------- | ----------- |
| Proposal | Project does not formally exist yet, may not have real resources (yet), but is being worked on by the community to submit a formal proposal to the TSC. |
| Incubation | Project has been approved by the TSC, has resources, but is recognized to be nascent. |
| Mature | Project is fully functioning and stable, has achieved successful releases, has a Project Lead, but is not a required component of the platform.|
| Core | Project is a required component of the Node.js platform.|
| Archived | Project has been recognized as no longer being actively used or developed. This could be for a variety of reasons, e.g. project successfully accomplished its goals but is no longer used, project failed, etc., and has been archived as it's no longer a going concern.|

| `null` | Prior to being considered for the foundation the project should mature elsewhere and achieve a wide contributorship. |
| Accepted | Project is accepted into the foundation. It is entitled to the resources contained in its proposal and can form Working Groups. |

### Project state transitions

| From State | To State | Review |
| ---------- | -------- | ------ |
| `null` | Proposal | n/a |
| Proposal | Incubation | Creation Review |
| Incubation | Mature | Graduation Review |
| Proposal | Mature | Proposal Review |
| Mature | Core | Core Review |
| Proposal, Incubation, Mature, Core | Archived | Archive Review |
| Proposal, Bootstrap, Mature, Core | Archived | Archive Review |

## Working Group Life-Cycle

Before a WG is chartered it must first incubate in some manner.

If a WG needs to start *in* the project members are free to create a repository and begin regular meetings using the free tools available to all project members. During this period the WG is unchartered and in the "Bootstrap" cycle and is not entitled to any financial or legal resources of the foundation and can be closed at any time by the TSC. Once the WG matures it should write a proposal for the TSC to approval so the WG can move to the "Mature" phase once approved.

It is also common for Working Groups to incubate and mature outside the project. These Working Groups do not need to incubate within the project itself and instead should write a proposal for the TSC to approve and move directly to the "Mature" phase.

Working Groups shall change state following TSC reviews. WGs typically change states independently from each other, but can cooperate closely and leverage each other’s results. Projects graduate from Proposal-state, to Mature-state and finally to Core-state. Archived–state is a Project state reserved for those Projects no longer being actively developed or used by the community.

| State | Description |
| ------------- | ----------- |
| Incubation | WG has not been approved and is unchartered. Project does not formally exist yet, may not have real resources (yet), but is being worked on by the community. |
| Proposal | WG proposal is posted and under review. |
| Mature | WG is fully functioning but is not a required component of the platform.|
| Core | WG is a required component of the Node.js platform.|
| Archived | WG has been recognized as no longer being actively used or developed. This could be for a variety of reasons, e.g. WG successfully accomplished its goals but is no longer used, project failed, etc., and has been archived as it's no longer a going concern.|

### WG state transitions

| From State | To State | Review |
| ---------- | -------- | ------ |
| Proposal | Mature | Proposal Review |
| Mature | Core | Core Review |
| Proposal, Bootstrap, Mature, Core | Archived | Archive Review |

## Reviews

### Creation Review
* Proposal posted for two weeks, evaluated on metrics of:
* Name is okay (e.g. no use of a trademark)
* Project contact name and email
* Description is complete
* Scope and project plan is well defined
* Resources are committed
* Initial Committers named
* Contributors have been identified
* Meets Foundation’s policies (e.g. IP Policy)
* Proposal has been socialized with potentially interested or affected existing Projects
* Proposal email has been sent to the TSC mailing list
* Review by TSC: Confirm that the proposal is complete and the above listed requirements have been sufficiently met.

### Graduation Review
* Graduation proposal posted for two weeks:
* The Project demonstrates stable output (code base, documents, tests)
* Active community working on the Project
* History of successful, consistent releases in accordance with the release process
* TSC review
* Working and stable code base exists
* Active community exists
* Project has demonstrated a history of releases following the release process and cadence
* Confirmed acceptance and successful integration of contributions/code to partner/upstream projects. 
* Testing/integration environment defined and mature, tests and integration run successfully
* Detailed documentation available documenting the code
### Core Review
* Core-state proposal posted for two weeks
* Project is shown to be viable, necessary or broadly useful module, subsystem or component of Node.js
* Project build and test scripts have been created to work with the rest of Platform build
* Project shown to not break continuous development and integration environment 
* TSC review metrics
* Core review assesses projects based on the metrics of the graduation review and the necessity of the project relative to the codebase and user requirements.
* In addition the project is required to have confirmed longevity (e.g. the project has been active for at least one year, participates in release activities, and has release plans outlined to stay active for at least another year). 

### Termination Review
* Termination proposal posted for two weeks
* States reason for project termination being sought
* Termination proposal to include acceptable triggers for termination
* (e.g. protracted idleness, or request by the project)
* Estimates impact on other projects and how to mitigate
* Impact and possible breakage to APIs or builds
* Location identified and links created for archived project
* If Archival is not approved, the Project remains in its pre-reviewed state
### Project Proposal Review

TODO

### Working Group Proposal Review

TODO

### WG Core Review

TODO

### WG Termination Review

TODO
50 changes: 50 additions & 0 deletions governance-proposal/WG-Merger.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
This document describes the existing io.js and node.js working groups and resources, how they would merge, and at which point in the Project Lifecycle they would be.

| Group | io.js | node.js | Lifecycle |
| ----- | ----- | ------- | --------- |
| Build | [build](https://github.com/iojs/build) | ? | Core |
| Docker | [docker](https://github.com/iojs/build) | [docker-node](https://github.com/joyent/docker-node) | Mature |
| Website | [website](https://github.com/iojs/website) | [node-website](https://github.com/joyent/node-website) | Mature |
| Evangelism | [evangelism](https://github.com/iojs/evangelism) | none | Mature |
| Hardware | [hardware](https://github.com/iojs/hardware) | none | Incubation |
| Streams | [streams](https://github.com/iojs/readable-streams) | none | Core |
| Tracing | [tracing](https://github.com/iojs/tracing) | none | Core |

Additionally, there are the io.js international communities. I've used the data @kosamari has been keeping to identify activity and assign a lifecycle.

| Name | Language | Lifecycle |
| ---- | -------- | --------- |
| [iojs-ar](https://github.com/iojs/iojs-ar) | Arabic | Incubation |
| [iojs-bg](https://github.com/iojs/iojs-bg) | Bulgarian | Incubation |
| [iobs-bn](https://github.com/iojs/iojs-bn) | Bengali | Incubation |
| [iojs-cn](https://github.com/iojs/iojs-cn) | Chinese | Mature |
| [iojs-cs](https://github.com/iojs/iojs-cs) | Czech | Incubation |
| [iojs-da](https://github.com/iojs/iojs-da) | Danish | Mature |
| [iojs-de](https://github.com/iojs/iojs-de) | German | Mature |
| [iojs-el](https://github.com/iojs/iojs-el) | Greek | Mature |
| [iojs-es](https://github.com/iojs/iojs-es) | Spanish | Mature |
| [iojs-fa](https://github.com/iojs/iojs-fa) | Persian | Incubation |
| [iojs-fi](https://github.com/iojs/iojs-fi) | Finnish | Mature |
| [iojs-fr](https://github.com/iojs/iojs-fr) | French | Mature |
| [iojs-he](https://github.com/iojs/iojs-he) | Hebrew | Mature |
| [iojs-hi](https://github.com/iojs/iojs-hi) | Hindi | Incubation |
| [iojs-hu](https://github.com/iojs/iojs-hu) | Hungarian | Incubation |
| [iojs-id](https://github.com/iojs/iojs-id) | Indonesian | Mature |
| [iojs-it](https://github.com/iojs/iojs-it) | Italian | Mature |
| [iojs-ja](https://github.com/iojs/iojs-ja) | Japanese | Mature |
| [iojs-ka](https://github.com/iojs/iojs-ka) | Georgian | Incubation |
| [iojs-ko](https://github.com/iojs/iojs-ko) | Korean | Mature |
| [ioja-mk](https://github.com/iojs/iojs-mk) | Macedonian | Incubation |
| [iojs-ms](https://github.com/iojs/iojs-ms) | Malay | Incubation |
| [iojs-nl](https://github.com/iojs/iojs-nl) | Dutch | Mature |
| [iohs-no](https://github.com/iojs/iojs-no) | Norwegian | Mature |
| [iohs-pl](https://github.com/iojs/iojs-pl) | Polish | Incubation |
| [iojs-pt](https://github.com/iojs/iojs-pt) | Portuguese | Mature |
| [iojs-ru](https://github.com/iojs/iojs-ru) | Russian | Mature |
| [iojs-ro](https://github.com/iojs/iojs-ro) | Romanian | Incubation |
| [iojs-sv](https://github.com/iojs/iojs-sv) | Swedish | Incubation |
| [iojs-ta](https://github.com/iojs/iojs-ta) | Tanuk | Incubation |
| [iojs-tr](https://github.com/iojs/iojs-tr) | Turkish | Mature |
| [iojs-tw](https://github.com/iojs/iojs-tw) | Taiwanese | Mature |
| [iojs-uk](https://github.com/iojs/iojs-uk) | Ukrainian | Mature |
| [iojs-vi](https://github.com/iojs/iojs-vi) | Vietnamese | Mature |