Mike, speaking of automation, AFAIK Boris Pavlovic introduced some scripts in Rally which do basic preliminary check of review message, checking that it's formally correct. It should make life of reviewers a bit easier, you might want to introduce them in Fuel as well, if not yet. Regards, Igor Marnat
On Thu, Aug 27, 2015 at 5:37 PM, Aleksandr Didenko <adide...@mirantis.com> wrote: > Hi, > > I'm all in for any formalization and automation of review process. The only > concern that I see here is about core reviewers involvement metrics. If we > succeed in reducing the load on core reviewers, it will mean that core > reviewers will do less code reviews. This could lead to core reviewer > demotion. > >> - Contributor finds SME to review the code. Ideally, contributor can have >> his/her peers to help with code review first. Contributor doesn’t bother >> SME, if CI has -1 on a patch proposed > > I like the idea with adding reviewers automatically based on MAINTAINERS > file. In such case we can drop this ^^ part of instruction. It would be nice > if Jenkins could add reviewers after CI +1, or we can use gerrit dashboard > for SMEs to not waste their time on review that has not yet passed CI and > does not have +1 from other reviewers. > > Regards, > Alex > > > On Wed, Aug 19, 2015 at 11:31 AM, Mike Scherbakov <mscherba...@mirantis.com> > wrote: >> >> Hi all, >> let's discuss code review process in Fuel and what we can improve. For >> those who want to just have a quick context of this email, please check out >> presentation slides [5]. >> >> ** Issues ** >> Depending on a Fuel subproject, I'm aware of two buckets of issues with >> code review in Fuel: >> a) It is hard to get code reviewed and merged >> b) Quality of code review itself could be better >> >> First bucket: >> 1) It is hard to find subject matter experts who can help and core >> reviewers for the area of code, especially if you are new to the project >> 2) Contributor sometimes receives contradicting opinions from other >> reviewers, including cores >> 3) Assigned / responsible core reviewer is needed for a feature in order >> to help in architectural negotiations, guiding through, landing the code >> into master >> 4) Long wait time for getting code reviewed >> >> Quality-related items: >> 5) Not thorough enough, full review in one shot. For example, reviewer can >> put "-1" due to missed comma, but do not notice major gap in the code. It >> leads to many patch sets, and demotivation of contributors >> 6) Some of the core reviewers decreased their involvement, and so number >> of reviews has dropped dramatically. However, they still occasionally merge >> code. I propose to remove these cores, and get them back if their >> involvement is increased back again (I very rarely merge code, but I'm one >> of those to be removed from cores). This is standard practice in OpenStack >> community as well, see Neutron as example [4, line 270]. >> 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. For example, core team size >> for fuel-library is adidenko + whole fuel-core group [7]. In fact, there are >> just 4 "trusted" or real core reviewers in fuel-library, not the whole >> fuel-core group. >> >> These problems are not new to OpenStack and open source in general. You >> can find discussions about same and similar issues in [1], [2], [3]. >> >> >> ** Analysis of data ** >> In order to understand what can be improved, I mined the data at first. >> Main source of information was stackalytics.com. Please take a look at few >> graphs on slides 4-7 [5], built based on data from stackalytics. Major >> conclusions from these graphs: >> 1) Rather small number of core reviewers (in comparison with overall >> number of contributors) reviewing 40-60% of patch sets, depending on repo >> (40% fuel-library, 60% fuel-web). See slide #4. >> 2) Load on core reviewers in Fuel team is higher in average, if you >> compare it with some other OpenStack projects. Average load on core reviewer >> across Nova, Keystone, Neutron and Cinder is 2.5 reviews a day. In Fuel >> though it is 3.6 for fuel-web and 4.6 for fuel-library. See slide #6. >> 3) Statistics on how fast feedback on code proposed is provided: >> - fuel-library: 2095 total reviews in 30 days [13], 80 open reviews, >> average wait time for reviewer - 1d 1h [12] >> - fuel-web: 1789 total reviews in 30 days [14], 52 open reviews, average >> wait time for reviewer - 1d 17h [15] >> >> There is no need to have deep analysis on whether we have well defined >> areas of ownership in Fuel components or not: we don’t have it formally >> defined, and it’s not documented anywhere. So, finding a right core reviewer >> can be challenging task for a new contributor to Fuel, and this issue has to >> be addressed. >> >> >> ** Proposed solution ** >> According to stackalytics, for the whole fuel-group we had 262 reviewers >> with 24 core reviewers for the past 180 days [19]. I think that these >> numbers can be considered as high enough in order to think about structure >> in which code review process would be transparent, understandable and >> scalable. >> >> Let’s first agree on the terminology which I’d like to use. It can take >> pages of precise definitions, however in this email thread I’d like to focus >> on code review process more, and hopefully high level description of roles >> would be enough for now. >> - Contributor: new contributor, who doesn’t work on Fuel regularly and >> doesn’t know team structure (or full time Fuel developer, who just started >> his work on Fuel) >> - SME: subject matter expert of certain Fuel area of code, which he / she >> regularly contributes to and reviews code of other contributors into this >> area. Example: network checker or Nailgun agent. >> - Core Reviewer: expert in one or few parts of Fuel, who was promoted to >> Core Reviewers team thanks to the contribution, high rate of quality >> reviews. >> - Component Lead: The one who defines architecture of a particular module >> or component in Fuel, does majority of merges there, resolves conflicts >> between SMEs and / or contributors in the area of responsibility, if >> conflicts can’t be resolved by other means. Component Lead has to review all >> design specs in its parts where his/her component is under change. >> - Fuel PTL: Project Team Lead in its OpenStack standard definition [8], >> delegates most of the work to component leads, but helps in cases when >> resolution of conflicts between component leads is needed. A way to resolve >> conflicts and clear escalation path should help to resolve issue #2. I’d >> like to notice, that conflicts in a collaborative work is just normal >> phenomenon. Please see more on this at [11]. >> >> Fuel currently lacks formal SMEs and their areas of ownership, and >> component leads. So my suggestion is to address it separately. Some examples >> on how it is documented in different projects: OpenStack Rally [20], >> OpenStack Neutron [4, line 105], Docker [10]. Now, in order to solve some of >> the issues mentioned at the beginning, we need a structure which would have >> a leverage for it. According to the data analysis, load on core reviewers is >> extremely high. I think that first step has to be to figure out a way of >> offloading some work from them in order to ask for better results. Namely, I >> suggest to: >> a) identify component leads out of existing core reviewers >> b) ensure that component leads for large components like Nailgun or >> fuel-library don’t run features or major feature development, so they can >> focus on architecture of component, and majority of thorough core reviewers >> into component >> >> Now, I suggest to go even further and not to expect core reviewers to >> review patches which have not been yet reviewed by contributors’ peers >> (please see important of it at [17]), SME or which don’t yet have +1 from >> CI. In fact, this is the suggestion to adopt dictator-lieutenant delegation >> workflow [7]. To be precise, I would expect that: >> - Contributor finds SME to review the code. Ideally, contributor can have >> his/her peers to help with code review first. Contributor doesn’t bother >> SME, if CI has -1 on a patch proposed >> - SME reviews the code within SLA, which should be defined per component >> - Once SME has reviewed a code, Core Reviewer specialized on a component >> reviews the code within SLA. Review inbox [16, “Ready for Core Reviewers”] >> can help to find changesets to be reviewed / merged >> - If core reviewer has not landed the code yet, Component Lead merges >> patch within SLA defined (or declines to merge and provides explanation as >> part of review). >> >> SLA should be the driver of doing timely reviews, however we can’t allow >> to fast-track code into master suffering quality of review, just in order to >> meet SLA. I suggest to see metrics at every IRC weekly meeting, and based on >> data - ask for help in review core reviewers from other areas, or reset >> expectations of contributors / SMEs on how fast patches can be reviewed and >> merged (redefine SLA). >> >> This flow is represented on slides 11-14 [5]. SLAs should solve an issue >> #4 from the list, and align on expectations. Of course, SLAs defined have to >> be documented somewhere in public place. >> >> In order to have convenient and up to date documentation on who are SMEs >> and component owners for particular areas of code, I suggest similar schema >> to Google’s one [9] (if we can trust this source, but I like the idea >> anyway). For Fuel it can look like the following - each top-level directory >> of every repository has to have file “MAINTAINERS”, which must have list of >> SMEs and name of a Component Lead. Now, for every changeset proposed, >> Jenkins can be used to identify folders affected in order to get list of >> corresponding SMEs and add them to Gerrit review. This should be convenient >> notification for only those who maintain a particular area, and not a spam >> for everyone. Such a change should fully address issue #1 from the list. >> >> In order to help feature leads to drive the work, ensure that it can land >> to master by certain date and manage expectations across components >> properly, we need to identify for every feature, who is the contact point >> from core reviewers team in every component under change. This can be >> Component Lead or it can be delegated to some other trusted core reviewer. >> It is expected that assigned person will participate in periodic sync ups >> with feature team, consult how changes should be made in order to align with >> architecture, and find right SMEs to help with code review and/or expertise >> when needed. This should fully address issue #3. >> >> Quality-related issues #6 and #7 already have suggestions. Issue #5, about >> doing thorough review at first pass, needs close attention. PTL and >> Component Leads (once identified) have to have a right to remove members of >> core team, which do not comply to standards of quality in code review. There >> is a great checklist [18], which I’d encourage everyone to follow while >> writing code and doing code reviews. Also, there is a specific Fuel >> Python-related page [6], which may need to be updated. Accordingly, issues >> of such a kind with particular examples should be escalated to PTL. >> >> Thoughts? >> >> [1] >> http://lists.openstack.org/pipermail/openstack-dev/2015-June/065532.html >> [2] https://etherpad.openstack.org/p/liberty-cross-project-in-team-scaling >> [3] http://opensource.com/life/14/5/best-code-review-open-source-projects >> [4] >> http://git.openstack.org/cgit/openstack/neutron/tree/doc/source/policies/core-reviewers.rst >> [5] >> https://docs.google.com/presentation/d/1HMSovUxujOUwILPSjiuZHqAxo1TujQazA2yGHSsQC6U >> [6] https://wiki.openstack.org/wiki/Fuel/Code_Review_Rules >> [7] https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows >> [8] https://wiki.openstack.org/wiki/PTL_Guide >> [9] >> http://www.quora.com/What-is-Googles-internal-code-review-policy-process >> [10] https://github.com/docker/docker/blob/master/MAINTAINERS >> [11] https://adtmag.com/articles/2014/12/17/agile-conflict-resolution.aspx >> [12] http://stackalytics.com/report/reviews/fuel-library/open >> [13] http://stackalytics.com/report/contribution/fuel-library/30 >> [14] http://stackalytics.com/report/contribution/fuel-web/30 >> [15] http://stackalytics.com/report/reviews/fuel-web/open >> [16] http://bit.ly/1LjYO4t. Full link is available from Fuel wiki: >> wiki.openstack.org/wiki/Fuel >> [17] "You should probably be spending at least a couple of hours on code >> review every day. Not just because the number of code reviewers on a project >> has the greatest influence on its velocity, but also because its the best >> way to start building trust with your fellow contributors. If you can show >> yourself as thoughtful, committed and diligent through your code reviews, >> then other code reviewers will be much more inclined to prioritize your >> patches and less carefully scrutinize your work." >> https://blogs.gnome.org/markmc/2014/06/06/an-ideal-openstack-developer/ >> [18] >> https://developer.ibm.com/opentech/2015/03/27/checklist-performing-openstack-code-reviews/ >> [19] http://stackalytics.com/report/contribution/fuel-group/180 >> >> -- >> Mike Scherbakov >> #mihgen >> >> >> __________________________________________________________________________ >> OpenStack Development Mailing List (not for usage questions) >> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe >> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >> > > > __________________________________________________________________________ > OpenStack Development Mailing List (not for usage questions) > Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > __________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev