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

WIP: basic backlog management #52

Closed
wants to merge 4 commits into from
Closed
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 122 additions & 0 deletions docs/project-backlog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# Backlog Structure for OpenTelemetry

It's an important community goal for OpenTelemetry that our members find the backlogs to be responsive, and easy to take part in. Having a shared methodology for processing issues helps new members understand the current state of each project.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it will be great to state the goals of the process. What we are optimizing for.


## Roles
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I took these roles from the OC doc, but perhaps we want to make them align more clearly with what is listed in https://github.com/open-telemetry/community/blob/master/community-membership.md.

* **Triager**: Person who is triaging the issue by determining its workability. This person is responsible for getting the ticket to one of two stages - 1) ready-for-work 2) wontfix. They are responsible for triaging by working with the OP to get additional information as needed and analyzing the issue and adding relevant details/information/guidance that would be helpful to the resolution of the issue.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there is one more category of issues - "should be defined in specs first". Typically when someone suggests new API surface

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is no formal Triager in community membership document. My first reaction is that we should just make it maintainer's responsibility. However I can see cases when someone helping maintainers with triage. If you envision this situation - it will be good to mention it in community membership document

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These work stages don't match the issue states below, looks like separate docs glued together.


* **OP**: Original Poster. This is the person who has opened or posted the issue.

* **Contributor**: Person(s) that are actually doing the work related to the ticket. Once work is done, they work with the Reviewer and the Contributing Reviewers to get feedback implemented and complete the work. They are responsible for making sure issue status label is up to date.

* **Reviewer**: Person(s) whose Approval is needed to merge the PR.

* **Contributing Reviewer**: Person who provides feedback on an PR but whose Approval is not necessarily needed to merge the PR.

## SLAs
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another approach to SLAs would be to assign them them to each issue state, rather than each role. ¯_(ツ)_/¯

We value having a responsive backlog, and have response SLAs for each role. If an issue exceeds an SLA, it is put into the `stale` state.

* **Triager**: Daily (Business Days) review of new issues with initial feedback to OP or issue processed within 3 days of last activity.
* **Reviewer / Contributing Reviewer**: Provide feedback within 3 days of the last activity on a PR
* **Contributor**: 3 day updates as comments on the PR to indicate activity

## Issue States

### New
label: `new`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do we need a label for new? Perhaps anything without the label is new


New issues are the domain of the backlog Triagers. Every new issue should be responded to quickly, with a greeting and any needed clarifying questions. If assessing the issue requires more information, the Triager collaborates with the OP until workability is determined.

The most common next steps for new tickets:
* `available` for actionable work items.
* `needs-discussion` for issues which cannot be triaged quickly, but raise important points.
* `no-further-action` for issues which can be quickly resolved.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not wontfix?


### Available
label: `available`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we use up-for-grabs?


For new work requests Once it has been classified, a ticket is up for grabs to be picked up to be worked on by a contributor.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo: Once

Copy link
Member

@c24t c24t May 16, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Once a new work request has been classified any contributor may begin work on it" makes more sense than "... a ticket is up for grabs to be picked up to be worked on by a contributor" if we're not using up-for-grabs.


All work is labeled with a priority:
* `P0` = Critical (Drop everything and work on it.)
* `P1` = Important (Work on it if no P0 are present. Use judgment to prioritize items within a list of P1s)
* `P2` = Low (Work on it when no P1 are left or some one from community wants to contribute)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: periods are inconsistent here


Work can also be classified into a number of categories, to make available issues easier to find. Common examples of work categories are:
* `feature-request`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what's the difference with enhancement?

* `enhancement`
* `bug`
* `docs`

Available work can be assigned in the following ways:
* A contributor assigns the ticket to themselves.
* A maintainer assigns the ticket to a contributor.

All tickets transition to `wip` once they have been assigned.

### WIP
label: `wip`

Any ticket which has been assigned a lead contributor is considered work in progress.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do you envision some automation?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also - non-members can declare that they are working on issue by mentioning themselves in comments. It is mentioned in CONTRIBUTING.md


* If a PR is merged which resolves the issue, the ticket can be closed as `completed`.
* If work is blocked on review, the ticket transitions to `needs-review`.
* If work is abandoned, or the ocntributors otherwise change their minds, the ticket can be closed as `no-further-action`.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo: ocntributors


### Needs Review
label: `needs-review`

