Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve contributor experience by labeling complexity, ambiguity, and consensus of an issue #11788

Closed
weihanglo opened this issue Mar 2, 2023 · 21 comments
Labels

Comments

@weihanglo
Copy link
Member

weihanglo commented Mar 2, 2023

This is based on feedback from @jonhoo during team brainstorming on Zulip. Made it an issue for visibility.

The problem

The existing labels used to call for participations do not adequately describe the complexity of involved in the progress of staring from an issue to a pull request and merging it. Contributors and maintainers often suffer from this. For instance,

#11786 and #11775 are cases I failed to tell them the consensus and complexity beforehand.

#9599 is a case that the level of design and implementation complexity were embedded in comments.

#11666 is an example that implementation might be relatively easy but need to reach a consensus first.

#11432 is an example that the contributors saw the triage and thought “hmm… does that mean feature get accepted?”

This old #2526 may need an RFC, but is probably more dying for a driver taking care of it for a long while.

Every contributor has different expectations when helping the project. Not everyone can be satisfied by completing E-easy tasks. Also, not everyone loves discussing a design back-and-forth with the risk of proposal rejection. It could save both maintainers and contributors' time if we have had a better labeling system around contributor participation.

What we have today

I said the contributor experience of each issue cannot be precisely described by existing labels. However you're not sold. Let's see what we have today.

We have three levels of participation experience. It's not easy to tell if it indicates the discussion is easy or the coding part is hard.

Two labels calling out for design works. We don't know how difficult to disambiguate the requirements into a proper design.

In terms of consensus, we have:

Apart from I-nominated. All other labels seems more like “there is a consensus” instead of “what is the level of consensus here?” or “how risky is my work to get rejected?”.

Factors affecting contributor experience

Jon's original text summarizes these aspects down to three factors: complexity, ambiguity, and consensus. I copied the original words from him verbatim. Click to expand for details.

Complexity: how hard is this issue to fix/feature to implement in terms of just code adjustments.

This focuses solely on the “mechanistic” aspects of the change: how many places need to be changed, how involved are those changes, how many knock-on changes do we expect, etc. A complexity-low issue would only require changing one or two files (ideally just one or two functions) in fairly straightforward ways, or if there are more widespread knock-on changes they are entirely deterministic and could (ideally) be performed by search-replace. A complexity-high issue on the other hand is likely to require involved changes across multiple points in the code-base, and those changes are in turn likely to require non-trivial changes to other parts of the code that interface with the first set.

Ambiguity: how much design work is necessary to land the necessary change.

This is all about the degree to which the bug/feature is un-/under-specified and requires active decision-making — to what extent will a prospective contributor have to sit down and think/consider how to best fix this issue/implement this feature. An ambiguity-low issue should require very few decisions, if any, to be made. A contributor should be able to go make “the changes”, and it should be relatively well-understood (or obvious) what “the changes” are. An ambiguity-high issue on the other hand will require a signifiant exploration of the problem domain and several decisions will have to be made as part of the implementation. Those decisions need to be documented, and a rationale given, in case a subset of them need to be discussed or changed. A a contributor to such an issue is also going to have to think about implications beyond just the change they're making, such as how it interacts with other project features, backwards-compatibility, etc. Very high ambiguity issues are likely to require an RFC.

Consensus: how comfortable are the core project maintainers with the proposed path forward.

This is essentially scoring “how likely is it that this will land without too much discussion after I've done the work”. Alternatively, it can be thought of as how controversial the change is. Unlike the other two, -high here implies “easier” and -low implies “harder”. It is also generally going to be inversely proportional to the ambiguity score, but not always. A consensus-high issue is one where little discussion is likely to have to happen once a PR is made. It'll still have to go through review and such, but it's unlikely that the fundamental approach is going to be questioned or endlessly debated. A consensus-low issue on the other hand is likely to require extensive debate before landing, and has a real danger of not landing even with a perfect implementation because of considerations beyond the quality of the feature or bugfix itself. PRs for consensus-low issues will almost certainly require an FCP.

Labels indicating these factors

The proposal above proposes 9 labels for these factors:

  • Complexity-high
  • Complexity-medium
  • Complexity-low
  • Ambiguity-high
  • Ambiguity-medium
  • Ambiguity-low
  • Consensus-high
  • Consensus-medium
  • Consensus-low

