Skip to content

Potential flaw in the governance model of Node.js #1680

Open
@anonrig

Description

@anonrig

I believe that the current governance model, defined in TSC charter https://github.com/nodejs/TSC/blob/HEAD/TSC-Charter.md#section-7-voting, is some-what flawed and in favor of blocking people by burying them with bureaucracy, and time.

When a pull-request is blocked, current governance model is extremely time-consuming if the contributor decides to pursue to land their pull-request. In most cases, in order to avoid or spend a lot of time on this matter, people tend to stop pursuing it.

Good scenario

In a good scenario, the flow of landing a pull-request is as follows:

  1. Contributor A opens a PR
  2. Contributor B and C approves the PR
  3. After 48 hours, the PR lands

or

  1. Contributor A opens a PR
  2. Contributor B leaves a request changes review and blocks a PR
  3. Collaborator A and Collaborator B try to reach consensus without involving the TSC
  4. After 48 hours and removal of the block, the PR lands

Bad scenario

But in a bad scenario where a consensus is needed, here is the flow:

  1. Contributor A opens a PR
  2. Contributor B leaves a request changes review and blocks a PR
  3. Contributor A adds tsc-agenda label
  4. TSC meeting discusses the changes
  5. Time
    - In worst case, the next TSC meeting is in 7 days, best case it is in 3 days
  6. Meeting
    - In best case, it takes 1 meeting to resolve the issue, in worst case X meetings. The best case also involves making a decision of having a TSC vote, whereas an issue can be in X amount of meetings without any hint of ending the discussion.
  7. In the case of: TSC meeting ending with a voting required decision:
  8. It takes 1-2 weeks on average to get a result out of a voting session.
  9. A TSC member removes the block
  10. Most probably a rebase is needed and a new CI run in order to land.

In this bad scenario, unless Contributor B responds in a timely manner, their block will always be effective unless a discussion is done within TSC. This ensures that the TSC meetings are 100 percent efficient. But in reality, a holiday season can stall a pull-request from landing as large as 2 months.


Think of this:

On a random pull-request, you need to find 2 people to "like"/approve your pull-request for it to land. But if the pull-request is blocked, you need to convince half of the people in TSC (give or take 10 people) to land a pull-request that just got blocked. I think this can be used to drive a people out of the project, or force people to silently quit.


If you look into a "bad scenario" where a pull-request is blocked, it takes 1 minute to reject a pull-request with any sort of clear reason (the validity and the discussion about it is outside of the scope of this issue), whereas it takes almost a month of publicity, meetings and discussions to land a particular pull-request.

I think this is flawed and the process is in favor of people blocking pull-requests rather than contributing/landing a particular change.


I don't have a concrete recommendation other than stating the problem, but

  • We might increase the blocked reviewer limit to 2, rather than 1. Ex: It takes 2 "request-changes" to block a pull-request in 48 hours.
  • We can set a limit to the meeting count of a topic being discussed, and later force ourselves to take a vote. (This is still in favor of people blocking PRs but it will make the pain less and less...)
  • Please fill this...

cc @nodejs/tsc

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions