There has been a lot of great discussion and airing-out around blueprint and 
merge process.  I think some good points have been raised on all sides.  I'd 
like to weigh in with some perspective-changing suggestions about how we can 
manage specs and blueprints that I think everyone will be happy with.

Basically we are all in the process of learning how to manage a large 
open-source project with 100+ developers, and I think managing a group that 
large by throwing everyone into a pool and hoping that all of the developers 
can collaborate effectively is a bit optimistic.  The suggestions that I 
outline below are not radical changes from how we are currently doing things, 
but hopefully it will help clarify the process.

Blueprints

People have extolled the value of blueprints many times, and I agree that they 
are very valuable.  But I think blueprints are much more valuable from a 
project management perspective than they are from an 'in-the-weeds' coding 
perspective.

I would suggest that blueprints are used to give a broad overview of an 
intended feature and enough technical information for the PTL and other teams 
to ensure that work isn't being duplicated.  Since we all work in teams, I 
think it is reasonable to expect every team to have a contact person that is 
responsible for ensuring that the team's blueprints are up-to-date with what 
they are actually working on.  Internal to the team this can be managed however 
they see fit.  It can be offloaded to individual developers or handled by a 
project manager, etc.

If we can all strive to follow this limited use of blueprints, I think it gives 
us the advantages that they provide for project management without putting too 
much strain on the developers.

Specs

Detailed specs beyond a brief technical overview should not be required in all 
cases.  It is strongly recommended (but not required) for a team to make 
available any internal specifications that they are using.  For small features, 
a simple link to a public branch is enough.

Detailed Specs should be required in the following cases:
 * A large feature that touches a lot of the code
 * Code that will need multiple merge proposals
 * Features that are being worked on by multiple teams
 * A feature that is blocking features by other teams.

I think we could 

Branches

Teams should be encouraged to keep their branches in the public as work goes 
on.  This allows curious community members to drill down into the current 
development and see what is going on.  This is especially important for teams 
using agile development.

Merge

Merges should be evaluated on merit.  If we get a large feature without an 
associated blueprint/spec, we can help educate the developer on the blueprint / 
spec process, but i don't think we should block merging if the feature is well 
designed and tested.  Obviously if the feature interferes with other blueprints 
in the pipeline, we can block it.



In conclusion, I strongly agree with soren's comment that the core developers 
should be following the suggested process, and I will mea culpa in my own 
avoidance of blueprints.  I think a lot of the issues the developers have had 
are due to a feeling that it is a) complicated and b) not valuable.  Hopefully 
with the understanding of the value that has been provided in this thread and 
the clarification and suggestions I've provided, we can all improve our 
teamwork.

Please let me know if I've missed anything.

Vish
_______________________________________________
Mailing list: https://launchpad.net/~openstack
Post to     : openstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openstack
More help   : https://help.launchpad.net/ListHelp

Reply via email to