It is not clear how these labels fit in the existing label system in the wider Rust community. We could probably make E-easy means Complexity-easy. We could also make Ambiguity-* become E-ambiguity-*, so that contributors can figure out “Oh! I expected to experience more discussions if working on that.” Consensus-* may indicate that maintainers would have to get a conclusion, so they may fit in I-consensus-* category.

But perhaps they should all fit in E-* so people know they are all about contributor experience.

When will it start

I do think this kind of granular labels are invaluable. It is also a two-way door decision — it can always easily be reverted. The only stuff I am not comfortable is naming and how to fit in the current system (and also choosing label colors). So, if any of the team member give me a green light. I may just try one approach and see how far it goes.

Additional information

We could also add a E-needs-driver to indicate that we need a mid- to long-term driver for a feature/issue, though this is slightly tangent to the issue.

@epage
Copy link
Contributor

epage commented Mar 2, 2023

Thanks for writing this all up!

I feel like the more complex we make the process, the harder it will be for everyone. I'm especially unsure how we'll keep up with rating consensus.

Maybe another way to look at it is that there are stages for an Issue and gates along the way

  • Problem definition
    • Initiated by the Issue author but sometimes some back and forth is needed to fully tease it out.
    • Gate: do we agree this is a problem and worth addressing?
    • Bar: low
  • Solution design
    • Initiated by anyone
    • Level of process from a discussion to a change proposal to an RFC
    • Gate: do we agree this is not just how we should solve this problem but is overall worth it for cargo
    • Bar: high
  • Implementation / PR
    • Initiated by contributor
    • Gate: Tests and reviewer sign off
    • Bar:
      • Low for unstable or internal-only changes
      • Medium for user-visible but malleable changes (e.g. UX)
        • Might require a straw poll
      • High for stablization where compatibility is required
        • Requires an FCP

How do we make it clear what stage we are looking for help in, how difficult that stage is, and what is needed for success?

@weihanglo weihanglo changed the title Improve contribution experience by labeling complexity, ambiguity, and consensus of an issue Improve contributor experience by labeling complexity, ambiguity, and consensus of an issue Mar 2, 2023
@weihanglo
Copy link
Member Author

I feel like the more complex we make the process, the harder it will be for everyone. I'm especially unsure how we'll keep up with rating consensus.

The original idea of this proposal is “maintainers add labels and contributors evaluate the risk and time if working on it”. The criteria of adding those labels need not be strictly consistent among maintainers. They are just “hints” for potential contributors. I agree the mechanism makes it harder for maintainers to triage issues, but it also eases the pain afterward if someone picks up and works on it.

I love the idea of looking them from the angle of “stages”! That makes things clear to know at which stage an issue is currently blocked, as well as how to move forwards. For PR I don't think we need to highlight the bar there, as it is obvious a well-known blocker when submitting PR on an open source project. Maintainers also reserve the right to reject any PR even the purpose and design are great.

So, maybe we can focus on easing pains caused by implicit blockers in problem definition and design stages?

@epage
Copy link
Contributor

epage commented Mar 3, 2023

The original idea of this proposal is “maintainers add labels and contributors evaluate the risk and time if working on it”. The criteria of adding those labels need not be strictly consistent among maintainers. They are just “hints” for potential contributors.

I was speaking from a contributor angle. They would need a single label as an entry point (and discover it), plus 3 effort labels, plus at least 1 category and 1 area label. This means there would be 6+ labels on any given issue which turns it into a soup. You could drop the entry point label but now a user has to discover and decipher 1 of 9 labels as their entry point for possible issues and then walk through the other ones until. they find an issue of interest.

@weihanglo
Copy link
Member Author

weihanglo commented Mar 3, 2023

That's fair! I didn't think too much from that angle. It does sound horrible to have 6+ labels.

I looked into top 10 most popular project by contributor counts1 on GitHub last year. Each of them has a decent label system but none of them gets such an label for different factors. Although that doesn't mean the proposal is wrong, maybe we should start small and quick.

I notice that many of them have needs-* labels. Perhaps we can have a workflow for bugs like this

  1. User reported a bug: C-bug
  2. Maintainer requested for more info: C-bug, E-needs-mcve
  3. User gave mcve; Maintainer started a discussion: C-bug, I-nominated
  4. Maintainer still discussed but started seeking design works: C-bug, E-needs-design, I-nominated
  5. Maintainer finished the discussion: C-bug, E-needs-design
  6. Contributor did a design; Maintainer evaluated: C-bug, E-medium, Accepted
  7. PR sent

