Skip to content

Commit

Permalink
Add guidelines on issue triage (mlflow#2761)
Browse files Browse the repository at this point in the history
Publicly document and simply the process of issue triage for MLflow. Key changes:
- adding a `needs design` label for issues that might require significant changes or warrant further discussion with the community
- adding a `needs committer feedback` label for issues with a design that is ready for review, or if there's a PR that needs significant input about the approach or appropriateness of the submission
- adding kubernetes style priority labels to give the community a sense of the roadmap. We encourage teams to actively create issues for MLflow open source work they plan to do in order to share their roadmaps
- revising the component, language, and interface labels. Over time we expect to add working groups / ownership areas corresponding to these labels. Having them marked in PRs and issues will greatly help route issues to the right people for review.
  • Loading branch information
Paul Ogilive authored May 7, 2020
1 parent 142abbb commit 58a6053
Show file tree
Hide file tree
Showing 7 changed files with 200 additions and 51 deletions.
28 changes: 28 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,31 @@ Provide a reproducible test case that is the bare minimum necessary to generate
### Other info / logs
Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks,
please include the full traceback. Large logs and files should be attached.


### What component(s), interfaces, languages, and integrations does this bug affect?
Components
- [ ] `area/artifacts`: Artifact stores and artifact logging
- [ ] `area/build`: Build and test infrastructure for MLflow
- [ ] `area/docs`: MLflow documentation pages
- [ ] `area/examples`: Example code
- [ ] `area/model-registry`: Model Registry service, APIs, and the fluent client calls for
Model Registry
- [ ] `area/models`: MLmodel format, model serialization/deserialization, flavors
- [ ] `area/projects`: MLproject format, project running backends
- [ ] `area/scoring`: Local serving, model deployment tools, spark UDFs
- [ ] `area/tracking`: Tracking Service, tracking client APIs, autologging

Interface
- [ ] `area/uiux`: Front-end, user experience, JavaScript, plotting
- [ ] `area/docker`: Docker use across MLflow's components, such as MLflow Projects and MLflow Models
- [ ] `area/sqlalchemy`: Use of SQLAlchemy in the Tracking Service or Model Registry
- [ ] `area/windows`: Windows support

Language
- [ ] `language/r`: R APIs and clients
- [ ] `language/java`: Java APIs and clients

Integrations
- [ ] `integrations/azure`: Azure and Azure ML integrations
- [ ] `integrations/sagemaker`: SageMaker integrations
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/doc_fix_template.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
name: Documentation Fix
about: Use this template for proposing documentation fixes/improvements.
labels: 'docs'
labels: 'area/docs'
title: "[DOC-FIX]"
---
Thank you for submitting an issue. Please refer to our [issue policy](https://www.github.com/mlflow/mlflow/blob/master/ISSUE_POLICY.md)
Expand Down
42 changes: 26 additions & 16 deletions .github/ISSUE_TEMPLATE/feature_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,32 @@ The MLflow Community encourages new feature contributions. Would you or another
- Why is this use case valuable to support for your project(s) or organization?
- Why is it currently difficult to achieve this use case? (please be as specific as possible about why related MLflow features and components are insufficient)

## Which MLflow component(s) does this feature affect?

- [ ] UI
- [ ] Command Line Interface
- [ ] API
- [ ] Examples
- [ ] Docs
- [ ] Tracking
- [ ] Projects
- [ ] Artifacts
- [ ] Models
- [ ] Model Registry
- [ ] Scoring
- [ ] R
- [ ] Java
- [ ] Python
### What component(s), interfaces, languages, and integrations does this feature affect?
Components
- [ ] `area/artifacts`: Artifact stores and artifact logging
- [ ] `area/build`: Build and test infrastructure for MLflow
- [ ] `area/docs`: MLflow documentation pages
- [ ] `area/examples`: Example code
- [ ] `area/model-registry`: Model Registry service, APIs, and the fluent client calls for
Model Registry
- [ ] `area/models`: MLmodel format, model serialization/deserialization, flavors
- [ ] `area/projects`: MLproject format, project running backends
- [ ] `area/scoring`: Local serving, model deployment tools, spark UDFs
- [ ] `area/tracking`: Tracking Service, tracking client APIs, autologging

Interfaces
- [ ] `area/uiux`: Front-end, user experience, JavaScript, plotting
- [ ] `area/docker`: Docker use across MLflow's components, such as MLflow Projects and MLflow Models
- [ ] `area/sqlalchemy`: Use of SQLAlchemy in the Tracking Service or Model Registry
- [ ] `area/windows`: Windows support

Languages
- [ ] `language/r`: R APIs and clients
- [ ] `language/java`: Java APIs and clients

Integrations
- [ ] `integrations/azure`: Azure and Azure ML integrations
- [ ] `integrations/sagemaker`: SageMaker integrations

## Details

Expand Down
42 changes: 26 additions & 16 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,32 @@

(Details in 1-2 sentences. You can just refer to another PR with a description if this PR is part of a larger change.)

### What component(s) does this PR affect?

- [ ] UI
- [ ] Command Line Interface
- [ ] API
- [ ] Examples
- [ ] Docs
- [ ] Tracking
- [ ] Projects
- [ ] Artifacts
- [ ] Models
- [ ] Model Registry
- [ ] Scoring
- [ ] R
- [ ] Java
- [ ] Python
### What component(s), interfaces, languages, and integrations does this PR affect?
Components
- [ ] `area/artifacts`: Artifact stores and artifact logging
- [ ] `area/build`: Build and test infrastructure for MLflow
- [ ] `area/docs`: MLflow documentation pages
- [ ] `area/examples`: Example code
- [ ] `area/model-registry`: Model Registry service, APIs, and the fluent client calls for
Model Registry
- [ ] `area/models`: MLmodel format, model serialization/deserialization, flavors
- [ ] `area/projects`: MLproject format, project running backends
- [ ] `area/scoring`: Local serving, model deployment tools, spark UDFs
- [ ] `area/tracking`: Tracking Service, tracking client APIs, autologging

Interface
- [ ] `area/uiux`: Front-end, user experience, JavaScript, plotting
- [ ] `area/docker`: Docker use across MLflow's components, such as MLflow Projects and MLflow Models
- [ ] `area/sqlalchemy`: Use of SQLAlchemy in the Tracking Service or Model Registry
- [ ] `area/windows`: Windows support

Language
- [ ] `language/r`: R APIs and clients
- [ ] `language/java`: Java APIs and clients

Integrations
- [ ] `integrations/azure`: Azure and Azure ML integrations
- [ ] `integrations/sagemaker`: SageMaker integrations

### How should the PR be classified in the release notes? Choose one:

Expand Down
14 changes: 8 additions & 6 deletions CONTRIBUTING.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,11 @@ categories of issues: feature requests, bug reports, documentation fixes, and in
Details about each issue type and the issue lifecycle are discussed in the `MLflow Issue Policy
<https://github.com/mlflow/mlflow/blob/master/ISSUE_POLICY.md>`_.

MLflow committers actively triage and respond to GitHub issues. In general, we recommend waiting
for feebdack from an MLflow committer or community member before proceeding to implement a feature
or patch. This is particularly important for
`significant changes <https://github.com/mlflow/mlflow/blob/master/CONTRIBUTING.rst#write-designs-for-significant-changes>`_.
MLflow committers actively `triage <ISSUE_TRIAGE.rst>`_ and respond to GitHub issues. In general, we
recommend waiting for feebdack from an MLflow committer or community member before proceeding to
implement a feature or patch. This is particularly important for
`significant changes <https://github.com/mlflow/mlflow/blob/master/CONTRIBUTING.rst#write-designs-for-significant-changes>`_,
and will typically be labeled during triage with ``needs design``.

After you have agreed upon an implementation strategy for your feature or patch with an MLflow
committer, the next step is to introduce your changes (see `developing changes
Expand All @@ -39,8 +40,9 @@ Write designs for significant changes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

For significant changes to MLflow, we recommend outlining a design for the feature or patch and discussing it with
an MLflow committer before investing heavily in implementation. This is particularly important if your proposed
implementation:
an MLflow committer before investing heavily in implementation. During issue triage, we try to proactively
identify issues require design by labeling them with ``needs design``. This is particularly important if your
proposed implementation:

- Introduces changes or additions to the `MLflow REST API <https://mlflow.org/docs/latest/rest-api.html>`_

Expand Down
28 changes: 16 additions & 12 deletions ISSUE_POLICY.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,38 +35,42 @@ Feature requests typically go through the following lifecycle:

1. A feature request GitHub Issue is submitted, which contains a high-level description of the proposal and its motivation.
We encourage requesters to provide an overview of the feature's implementation as well, if possible.
2. The feature request is discussed with a committer. The committer will provide input on the implementation overview or
2. The [issue is triaged](ISSUE_TRIAGE.rst) to identify whether more information is needed from the author, give an indication of priority, and route feature requests to appropriate committers.
3. The feature request is discussed with a committer. The committer will provide input on the implementation overview or
ask for a more detailed design, if applicable.
3. After discussion & agreement on the feature request and its implementation, an implementation owner is identified.
4. The implementation owner begins developing the feature and ultimately files associated pull requests against the
4. After discussion & agreement on the feature request and its implementation, an implementation owner is identified.
5. The implementation owner begins developing the feature and ultimately files associated pull requests against the
MLflow Repository or packages the feature as an MLflow Plugin.

### Bug reports

Bug reports typically go through the following lifecycle:

1. A bug report GitHub Issue is submitted, which contains a high-level description of the bug and information required to reproduce it.
2. An MLflow committer reproduces the bug and provides feedback about how to implement a fix.
3. After an approach has been agreed upon, an owner for the fix is identified. MLflow committers may choose to adopt
2. The [bug report is triaged](ISSUE_TRIAGE.rst) to identify whether more information is needed from the author, give an indication of priority, and route to request appropriate committers.
3. An MLflow committer reproduces the bug and provides feedback about how to implement a fix.
4. After an approach has been agreed upon, an owner for the fix is identified. MLflow committers may choose to adopt
ownership of severe bugs to ensure a timely fix.
4. The fix owner begins implementing the fix and ultimately files associated pull requests.
5. The fix owner begins implementing the fix and ultimately files associated pull requests.

### Documentation fixes

Documentation issues typically go through the following lifecycle:

1. A documentation GitHub Issue is submitted, which contains a description of the issue and its location(s) in the MLflow documentation.
2. An MLflow committer confirms the documentation issue and provides feedback about how to implement a fix.
3. After an approach has been agreed upon, an owner for the fix is identified. MLflow committers may choose to adopt
2. The [issue is triaged](ISSUE_TRIAGE.rst) to identify whether more information is needed from the author, give an indication of priority, and route the request to appropriate committers.
3. An MLflow committer confirms the documentation issue and provides feedback about how to implement a fix.
4. After an approach has been agreed upon, an owner for the fix is identified. MLflow committers may choose to adopt
ownership of severe documentation issues to ensure a timely fix.
4. The fix owner begins implementing the fix and ultimately files associated pull requests.
5. The fix owner begins implementing the fix and ultimately files associated pull requests.

### Installation issues

Installation issues typically go through the following lifecycle:

1. An installation GitHub Issue is submitted, which contains a description of the issue and the platforms its affects.
2. An MLflow committer confirms the installation issue and provides feedback about how to implement a fix.
3. After an approach has been agreed upon, an owner for the fix is identified. MLflow committers may choose to adopt
2. The [issue is triaged](ISSUE_TRIAGE.rst) to identify whether more information is needed from the author, give an indication of priority, and route the issue to appropriate committers.
3. An MLflow committer confirms the installation issue and provides feedback about how to implement a fix.
4. After an approach has been agreed upon, an owner for the fix is identified. MLflow committers may choose to adopt
ownership of severe installation issues to ensure a timely fix.
4. The fix owner begins implementing the fix and ultimately files associated pull requests.
5. The fix owner begins implementing the fix and ultimately files associated pull requests.
95 changes: 95 additions & 0 deletions ISSUE_TRIAGE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@

This document is a hands-on manual for doing issue and pull request triage for `MLflow issues
on GitHub <https://github.com/mlflow/mlflow/issues>`_ .
The purpose of triage is to speed up issue management and get community members faster responses.

Issue and pull request triage has three steps:

- assign one or more process labels (e.g. ``needs design`` or ``help wanted``),
- mark a priority, and
- label one or more relevant areas, languages, or integrations to help route issues to appropriate contributors or reviewers.

The remainder of the document describes the labels used in each of these steps and how to apply them.

Assign appropriate process labels
#######
Assign at least one process label to every issue you triage.

- ``needs author feedback``: We need input from the author of the issue or PR to proceed.
- | ``needs design``: This feature is large or tricky enough that we think it warrants a design doc
| and review before someone begins implementation.
- | ``needs committer feedback``: The issue has a design that is ready for committer review, or there is
| an issue or pull request that needs feedback from a committer about the approach or appropriateness
| of the contribution.
- | ``needs review``: Use this label for issues that need a more detailed design review or pull
| requests ready for review (all questions answered, PR updated if requests have been addressed,
| tests passing).
- ``help wanted``: We would like community help for this issue.
- ``good first issue``: This would make a good first issue.


Assign priority
#######

You should assign a priority to each issue you triage. We use `kubernetes-style <https://github.com/
kubernetes/community/blob/master/contributors/guide/issue-triage.md#define-priority>`_ priority
labels.

- | ``priority/critical-urgent``: This is the highest priority and should be worked on by
| somebody right now. This should typically be reserved for things like security bugs,
| regressions, release blockers.
- | ``priority/important-soon``: The issue is worked on by the community currently or will
| be very soon, ideally in time for the next release.
- | ``priority/important-longterm``: Important over the long term, but may not be staffed or
| may need multiple releases to complete. Also used for things we know are on a
| contributor's roadmap in the next few months. We can use this in conjunction with
| ``help wanted`` to mark issues we would like to get help with. If someone begins actively
| working on an issue with this label and we think it may be merged by the next release, change
| the priority to ``priority/important-soon``.
- | ``priority/backlog``: We believe it is useful but don’t see it being prioritized in the
| next few months. Use this for issues that are lower priority than ``priority/important-longterm``.
| We welcome community members to pick up a ``priority/backlog`` issue, but there may be some
| delay in getting support through design review or pull request feedback.
- | ``priority/awaiting-more-evidence``: Lowest priority. Possibly useful, but not yet enough
| support to actually get it done. This is a good place to put issues that could be useful but
| require more evidence to demonstrate broad value. Don’t use it as a way to say no.
| If we think it doesn’t fit in MLflow, we should just say that and why.
Label relevant areas
#######

Assign one more labels for relevant component or interface surface areas, languages, or
integrations. As a principle, we aim to have the minimal set of labels needed to help route issues
and PRs to appropriate contributors. For example, a ``language/python`` label would not be
particularly helpful for routing issues to committers, since most PRs involve Python code.
``language/java`` and ``language/r`` make sense to have, as the clients in these languages differ from the Python client and aren't maintained by many people. As with process labels, we
take inspiration from Kubernetes on naming conventions.

Components
""""""""
- ``area/artifacts``: Artifact stores and artifact logging
- ``area/build``: Build and test infrastructure for MLflow
- ``area/docs``: MLflow documentation pages
- ``area/examples``: Example code
- ``area/model-registry``: Model Registry service, APIs, and the fluent client calls for Model Registry
- ``area/models``: MLmodel format, model serialization/deserialization, flavors
- ``area/projects``: MLproject format, project execution backends
- ``area/scoring``: Local serving, model deployment tools, Spark UDFs
- ``area/tracking``: Tracking Service, tracking client APIs, autologging

Interface Surface
""""""""
- ``area/uiux``: Front-end, user experience, JavaScript, plotting
- ``area/docker``: Docker use across MLflow's components, such as MLflow Projects and MLflow Models
- ``area/sqlalchemy``: Use of SQLAlchemy in the Tracking Service or Model Registry
- ``area/windows``: Windows support

Language Surface
""""""""
- ``language/r``: R APIs and clients
- ``language/java``: Java APIs and clients

Integrations
""""""""
- ``integrations/azure``: Azure and Azure ML integrations
- ``integrations/sagemaker``: SageMaker integrations

0 comments on commit 58a6053

Please sign in to comment.