blob: 728fa94e9acb2d8596c567f9fbd7b5cf70fff59d [file] [log] [blame] [view]
---
title: "Design Doc - Attention Set - Solution 1 - Workflow"
permalink: design-docs/attention-set-solution-1-workflow.html
hide_sidebar: true
hide_navtoggle: true
toc: false
folder: design-docs/attention-set
---
# Solution 1 - Workflow
*Please read [Use Cases](/design-docs/attention-set-use-cases.html) before this doc.*
## <a id="overview">Overview
We propose to establish an “Attention Set” per change that at each point in time contains the users
that are expected to take action on a change.
*Being in the attention set and requiring/needing attention are used as synonyms in this doc.*
Being in the attention set is a state that every user must understand and act on. The expectations
and obligations are the same for all users on all changes on all hosts. So as an owner for example
you can rely on reviewers to take action, if they are in the attention set.
A user in the attention set is required and expected to take action on a change, i.e. it is their
turn. More specifically:
* As a reviewer you shouldn't have to concern yourself with changes that don't need your
attention.
* As a reviewer you are expected to act, if a change needs your attention. (That action can be
removing yourself from the attention set.)
* As an owner I can expect reviewers to take timely action, if they are in the attention set.
We are establishing the attention set as a first class citizen of the review process by building a
[User Interface](solution-1-user-interface.md) that emphasizes its importance and allows users to
see "at a glance" whose turn it is on both the dashboard and the change pages.
We define some simple [defaults](#defaults) for how the attention set should change for a few common
actions. In the reply dialog users will have fine grained control over attention set changes.
Only review participants (owner, uploader, reviewers and CCs) can be in the attention set.
Email notifications about uploaded patch sets will not be sent anymore (only to the owner, if
someone else uploads a patchset). Reviewers will get emails when they are added to the attention
set.
We propose to drop the
[Reviewed](https://gerrit-review.googlesource.com/Documentation/rest-api-changes.html#mark-as-reviewed)
feature and its associated
[bolding of change-list items](https://gerrit-review.googlesource.com/Documentation/dev-stars.html#reviewed-star).
We propose to keep the "Assignee" feature around, but new releases would have it turned off by
default, because for most hosts the overlap with the attention set is too big, and they don't have
a need for the urgency aspects of Assignee. OTOH hosts that make good use of the feature should be
able to keep using it.
## <a id="defaults">Defaults
In order to help the user, we propose to apply useful default modifications to the attention set
when standard review events happen. Each of the following defaults can be overridden when executing
the action in the user interface:
* When reviewers are added they are added to the attention set.
* When someone other than the owner uploads a patchset the owner is added to the attention set.
* When a change is submitted or abandoned all users are removed from the attention set.
* Replying (commenting, voting or just writing a change message) will remove the publishing user
from the attention set.
* When a *reviewer* replies add the owner (and uploader) to the attention set. Refinements:
* For each comment thread that the reviewer replies to also add all participants of that
thread to the attention set.
* When the *owner* (or uploader) replies add all reviewers to the attention set. Refinements:
* When the *uploader* replies also add the owner to the attention set.
The above defaults are also applied when using the API (but can also be overriden). For example if
the reviewers-by-blame plugin adds a reviewer, then that reviewer is also added to the attention
set.
The upload of a new patchset by itself is **not** associated with a default change of the attention
set. The owner may want to upload intermediate states or want to wait for CI systems before passing
back the attention to reviewers.
These simple defaults are not expected to do the right thing in 100% of the cases, just maybe 90%.
The owner of a change is still expected to manage the attention set individually and make sure that
it reflects their expectations.
There are some special cases to be considered:
* Work in Progress (WIP): When a change leaves WIP state with reviewers, then all reviewers are
added to the attention set. When a change enters WIP state, then the attention set is cleared.
While a change is in WIP state the defaults above for adding users to the attention set are not
applied.
* Merged and Private Changes: Will be handled with the same defaults as normal changes.
## <a id="expectations">Deferred Enhancement: Expectations
*This is an optional additional enhancement of the proposal. The above can be implemented with or
without it. Actually you could argue that it has nothing to do with the attention set.* :-)
*At the moment we are not planning to include "Expectations" in v1 of the Attention Set.*
We propose to associate every reviewer with an expectation message, which simply is "please review
my change" by default, but can be changed by the owner or the reviewer to something like "please
approve ownership once code review is completed" or "please vote on library compliance".
## <a id="snoozing">Deferred Enhancement: Snoozing/Pausing
*This is an optional additional enhancement of the proposal. The above can be implemented with or
without it.*
*At the moment we are not planning to include "Snoozing/Pausing" in v1 of the Attention Set.*
The attention set proposal above assumes that at any point in time it is either the owner's or the
reviewers' turn to act on a change. But often a user may wait for some event to happen, so they
would like to unassign themselves until this event happens, and only then act on the code review.
Some example scenarios taken from [Use Cases](use-cases.md):
* snooze for a fixed time (being out of office or otherwise busy)
* wait for tests or other checks to finish
* as an owner on a "ready to submit" change wait for the parent or some other change to be merged,
reviewed, released
* staged review: wait for a review from someone else (e.g. a shadowed reviewer), then assign
another reviewer (e.g. a shadowing reviewer, or someone with +2 powers)
We propose to allow a snoozing condition to be associated with a user that is currently not in the
attention set.
## <a id="implementation">Alternatives Considered
* The Assignee feature could have been replaced entirely, because it is fairly similar to the
proposed Attention Set feature. But it was pointed out that it is already used heavily for a use
case that is not covered by the Attention Set: Singling out one person to convey urgency. So
taking away the Assignee feature would be too disruptive for some teams.
## <a id="implementation">Implementation Plan and Time Estimation
Will be implemented by Google and be ready for the 3.2 release.