For feature requests:

  1. User requested a feature: C-feature-request
  2. Maintainer requested info: C-feature-request, E-needs-info
  3. User gave info; Maintainer started a discussion: C-feature-request, I-nominated
  4. Maintainer requested more info: C-feature-request, E-needs-info
  5. Maintainer accepted it and started seeking design works: C-feature-request, E-needs-design, Accepted
  6. Contributor did a design; Maintainer evaluated: C-feature-request, E-medium, Accepted
  7. PR sent.

I don't know if it makes sense but at least we states stage” here. It cannot reflect how big the design work could be, though. I put E-needs-info and E-needs-mcve under E-* family because they are all about contributor experience (thought the original experience probably means expertise level) and are where contributors can help. Whereas Feature accepted becomes Accetped to make it more general. I am not sure about whether we should use I-nominated to indicate “in discussion”. Does this look better?

Footnotes

  1. From https://octoverse.github.com/2022/state-of-open-source, I looked into

@epage
Copy link
Contributor

epage commented Mar 3, 2023

Thanks for expanding on this!

Some quick thoughts

  • If we expect users to be understanding E-needs-mcve, we need to drop the acronym. I understood from context of your post but had to go look it up to verify the exact meaning and already forgot it again. Acrornyms can work for internal-facing aspects of the project but we should be clearer what we mean as these people might not be "in the know"
    • I do like the idea of soliciting help in triaging like this!
    • Should needs-mcve and needs-info be merged?
  • Should E-<effort> imply Accepted?
  • Should Issues start with a S-triage to help track what hasn't been triaged yet?
  • I-nominated is another "in the know" label. Nominated for what?
  • I feel like Accepted having different meanings between Bugs and Features would be confusing

@weihanglo
Copy link
Member Author

we need to drop the acronym; Should needs-mcve and needs-info be merged?

I don't like mcve either; there is a slight difference between mcve and info. Usually a bug needs a reproducible example but a feature request may not. I agree on merging them to reduce the cognitive overhead.

Should E-<effort> imply Accepted?

Yes, we could do that. I was thinking about the same thing. However, I want to put E-needs-* under E-*, so we can say everything with E-* should have relatively good contributor experience — they're clear in terms of the pipeline from an issue to a pull request.

Should Issues start with a S-triage to help track what hasn't been triaged yet?

IIRC Eric follows a pattern that issues without labels mean untriaged. I am slightly on the same way. If we aim to let contributors know, S-triage is a good approach. Then an interesting thing comes in: how to deal with issues we already triaged but in a very low priority and probably won't touch them in a year? Do they deserve E-* something? Should we give P-low to them? Or just leave them there without any action item indicating their next steps, making them just die in the water (sorry I am a bit rude but we really don't have enough capacity to take care of them).

I-nominated is another "in the know" label. Nominated for what?

Completely agree on this. I-nominated-to-discuss, I-to-discuss-in-meeting or just I-to-discuss are way better.

I feel like Accepted having different meanings between Bugs and Features would be confusing

In my mind it means design-accepted so it a green light that a PR based on that design is highly likely to get merged. I don't know if it makes much sense for bugs.

@epage
Copy link
Contributor

epage commented Mar 7, 2023

Something that came up in the cargo meeting is distinguishing between

  • "accepted for impl" its a problem but not one for random contributors to jump in on. Only for someone really ambitious / desperate. These would be under S-
  • "mentor-ready" where a team member is ready to discuss / review. These would be under E-

@ehuss
Copy link
Contributor

ehuss commented Apr 17, 2023

I'd like to propose the following which is a bit of a mixture of what is suggested above and my own experience with dealing with issues.

My primary goal is to have a clear status for an issue, and how it can move further along.

Current landscape of labels

Just to recap what is used today:

Status

  • https://github.com/rust-lang/cargo/labels/S-blocked — Status: marked as blocked ❌ on something else such as an RFC or other implementation work.
  • S-waiting-on-author Status: The marked PR is awaiting some action (such as code changes) from the PR author. — Status: The marked PR is awaiting some action (such as code changes) from the PR author.
  • S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. — Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
  • S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. — Status: Awaiting review from the assignee but also interested parties.

Experience

Importance

Priority

  • P-high Priority: High — Priority: High

Categories

Misc

