| :linkattrs: | 
 | = Gerrit Code Review - Design Docs | 
 |  | 
 | For the link:dev-contributing.html#design-driven-contribution-process[ | 
 | design-driven contribution process] it is required to specify features | 
 | upfront in a design doc. | 
 |  | 
 | [[structure]] | 
 | == Design Doc Structure | 
 |  | 
 | A design doc should discuss the following aspects: | 
 |  | 
 | * Use-Cases: | 
 |   The interactions between a user and a system to attain particular | 
 |   goals. | 
 | * Acceptance Criteria: | 
 |   Conditions that must be satisfied to consider the feature as done. | 
 | * Background: | 
 |   Stuff one needs to know to understand the use-cases (e.g. motivating | 
 |   examples, previous versions and problems, links to related | 
 |   changes/design docs, etc.) | 
 | * Possible Solutions: | 
 |   Possible solutions with the pros and cons, and explanation of | 
 |   implementation details. | 
 | * Conclusion: | 
 |   Which decision was made and what were the reasons for it. | 
 |  | 
 | [[collaboration]] | 
 | As community we want to collaborate on design docs as much as possible | 
 | and write them together, in an iterative manner. To make this work well | 
 | design docs are split into multiple files that can be written and | 
 | refined by several persons in parallel: | 
 |  | 
 | * `index.md`: | 
 |   Entry file that links to the files below (also see | 
 |   'dev-design-doc-index-template.md'). | 
 | * `use-cases.md`: | 
 |   Describes the use-cases, acceptance criteria and background (also see | 
 |   'dev-design-doc-use-cases-template.md'). | 
 | * `solution-<n>.md`: | 
 |   Each possible solution (with the pros and cons, and implementation | 
 |   details) is described in a separate file (also see | 
 |   'dev-design-doc-solution-template.md'). | 
 | * `conclusion.md`: | 
 |   Describes the conclusion of the design discussion (also see | 
 |   'dev-design-doc-conclusion-template.md'). | 
 |  | 
 | [[expectation]] | 
 | It is expected that: | 
 |  | 
 | * An agreement on the use-cases is achieved before solutions are being | 
 |   discussed in detail. | 
 | * Anyone who has ideas for an alternative solution uploads a change | 
 |   with a `solution-<n>.md` that describes their solution. In case of | 
 |   doubt whether an idea is a refinement of an existing solution or an | 
 |   alternative solution, it's up to the owner of the discussed solution | 
 |   to decide if the solution should be updated, or if the proposer | 
 |   should start a new alternative solution. | 
 | * All possible solutions are fairly discussed with their pros and cons, | 
 |   and treated equally until a conclusion is made. | 
 | * Unrelated issues (judged by the design doc owner) that are identified | 
 |   during discussions may be extracted into new design docs (initially | 
 |   consisting only of an `index.md` and a `use-cases.md` file). Doing so | 
 |   is optional yet can be done by either the design owner or reviewers. | 
 | * Changes making iterative improvements can be submitted frequently | 
 |   (e.g. additional uses-cases can be added later, solutions can be | 
 |   submitted without describing implementation details, etc.). | 
 | * After a conclusion has been approved contributors are expected to | 
 |   keep the design doc updated and fill in gaps while they go forward | 
 |   with the implementation. | 
 |  | 
 | [[propose]] | 
 | == How to propose a new design? | 
 |  | 
 | To propose a new design, upload a change to the | 
 | link:https://gerrit-review.googlesource.com/admin/repos/homepage[ | 
 | homepage,role=external,window=_blank] repository that adds a new folder under `pages/design-docs/` | 
 | which contains at least an `index.md` and a `uses-cases.md` file (see | 
 | link:#structure[design doc structure] above). | 
 |  | 
 | Pushing a design doc for review requires to be a | 
 | link:dev-roles.html#contributor[contributor]. | 
 |  | 
 | When contributing design docs, contributors should make clear whether | 
 | they are committed to do the implementation. It is possible to | 
 | contribute designs without having resources to do the implementation, | 
 | but in this case the implementation is only done if someone volunteers | 
 | to do it (which is not guaranteed to happen). | 
 |  | 
 | Only very few maintainers actively watch out for uploaded design docs. | 
 | To raise awareness you may want to send a notification to the | 
 | link:https://groups.google.com/d/forum/repo-discuss[repo-discuss,role=external,window=_blank] | 
 | mailing list about your uploaded design doc. But the discussion should | 
 | not take place on the mailing list, comments should be made by reviewing | 
 | the change in Gerrit. | 
 |  | 
 | [[review]] | 
 | == Design doc review | 
 |  | 
 | Everyone in the link:dev-roles.html[Gerrit community] is welcome to | 
 | take part in the design review and comment on the design. As such, every | 
 | design reviewer is expected to respect the community | 
 | link:https://www.gerritcodereview.com/codeofconduct.html[Code of Conduct,role=external,window=_blank]. | 
 |  | 
 | Positive `Code-Review` votes on changes that add/modify design docs are | 
 | sticky. This means any `Code-Review+1` and `Code-Review+2` vote is | 
 | preserved when a new patch set is uploaded. If a new patch set makes | 
 | significant changes, the uploader of the new patch set must start a new | 
 | review round by removing all positive `Code-Review` votes from the | 
 | change manually. | 
 |  | 
 | Ideas for alternative solutions should be uploaded as a change that | 
 | describes the solution (see link:#collaboration[above]). This should be | 
 | done as early as possible during the review process, so that related | 
 | comment threads stop there and do not clutter the current review. It is up | 
 | to the alternative reviews to then host their related comments. | 
 |  | 
 | Verification should be based on the generated `jekyll` site using the | 
 | local `docker`, rather than via the rendering in `gitiles` (via | 
 | `gerrit-review`). | 
 |  | 
 | Changes which make a conclusion on a design (changes that add/change | 
 | the `conclusion.md` file, see link:#structure[Design Doc Structure]) | 
 | should stay open for a minimum of 10 calendar days so that everyone has | 
 | a fair chance to see them. It is important that concerns regarding a | 
 | feature are raised during this time frame since once a conclusion is | 
 | approved and submitted the implementation may start immediately. | 
 |  | 
 | Other design doc changes can and should be submitted quickly so that | 
 | collaboration and iterative refinements work smoothly (see | 
 | link:#collaboration[above]). | 
 |  | 
 | For proposed features the contributor should hear back from the | 
 | link:dev-processes.html#steering-committee[engineering steering | 
 | committee] within 30 calendar days whether the proposed feature is in | 
 | scope of the project and if it can be accepted. | 
 |  | 
 | [[meetings]] | 
 | === Meeting discussions | 
 |  | 
 | If the Gerrit review doesn't start efficiently enough, stalls, gets off-track | 
 | too much or becomes overly complex, one can use a meeting to refocus it. From | 
 | that review thread, the organizer can volunteer oneself, or be proposed (even | 
 | requested) by a reviewer. link:https://www.gerritcodereview.com/members.html#community-managers[ | 
 | Community managers,role=external,window=_blank] may help facilitate that if | 
 | ultimately necessary. | 
 |  | 
 | [[watch-designs]] | 
 | == How to get notified for new design docs? | 
 |  | 
 | . Go to the | 
 |   link:https://gerrit-review.googlesource.com/settings/#Notifications[ | 
 |   notification settings,role=external,window=_blank] | 
 | . Add a project watch for the `homepage` repository with the following | 
 |   query: `dir:pages/design-docs` | 
 |  | 
 | GERRIT | 
 | ------ | 
 | Part of link:index.html[Gerrit Code Review] | 
 |  | 
 | SEARCHBOX | 
 | --------- |