Team Structure policy document

Added a new Fuel Policy Documents section with a new policy document on
Fuel Team Structure. Following additional changes were made to make this
patch build cleanly:

 * basepython = python to prevent tox on Debian from using python3
 * autogenerated doc/source/index.rst added to .gitignore
 * policy directory and symlink created and reflected in header template

Change-Id: I66149c3edcb99b8b6f130518fe6ca8239864036a
This commit is contained in:
Dmitry Borodaenko 2015-09-18 17:39:46 -07:00
parent 12ba603294
commit 61c4a87ea3
5 changed files with 225 additions and 3 deletions

3
.gitignore vendored
View File

@ -16,6 +16,7 @@ draft/
/.testrepository
/.tox
/doc/build
/doc/source/index.rst
ChangeLog
AUTHORS
AUTHORS

View File

@ -1,11 +1,20 @@
.. fuel-specs documentation master file
=====================
Fuel Policy Documents
=====================
.. toctree::
:glob:
:maxdepth: 1
policy/*
===========================
Fuel Project Specifications
===========================
Contents:
.. toctree::
:glob:
:maxdepth: 1

1
doc/source/policy Symbolic link
View File

@ -0,0 +1 @@
../../policy

209
policy/team-structure.rst Normal file
View File

@ -0,0 +1,209 @@
================
Team Structure
================
This document describes the structure of the Fuel team and how it is used to
organize code review, design discussions, and overall technical decision making
process in the Fuel project.
Problem Description
===================
Code review is the primary tool for day to day interactions between Fuel
contributors. Problems with code review process can be grouped into two
buckets.
It is hard to get code reviewed and merged:
1. It is hard to find subject matter experts and core reviewers for the
specific part of codebase, especially if you are new to the project.
2. Contributor sometimes receives contradicting opinions from different
reviewers, including cores.
3. Without an assigned core reviewer, it is hard to guide a feature through
architectural negotiations and code review process to landing the code into
master.
4. Some commits are waiting for a long time for a reviewer.
Quality of code review itself could be better:
5. Reviews are not thorough enough. Instead of examining the whole patch set
and identifying all problems in one shot, a reviewer can leave a -1 vote
after identifying only one minor problem. This increases number of patch
sets per commit, and demotivates contributors.
6. Some of the core reviewers decreased their involvement, and so number of
reviews has dropped dramatically. However, they still occasionally merge
code.
7. As a legacy of the past, we still have old core reviewers being able to
merge code in all Fuel repos. All new cores have core rights only for single
repo, which is their primary area of expertise.
Having well defined areas of ownership in Fuel components addreses most of
these problems: from making it easier to identify the right reviewers for your
code, to prioritizing code review work so that core reviewers can spend more
attention on smaller number of commits.
Proposed Policy
===============
Definitions
-----------
Contributor:
Submitter of a code review, who doesn't necessarily work on Fuel regularly,
may not be familiar with the team structure or with Fuel codebase.
Maintainer:
Subject matter expert in certain Fuel area of code, which they regularly
contribute to and review code of other contributors into this area. For
example: network checker or Nailgun agent would have their own lists of
maintainers.
List of maintainers for different parts of a Fuel git repository is
provided in a MAINTAINERS file at the top level of that repository. A
repository that contains multiple components may have multiple MAINTAINERS
files in the component subdirectories.
Core Reviewer:
Maintainer who has maintained high level of contribution and high quality
of code reviews and was promoted to core reviewers team by consensus of
other core reviewers of the same Fuel component.
Component Lead:
Defines architecture of a particular module or component in Fuel, resolves
technical disputes in their area of responsibility. All design specs that
impact a component must be approved by the corresponding component lead.
Fuel PTL:
Project Team Lead in its OpenStack standard definition. Delegates most of
the review and design work to component leads, resolves technical disputes
across components and for components that don't have dedicated component
leads.
Code Review Workflow
--------------------
Typical commit goes through the following code review stages:
0. Contributor makes sure their commit receives no negative votes from CI. When
possible, contributor also invites peers to review their commit, preferably
from different locations to help spread out the knowledge of the new code.
1. Contributor finds the maintainers for the areas of the code modified by
their commit in the MAINTAINERS file, and invites them to the review.
2. Once maintainer is ready to add +1 code review vote to the commit, they
invite core reviewers of the modified component to the review.
3. A commit that has a +2 vote from a core reviewer can be merged by another
core reviewer (may be the same core reviewer if the repository has only 2 or
less core reviewers), or by the component lead of the modified component.
Governance Process
------------------
Fuel PTL is elected twice a year following the same cycle and rules as other
OpenStack projects: all committers to all Fuel projects (fuel-* and
python-fuelclient) over the last year can vote and can self-nominate.
Fuel component leads are elected twice a year immediately after PTL elections,
following the same process. All committers to the component code repository as
defined below over the last year can vote and can self-nominate. Same person
can't be PTL and component lead in the same cycle.
Following Fuel components have elected leads:
* fuel-library (code: fuel-library)
* fuel-python (code: fuel-web except fuel-ui that currently lives under
fuel-web/nailgun/static)
In other repositories, there is no component leads, and technical decisions are
made by consensus of core reviewers, and disputes are resolved by Fuel PTL.
.. note::
All fuel-ui developers are also committers to fuel-web and are still
eligible to vote for the fuel-python component lead. However, fuel-ui itself
is not governed by the fuel-python component lead and follows the governance
process for repositories without component leads.
Core reviewers are approved by consensus of existing core reviewers, following
the same process as with other OpenStack projects. Core reviewers can
voluntarily step down, or be removed by consensus of existing core reviewers.
Separate core reviewers list is maintained for each Fuel git repository.
Maintainers are defined by the contents of the MAINTAINERS files in Fuel git
repositories, following the standard code review process. Any contributor can
propose an update of a MAINTAINERS file; a core reviewer can approve an update
that has a +2 from another core reviewer; if the update adds new maintainers,
it must also have +1 votes from all added maintainers.
Alternatives
============
Flat project structure
----------------------
Many other OpenStack projects keep a flat team structure: one elected PTL, and
a single list of core reviewers for the whole project. The advantage is a more
simple and straightforward governance process. The disadvantages are described
in the problem description.
Split Fuel into sub-projects
----------------------------
An alternative way to address the problem of insufficiently granular ownership
is to split Fuel into several sub-projects with independent governance. The
advantage is not having to introduce the role of a component lead that doesn't
exist in other OpenStack projects. The disadvantage is even more governance
overhead, and having to involve the Technical Committee in cross-sub-project
dispute resolution.
Implementation
==============
Author(s)
---------
Primary author: mihgen (Mike Scherbakov)
Other contributors: angdraug (Dmitry Borodaenko)
Milestones
----------
The current policy was put in place for Mitaka.
Work Items
----------
N/A
References
==========
* OpenStack Governance process:
https://wiki.openstack.org/wiki/Governance
* Code review process in Fuel and related issues (by Mike Scherbakov):
http://lists.openstack.org/pipermail/openstack-dev/2015-August/072406.html
* Fuel Review Inbox (by Dmitry Borodaenko):
http://git.openstack.org/cgit/stackforge/gerrit-dash-creator/tree/dashboards/fuel.dash
* Fuel contribution statistics (Stackalytics):
http://stackalytics.com/report/contribution/fuel-group/90
* Open Reviews for Fuel (by Russel Bryant):
http://russellbryant.net/openstack-stats/fuel-openreviews.html
.. note::
This work is licensed under a Creative Commons Attribution 3.0
Unported License.
http://creativecommons.org/licenses/by/3.0/legalcode

View File

@ -12,6 +12,8 @@ commands = python setup.py testr --slowest --testr-args='{posargs:}'
[testenv:venv]
commands = {posargs}
basepython = python
[testenv:docs]
commands = python setup.py build_sphinx
basepython = python