RFC Bot

  • final-comment-period FCP — a period for last comments before action is taken — FCP — a period for last comments before action is taken
  • finished-final-comment-period FCP complete — FCP complete
  • proposed-final-comment-period An FCP proposal has started, but not yet signed off. — An FCP proposal has started, but not yet signed off.
  • disposition-close — FCP with intent to close
  • disposition-merge FCP with intent to merge — FCP with intent to merge
  • to-announce — Issues that have finished their final-comment-period and should be publicly announced. Note: the rust-lang/rust repository uses this label differently, to announce issues at the triage meetings.

Proposed changes

Add a clear set of statuses

Every issue should have a clear answer as to "what is the status of this" or "what is it waiting on". Usually there should only be one status label (though that is not a requirement).

The following are not in a strictly linear set of steps, but are roughly the direction things flow. People should apply whichever S- label is appropriate.

Propose to add the following:

  • S-triage — This issue is waiting on initial triage.

    This should be auto-added to all new issues.

  • S-needs-info — Needs more info, such as a reproduction or more background for a feature request.

    Anyone is welcome to help with providing additional info to help reproduce or provide more detail on use cases and such. But usually this is a request to the initial author.

    When adding this label, there should also usually be a comment that goes along with it stating the information requested.

  • S-needs-team-input — Needs input from team on whether/how to proceed.

    Here it is essentially blocked waiting for a team member to move it to the next stage.

  • S-needs-design — Needs someone to work further on the design for the feature or fix.

    Anyone is welcome to help at this stage, but it should be clear that it is not yet accepted.
    It is expected that people should contribute comments and ideas to the issue which furthers the process of fleshing out what is needed, or alternate ideas. This may also require reaching out to the wider community via forums and such.

  • S-needs-rfc — Needs an RFC before this can make more progress.

    Anyone is welcome to help at this stage, but it should be clear that it is not yet accepted.
    However, this should only be tagged for changes that are somewhat likely to be accepted.

  • S-needs-mentor — Needs a team member to commit to helping and reviewing.

    This is for something that is accepted, such as after an RFC or a team discussion, or an obvious issue that just needs fixing, but no team member is available to help or review.

  • S-accepted — Issue or feature is accepted, and has a team member available to help mentor or review.

  • S-waiting-on-feedback — An implemented feature is waiting on community feedback for bugs or design concerns.

    Most tracking issues should go into this state after they have been implemented.

The E-* experience labels should be added at any stage to indicate the expected difficulty if it is known.

If someone wants pointers on where they can help, it depends on what they are interested in:

  • S-accepted — Anyone should be able to jump in depending on their skill level and interest (and it is not already assigned).
  • S-needs-design or S-needs-rfc — If you are interested in doing design work, these need someone to help move it along.
  • S-triage — Anyone can help with answering questions, asking for more detail, helping to reproduce, adding labels (like A-*), etc.

For tracking issues, they should either be S-needs-mentor, S-accepted, or S-waiting-on-feedback. For a partially implemented feature, it can have both S-waiting-on-feedback (for what is implemented) and S-needs-mentor or S-accepted to finish the rest of the work.

Other label changes

@weihanglo
Copy link
Member Author

Thank you for summarizing this. I am pretty much sold on the idea, given it is much clearer and actionable than the original one. I am happy to manage all these.

Just one question: Do all S-* share with the same color?

@epage
Copy link
Contributor

epage commented Apr 17, 2023

I feel like the proposal captures the core of what I was looking for (few, more obvious labels, clear path of progression).

@weihanglo weihanglo added the T-cargo Team: Cargo label Apr 17, 2023
@weihanglo
Copy link
Member Author

Three members here seem satifsied with Eric's propsal. I am going to do an FCP. If we generally agree on this, someone or I will update both the issue tracker and the contributor guide then.

@rfcbot fcp merge

I don't want to make it a poll because a poll won't show up in the RFC dashboard.

@rfcbot
Copy link
Collaborator

rfcbot commented Apr 17, 2023

Team member @weihanglo has proposed to merge this. The next step is review by the rest of the tagged team members:

No concerns currently listed.

Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!

See this document for info about what commands tagged team members can give me.

@rfcbot rfcbot added proposed-final-comment-period An FCP proposal has started, but not yet signed off. disposition-merge FCP with intent to merge labels Apr 17, 2023
@jonhoo
Copy link
Contributor

jonhoo commented Apr 18, 2023