Implementation work related to the ticket has been completed. Work related to a Review and/or any changes requested as part of the review is in progress. Issues with a PR associated with it will be considered as in ‘In Review’.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same question - "considered In Review" - is there manual step for this? If so - it sounds heavyweight process. If there is an automation - how it will understand issue to PR association?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel this is related to SLAs. Ideally, no state change from “wip” is needed. However, if an issue becomes blocked on review activity, it’s state should change.

I would like automation to track SLAs, and assign labels in response. But the task should be simple enough for a triager to manually.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so you want to solve the problem that the issue become "stale" in wip state? If there is an automation that will bug me to change the state - I will do it. Otherwise - it looks like too much to do to fix a simple bug (for instance).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was In Review removed as an issue state?


* Move the issue back to `in-progess` if significant changes are needed.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo: in-progess

* Close the issue with the `completed` label.
* Close the issue with the `no-action` label.

### Needs Discussion
label: `needs-discussion`

Some issues are not directly related to a particular code change. This can often arise with tickets describing unclear edge cases, and situations where applying OpeTelemetry is proving to be difficult. If a ticket is worth considering in the issue backlog, but not scoped clearly enough to move to `wip`, then it `needs-discussion`.

* When possible, move the discussion forwards by using code examples.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: s/forwards/forward/

* Mark the ticket as `agreed` if a resolution is found.
* Close the ticket as `no-action` if discussion ends without a solution.
* Note: If the ticket is a help request with an existing answer, please link to the answer before closing the ticket.

### Agreed
label: `agreed`

An agreement has been reached. Once a course of action is determined, discussion is (hopefully) over.

* Clearly list any resulting action items which need to be adressed.
* Close the ticket once all action items are completed.

### Stale
label: `stale`

When a ticket has violated an SLA, it becomes stale.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do you envision some automation in place?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For SLAs, yes. But it should be possible to do by hand, or it is too complicated.

For next step, I suggest we try setting up project boards for java and c#, and model some of this workflow.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this SLA tag is clearly have some target in mind. You want to ensure "healthy" project with timely replies. If somebody will do it by hand - repo is already "healthy". Your issue will be read and classified.

So from my perspective SLA like this can mostly be used as a metric for transparency or reminder to the maintainer with suggested actions. This is how I read the proposal in your document.

Comment with the mention of maintainer and triager like this can be posted on the issue:

Like this isssue was untriaged for a long time. (at)poster - please make sure the ticket has enough details and, when possible, clear steps to repro. (at)repo-maintainers If you feel that some details are missing - add this "label". If it takes too much time to reproduce - please indicate that you are looking into it using this "label"., etc...

But this thing will only be useful with automation


Action items for stale tickets:
* record the SLA details as comment on the ticket.
* @mention the person(s) who can resolve the SLA.

### Blocked
label: `blocked`

An Issue is blocked due to an external reason or extenuating circumstances. Genereally, issues should be closed as `no-further-action`, rather than be left in a `blocked` state.

### No Futher Action
label: `no-further-action`

Not every discussion or feature request results in action. Issues which cannot be adressed at the present moment, or have no futher discussion, should be closed. This helps keep the open backlog focused on active discussions.

Possible reasons:
* a prior discussion decided the issue for now.
* a discussion is off topic.
* a feature request is not implementable.

In these cases, close the ticket as `no-further-action`. Please include a description explaining why the ticket was closed, including links to prior tickets if available. Please describe how the ticket can be reopened if needed.

### Completed
label: `completed`

Any issues which are resolved via a merged pull request can be closed with the `completed`. This extra label can be helpful when searching closed issues.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you please elaborate on it? So you want to differentiate in search wether issue was completed or closed with explanation of user error? Typically you don't care, just read comments and associated PRs should be enough

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mainly, this is here because, like “new,” completed is an important state.

I agree that we can use “closed with no label” to mean “completed” if it is too difficult to add a label.

As to why the label is an important category, when searching the past it is important to scope search to work that was incorporated into the project, versus off-topic discussions or rejected features.

Closed labels:

  • record of work. (completed)
  • record of non-work requests. (no-further-action)
  • record of issues closed without due process. (no label)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm curious what kind of a search do you have in mind? Looking for some exception from SDK, but only when it resulted in "completed" PR? I see how it can be useful for analytics. Perhaps we can identify what kind of analytics we need to run to inform what kind of additional work to impose on maintainers