With the rapid growth of Gatsby and the large number of issues in the repo, a more structured labeling system seems worth exploring to help contributors figure out, at a glance, a few key pieces of information about an issue:
This is closely related to #4295 and will play a critical role in its success. If we get a sane labeling system in place, we should be able to make it easy to filter for
@m-allanson pointed out the serverless and stylelint label definitions, which are both great examples.
Borrowing liberally from their setup, I'd like to propose the following label structure for the Gatsby repo:
type: bug โ describes a bug in Gatsbytype: question โ asks a question about Gatsbytype: documentation โ improves or adds documentationtype: tests โ adds new tests or improves existing teststype: refactor โ improves code quality or stability without affecting Gatbyโs functionalitytype: feature โ adds a new feature or capability to Gatsbytype: rfc โ proposes larger ideas that need discussion and will be broken down into subtasks, if acceptedtype: design โ creates or modifies the design of Gatsby assets (e.g. t-shirts, website)status: in development โ issue is assigned to a contributor and under active developmentstatus: blocked โ issue cannot move forward until another issue is resolvedstatus: needs clarification โ issue is missing key information (e.g. a reproducible test case)status: discussion โ issue does not contain work items (e.g. an RFC)status: ready โ issue is ready for development but has not been assigned or startedtarget: core โ the resulting code will be merged into the Gatsby coretarget: cli โ the resulting code will be merged into the Gatsby CLItarget: plugin โ the resulting code will be merged into a Gatsby pluginroadmap: v1 โ will be merged into Gatsby v1roadmap: v2 โ will be released with Gatsby v2roadmap: future โ will be released in the future but is not currently part of a releasegood first issue โ an issue that is ideal for first-time contributors due to lower effort and complexityhelp wanted โ synonymous with status: readyhacktoberfest โ used during October to signify good issues for Hacktoberfest participantsAnother idea, just for fun, could be to use emoji instead of the initial qualifier label (e.g. type:):
๐ท refactor)๐ ready๐ฏ core)๐บ v1)We'd leave emojis out of the help wanted and good first issue labels since GitHub looks for those as-is.
What does everyone think? Does this seem like a manageable number of labels and a reasonable organizational structure for them? Did I miss anything?
Great stuff @jlengstorf!
I think key to making this work will be balancing simplicity against the amount of data we want to add via labels. It needs to be really quick and simple to decide which labels apply to an issue. But if the system is too simple then we may not be able to extract as much automation goodness out for e.g. issue #4295.
Maybe we can work out what info the roadmap should contain, and then work backwards to a minimum set of labels that gets us there? Alternatively, your list above looks good. I'd be tempted to drop the _Target_ category and maaaaybe the _Roadmap_ category...
And yeah let's try the emojis ๐ค Hopefully they'll make it easier to visually scan the issues list.
Good point about working backward from what we'd want to display on the roadmap.
If we use Serverlessโs Scope instance as a starting point, I'd love to see the following columns:
Discussion | Backlog | In Progress | On Hold | Needs Review | Done
--- | --- | --- | --- | --- | ---
tracks open discussions & RFCs | all issues that are unblocked and unassigned | assigned, unblocked issues | issues that are blocked or awaiting clarification | open PRs | closed issues & PRs
Tags:๐ท rfc, ๐ท question, ๐ discussion | Tags:๐ท feature, ๐ท bug, ๐ท refactor, ๐ท documentation, ๐ท tests | Tags:๐ท feature, ๐ท bug, ๐ท refactor, ๐ท documentation, ๐ท tests | Tags:๐ blocked, ๐ needs clarification | โ | โ
_Not_ tagged with:๐ blocked, ๐ needs clarification | _Not_ tagged with:๐ blocked, ๐ needs clarification, ๐ discussion | _Not_ tagged with:๐ blocked, ๐ needs clarification, ๐ discussion | โ | โ | โ
โ | Only unassigned | Only Assigned | โ | โ | โ
Additionally, it would be great to highlight:
๐ท bughelp wantedgood first issuehacktoberfest (only when Hacktoberfest is active, but I guess we'd just remove this tag unless the event is on)I'm hesitant to drop the roadmap tags because I think it's really helpful when people ask things like, "When will Gatsby upgrade to [package]@[version]?" or "When will [feature] be available?" If we can open issues to track those targets and tag them with the appropriate roadmap release, it helps reduce noise.
Also, it would help contributors prioritize what to work on because they can filter down for a release. If something is tagged ๐บ future, there's less urgency and maybe a ๐บ v1 issue should take precedence.
I'm happy to drop the target group of labels โ I added those because core/plugin labels are part of the repo's current label structure.
Filtering isn't supported in Scope (though it looks like it might be soon), but it'll still be really useful in a GitHub Project or for filtering the Issues board.
Looking at this, I may have overcomplicated the tagging in that table above. We could probably control that whole table with _only_ status tags. ๐
Maybe it's just me but I never use labels or look at labels here or on any other project on Github ๐คทโโ๏ธ
I can see "good issue for new contributors" type labels being useful but beyond that, they just seem like busy work. Hope that doesn't sound offensive :-P
Perhaps we could start with some user stories? What's the problems we're trying to solve.
There's other tools/techniques that could be considered.
@KyleAMathews sure, user stories seems like a good way to approach it.
To put a few out there:
mentor available).Without reading through all the issues on a repo, it's really hard to get a sense of scope or context around _what's happening now_ without some kind of organizational system, in my opinion. Issue filters are one of my most used tools on GitHub.
I'd also make the argument that labeling โ while I agree it takes extra time โ is a strong signal that a repo is healthy, well-maintained, that the maintainers are on the same page. Otherwise, maintainers have to generate a lot of comment noise to acknowledge issues and communicate opinions about status. It may not have a lot of benefit for those of us who spend the majority of our working days in the issues, but for people who lack that context, I think it can make the difference between getting involved and getting overwhelmed.
(I'm not married to the idea of labeling, of course; if we can find another way of solving these problems that's faster for maintainers to manage, I'm happy to be convinced otherwise.)
Am I making sense?
Thanks for the full response :-)
Here's a suggestion โ I definitely see that labels (and organization in general) have value. I'm just very wary of premature optimizations/abstractions.
Perhaps we do this incrementally? Decide what weaknesses in the community development process are most pressing or what low-hanging fruit opportunities we have and then once we fleshed out the problem/opportunity, decide on the best solution for that.
Sounds like a great workshop topic to introduce at next week's maintainer summit :-D
Following up from the maintainer summit a week ago, there was some great discussion on this. Here's what I took away from the session:
The aim is to make it easier for new and existing contributors to work on Gatsby without adding too much admin overhead. The broad areas discussed were:
bug, discussion, feature requestneeds repro, readygood first issueAt a minimum every new issue should have a _Type_ label applied to it, everything else is optional. Labelling can be fluid - a lot of issues might start with the label 'type: discussion', before being changed to a more specific _type_.
Taking that information along with the existing repo structure gives a setup something like this:
Every issue should have exactly one _Type_ label.
labels: bug, discussion, feature, maintenance, documentation
Optional
labels: needs repro, help wanted
Optional
So far these are labels indicating that an issue is a well-defined piece of work or labels used by bots.
label: good first issue, hacktober, stale?, review
Optional
Assign an issue to one of the existing projects: docs, v2, UX (add projects as required)
Question: Do we need to create any additional projects?
We talked about using GitHub's Milestones as a way of defining a roadmap however, we already have a v2 Project which contains more info than a Milestone could. In the interest of keeping this plan as simple as possible, I'm going to drop Milestones for now (unless anyone has strong objections). This could be looked at again once the labelling and projects is in place.
There are 20 existing labels. While we're adding new labels, it makes sense to revisit the existing ones. Having a small, clearly defined set of labels makes it much more likely that the labelling system will be used. Here's what I propose should happen to each of them:
| Label | Destiny | Notes |
|---|---|---|
| API/Plugins | โdelete | too specific (currently applied to 66 issues) |
| bug | โ
keep | rename to type: bug or similar |
| Documentation | โdelete | redundant - add all issues with this label to the 'Documentation' project before deleting the label |
| DX | โdelete | too specific (currently applied to 13 issues) |
| Feature Request | โ
keep | rename to type: feature or similar |
| good first issue | โ
keep | exact name is used by GitHub, don't rename |
| GraphQL | โdelete | too specific (currently applied to 13 issues) |
| Hacktoberfest | โ
keep | exact name is used by Hacktoberfest, don't rename |
| Help Wanted for Plugins | โdelete | too specific (currently applied to 4 issues) |
| Help Wanted in Core | โ
keep | rename to help wanted or similar |
| needs-repro | โ
keep | rename to needs repro or similar |
| performance | โdelete | too specific (currently applied to 4 issues) |
| question | โ
keep | rename to type: discussion or similar |
| review | โ
keep | Used by wafflebot? Investigate this |
| stale? | โ
keep | Used by stalebot to close stale issues. Maybe rename to bot: stale? |
| upstream-issue | โdelete | I'm 50/50 on this one. There's only two issues using it so have opted to delete it |
| UX Design | โdelete | redundant - add all issues with this label to the 'UX' project before deleting the label |
| v0 | โdelete | it's never been used |
| v1 | โdelete | We _could_ keep this but I don't think it adds much value (currently applied to 8 issues) |
| v2 | โdelete | redundant - add all issues with this label to the 'v2' project before deleting the label (currently applied to 7 issues) |
This is hopefully a lightweight way of using GitHub's features to make the Gatsby repo more approachable to all contributors.
@m-allanson looks great! There's a nice new shiny RFCs repo you can toss this into ;-) https://github.com/gatsbyjs/rfcs
RFC number 1 is up at https://github.com/gatsbyjs/rfcs/pull/1
This is done ๐
Most helpful comment
RFC number 1 is up at https://github.com/gatsbyjs/rfcs/pull/1