One suggestion: I think the current E-help-wanted and Feature accepted labels should be turned into S-needs-mentor, not S-accepted, unless they are specifically simple or already have a Cargo team member available to help/review.

@rfcbot rfcbot added final-comment-period FCP — a period for last comments before action is taken and removed proposed-final-comment-period An FCP proposal has started, but not yet signed off. labels Apr 18, 2023
@rfcbot
Copy link
Collaborator

rfcbot commented Apr 18, 2023

🔔 This is now entering its final comment period, as per the review above. 🔔

@ehuss
Copy link
Contributor

ehuss commented Apr 18, 2023

Do all S-* share with the same color?

No, I think we can use different colors as needed.

I think the current E-help-wanted and Feature accepted labels should be turned into S-needs-mentor, not S-accepted, unless they are specifically simple or already have a Cargo team member available to help/review.

Yea, we definitely should review the existing issues before we migrate them. In practice we have been using those as wanting someone to start on them, but we should make sure that is still the case.

@weihanglo
Copy link
Member Author

weihanglo commented Apr 18, 2023

Since the team is happy with Eric's proposal, I am going to list the following tasks one by one. Feel free to take over any if it hasn't yet assigned to anyone.

  • Review existing issues that state needing or accepted are still so. @weihanglo
  • Migrate all old labels and create new ones. @weihanglo
  • Make S-triage autolabels for all new issues. @ehuss
  • Document the new issue labeling mechanism in Cargo Contributor Guide. @ehuss

bors added a commit that referenced this issue Apr 18, 2023
Add S-triage auto-label.

This automatically adds the https://github.com/rust-lang/cargo/labels/S-triage label to new issues using the template.

This is intended to help make it clear that issues have not been triaged, and need some decision on the next state they should go to.

cc #11788
@weihanglo
Copy link
Member Author

weihanglo commented Apr 18, 2023

Okay I've reviewed these labels and issues. I think we can move on to the migration. Hope I didn't miss anything.

Click to see more

@weihanglo
Copy link
Member Author

weihanglo commented Apr 19, 2023

This is how new labels look like after the migration.

  • S-accepted Status: Issue or feature is accepted, and has a team member available to help mentor or review
  • S-blocked-external Status: ❌ blocked on something out of the direct control of the Cargo project, e.g., upstream fix
  • S-needs-design Status: Needs someone to work further on the design for the feature or fix. NOT YET accepted.
  • S-needs-info Status: Needs more info, such as a reproduction or more background for a feature request.
  • S-needs-mentor Status: Issue or feature is accepted, but needs a team member to commit to helping and reviewing.
  • S-needs-rfc Status: Needs an RFC to make progress.
  • S-needs-team-input Status: Needs input from team on whether/how to proceed.
  • S-triage Status: This issue is waiting on initial triage.
  • S-waiting-on-feedback Status: An implemented feature is waiting on community feedback for bugs or design concerns.

Dark red indicates something we want from any potential contributor. Grey means it needs efforts from the Cargo team or a wider community.

Two questions:

  • I am not sure what color for S-needs-mentor should we use. If we want to make it obvious that it's accepted, I'll go with the same color of S-accepted.
  • Should we rename S-needs-mentor to S-accepted-needs-mentor so that it is clearer on its acceptance.

@ehuss
Copy link
Contributor

ehuss commented Apr 19, 2023

I am not sure what color for S-needs-mentor should we use. If we want to make it obvious that it's accepted, I'll go with the same color of S-accepted.

I don't have a strong opinion either way. Another option is to make it orange or yellow to be somewhere in-between green and red to correlate with it being somewhere between one of the red ones and being accepted.

Should we rename S-needs-mentor to S-accepted-needs-mentor so that it is clearer on its acceptance.

No strong opinion here, either. I slightly lean towards the shorter form, but either is fine with me.

bors added a commit that referenced this issue Apr 20, 2023
Update contributor guide with new issue labels.

This updates the contributor guide with the new labels discussed in #11788, and expands on some of the meanings and process changes related to that.
@ehuss
Copy link
Contributor

ehuss commented Apr 20, 2023

@weihanglo Are there any other things you'd like to see done for this, or can this issue be closed out?

@weihanglo
Copy link
Member Author

I think that's pretty much of it. Let's see how far the new label system goes. Thank you Eric for your help!

@rfcbot rfcbot added finished-final-comment-period FCP complete to-announce and removed final-comment-period FCP — a period for last comments before action is taken labels Apr 28, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants