Make writing design docs more collaborative and iterative

When we introduced the design-driven contribution process we started
with a simple process and template for writing design docs, with the
intention to refine the process and template later. Now we gathered some
first experience with design discussions and we noticed/foresee a few
things that are not optimal yet, hence we want to improve the process
and the template.

Things that we want to improve:

1. Agreeing on a solution is difficult and design reviews can take a
   long time. At the moment a design doc can only be submitted once
   everyone agrees on the proposed solution.
2. If alternative solutions are proposed in comments they may not get
   the amount of attention that they deserve.
3. It is seen as the responsibility of the design doc author to pick up
   newly suggested alternative solutions and include them into the
   design doc, but it's hard for the author to parse proposed solutions
   from review comments and describe them accurately and with details in
   the design doc.
4. If newly suggested alternative solutions get included into the design
   doc they likely end up in the 'Alternatives Considered' section,
   which makes them look less favored than the solution that was
   initally advertised in the design doc.
5. Picking up a newly suggested solution as the new main solution
   requires rewriting large parts of the design doc (hence there may be
   some resistence against doing this).
6. There may be a tendency to favor the initially proposed solution
   since more work was going into it and alternative solutions are only
   briefly described.
7. Unrelated issues that are identified in design discussions tend to be
   ignored and forgotten.

Our goal with design discussions was to collaborate as much as possible
and to write design docs together, in an iterative manner. With the
current process and template this is not working well. To improve this
we suggest to split design docs into multiple files that can be written
and refined by several persons in parallel:

* index.md:
  Entry file that links to the files below.
* use-cases.md:
  Describes the use-cases, acceptance criteria and background.
* solution-<n>.md:
  Each possible solution (with the pros and cons, and implementation
  details) is described in a separate file.
* conclusion.md:
  Describes the conclusion of the design discussion.

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.
* All possible solutions are fairly discussed with their pros and cons,
  and treated equally until a decision is made.
* Unrelated issues that are identified during discussions are extracted
  into new design docs (initially consisting only of an index.md and a
  use-cases.md file).
* 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.).

In addition some aspects of the documentation which were outdated have
been adapted to reality:

* Design docs are written in Markdown, not Asciidoc (hence the templates
  were migrated).
* Design docs are reviewed and stored in the homepage repo, not in the
  gerrit repo.

Furthermore some minor improvements were done:

* It is now recommended to use the 'dir' query operator to watch
  design doc changes ('dir:pages/design-docs'), since it's more reliable
  than the 'hashtag' operator which was suggested before since people
  tend to forget to set this hashtag.
* Call out in the template for use-cases that Google-specific uses cases
  should be clearly marked as such (the Google setup is pretty different
  and not making this transparent can confuse readers).
* The design docs now talk about use-cases and acceptance criteria
  instead of objectives, since formulating use-cases forces the author
  to think from the users perspective and it's easier for reader to
  understand how users are affected.
* The period in which the ESC is expected to comment on newly proposed
  features was increased to 14 calendar days. This allows the ESC to
  discuss the proposal in the ESC meeting, which happens bi-weekly,
  before commenting on it.

Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: I401d5ec21ff2b568dab7346db212c9166537dfa9
6 files changed
tree: a0c84e88b188f752f8823b42ecf898ab31e74af8
  1. .settings/
  2. antlr3/
  3. contrib/
  4. Documentation/
  5. java/
  6. javatests/
  7. lib/
  8. plugins/
  9. polygerrit-ui/
  10. prolog/
  11. prologtests/
  12. proto/
  13. resources/
  14. tools/
  15. webapp/
  16. .bazelproject
  17. .bazelrc
  18. .bazelversion
  19. .editorconfig
  20. .git-blame-ignore-revs
  21. .gitignore
  22. .gitmodules
  23. .mailmap
  24. .pydevproject
  25. BUILD
  26. COPYING
  27. INSTALL
  28. package.json
  29. README.md
  30. SUBMITTING_PATCHES
  31. version.bzl
  32. WORKSPACE
README.md

Gerrit Code Review

Gerrit is a code review and project management tool for Git based projects.

Build Status

Objective

Gerrit makes reviews easier by showing changes in a side-by-side display, and allowing inline comments to be added by any reviewer.

Gerrit simplifies Git based project maintainership by permitting any authorized user to submit changes to the master Git repository, rather than requiring all approved changes to be merged in by hand by the project maintainer.

Documentation

For information about how to install and use Gerrit, refer to the documentation.

Source

Our canonical Git repository is located on googlesource.com. There is a mirror of the repository on Github.

Reporting bugs

Please report bugs on the issue tracker.

Contribute

Gerrit is the work of hundreds of contributors. We appreciate your help!

Please read the contribution guidelines.

Note that we do not accept Pull Requests via the Github mirror.

Getting in contact

The Developer Mailing list is repo-discuss on Google Groups.

License

Gerrit is provided under the Apache License 2.0.

Build

Install Bazel and run the following:

    git clone --recurse-submodules https://gerrit.googlesource.com/gerrit
    cd gerrit && bazel build release

Install binary packages (Deb/Rpm)

The instruction how to configure GerritForge/BinTray repositories is here

On Debian/Ubuntu run:

    apt-get update & apt-get install gerrit=<version>-<release>

NOTE: release is a counter that starts with 1 and indicates the number of packages that have been released with the same version of the software.

On CentOS/RedHat run:

    yum clean all && yum install gerrit-<version>[-<release>]

On Fedora run:

    dnf clean all && dnf install gerrit-<version>[-<release>]

Use pre-built Gerrit images on Docker

Docker images of Gerrit are available on DockerHub

To run a CentOS 7 based Gerrit image:

    docker run -p 8080:8080 gerritforge/gerrit-centos7[:version]

To run a Ubuntu 15.04 based Gerrit image:

    docker run -p 8080:8080 gerritforge/gerrit-ubuntu15.04[:version]

NOTE: release is optional. Last released package of the version is installed if the release number is omitted.