<p dir="ltr"><br>
On Aug 28, 2013 9:42 AM, "Shawn Hartsock" <<a href="mailto:hartsocks@vmware.com">hartsocks@vmware.com</a>> wrote:<br>
><br>
> tl;dr at the end... I can ramble on a bit.<br>
><br>
> I agree with Daniel.<br>
><br>
> I'm not a core reviewer, but I'm trying to think like one. Over the last few weeks I've divested myself of almost all coding tasks, instead trying to increase the size of the community that is actively contributing to my area of expertise. I have indeed gone batty! I've caught myself a few times, and the frustration of feeling like I couldn't contribute code even if I wanted to is getting to be a bit too much.<br>

><br>
> The common refrain I've heard is, "That's OpenSource" as if this is a natural state of affairs for OpenSource projects. I've been either on or around OpenSource projects for nearly 20 years at this point and I really feel this doesn't have to be the case. Any project is doomed to have an internal structure that mirrors the organization that maintains it. That means software beyond a certain scale becomes part engineering and part state-craft.<br>

><br>
> In OpenSource projects that I have worked on recently, the way scale was handled was to break up the project into pieces small enough for teams of 1 to 5 to handle. The core framework developers worked on exposing API to the plugin developers. Each plugin developer would then focus on how their plugin could expose both additional API and leverage framework API. Feedback went from the application developers to the plugin developers and up to the core developers. This whole divide-and-conquer strategy was aided by the fact that we could lean heavily on a custom dependency management and code/binary distribution system leveraged inside the framework itself. It meant that package structure and distribution could be controlled by the community directly to suit its needs. That makes a powerful combination for building a flexible system but requires a fair amount of infrastructure in code and hardware.<br>

><br>
> It wasn't a perfect solution. This strategy meant that an application or deployment became the coordination of plugins mixed at run-time. While efforts were made to test common combinations, it was impossible to test all combinations. That often meant people in the field were using combinations that nobody on official teams had ever considered. Because the plugins weren't on the same release cycle as the core framework (and even in different code repositories and release infrastructures) a plugin could release weekly or once every few years depending on its needs and sub-community.<br>

><br>
> There is a separate dysfunction you'll see if you go down this path. Core API must necessarily lead plugin implementation ... which means you sometimes get nonsense API with no backing. To solve this a few plugins are deemed "core" plugins and march in-step with the API release cycle. Then there's the added burden of longer backward compatibility cycles that necessarily stretch longer and longer leaving deprecated API lying around for years as plugin developers are coaxed into leaving them behind (and subsequent plugin users are coaxed to upgrade). Some things slow down while others speed up. The core API's evolution slows, the plugin/driver speeds up. Is that a fair trade off? It's a judgement call. No right answer.<br>

><br>
> In the end you trade one kind of problem for another and one kind of coordination for another. There's no clean answer that just works for this kind of problem and its why we have so many different kinds of governments in the world. Because, ultimately, that's what human coordination becomes if you don't watch out and "one size does not fit all".<br>

><br>
> Based on my experiences this last cycle, I think nova is pretty well broken down already. Each driver is practically its own little group, the scheduler is surprisingly well fenced off, as are cells. As for our sub-team I think we could have moved much faster if we had been able to approve our own driver blueprints some of which have been in review since May and others which have 30+ revisions updated every few days hoping for attention. It's part of why I moved to watching over people's work instead of doing my own and I now spend most of my time giving feedback to reviews other people are working on and seeking out expert opinions on other people's efforts.<br>
</p>
<p dir="ltr">Updating patches for attention often does the opposite for me.</p>
<p dir="ltr">When I see a patch set being revised every few days, that makes me think ( perhaps incorrectly) that the patch is still in active development and I am inclined to review something else.</p>
<p dir="ltr">On a related note, I really like when the developer adds a gerrit comment saying why the revision, that makes my life as a reviewer easier.</p>
<p dir="ltr">><br>
> It's not a pleasant place to be and every time I pick up something to work on I either get pulled away or someone else picks up the job and finishes before I can even get started. I imagine this is much like what it is to be a core developer and that this contest of interest is the same strain the core-reviewers feel. You end up picking your own work and neglecting others or falling on the sword so other people can do their work and doing none of your own. Frankly, I don't want to use this strategy next cycle because it is far too unsatisfying for me.<br>

><br>
> BTW:<br>
> Anyone interested in this on an academic level, most of these ideas I have are from vague recollections of college readings of the work of W. Edwards Deming, Coase theorem, and more humorously and directly: Conway's law. But, I don't do that for a living so I may not understand it too well. Mostly, I was interested in how to coordinate large numbers of developers.<br>

><br>
> tl;dr please don't create a reviewer caste (it's not fun), break the project into pieces, give the pieces autonomy... for me, that tends to be more fun.<br>
><br>
> # Shawn Hartsock<br>
><br>
> ----- Original Message -----<br>
> > From: "Robert Collins" <<a href="mailto:robertc@robertcollins.net">robertc@robertcollins.net</a>><br>
> > To: "Daniel P. Berrange" <<a href="mailto:berrange@redhat.com">berrange@redhat.com</a>><br>
> > Cc: "OpenStack Development Mailing List" <<a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.org</a>><br>
> > Sent: Wednesday, August 28, 2013 6:51:22 AM<br>
> > Subject: Re: [openstack-dev] [Nova] Frustrations with review wait times<br>
> ><br>
> > On 28 August 2013 22:39, Daniel P. Berrange <<a href="mailto:berrange@redhat.com">berrange@redhat.com</a>> wrote:<br>
> ><br>
> > > No, IIUC, Joshua was suggesting that core team members spend one cycle<br>
> > > doing reviews only, with no coding, and then reverse for the next cycle.<br>
> > > That is just far too coarse/crude. Core team members need to be free to<br>
> > > balance their time between reviews and coding work on an ongoing basis,<br>
> > > just as any other member of the community can.<br>
> ><br>
> > Oh! Yes, thats way too heavy.<br>
> ><br>
> > I do wonder about tweaking the balance more [or scaling the review<br>
> > team :)], but only-reviews would drive anyone batty.<br>
> ><br>
> > -Rob<br>
> ><br>
> > --<br>
> > Robert Collins <<a href="mailto:rbtcollins@hp.com">rbtcollins@hp.com</a>><br>
> > Distinguished Technologist<br>
> > HP Converged Cloud<br>
> ><br>
> > _______________________________________________<br>
> > OpenStack-dev mailing list<br>
> > <a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
> > <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
> ><br>
><br>
> _______________________________________________<br>
> OpenStack-dev mailing list<br>
> <a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
> <a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
</p>