Every now and again I'll put my mentor hat on and attempt to communicate some of the "good practice" stuff I've seen in other ASF projects. Here's one such post on consensus building.

# Making Decisions

In ASF projects we don't like to vote. We reserve that for things that need official approval for legal or process reasons (e.g. a release, a new committer). Most of the time we work with consensus building.

## Lazy Consensus

What this means is that if you are convinced you know what the communities consensus on an issue is you just assume that you already have consensus and get on with the work. This is called "lazy consensus." You don't have to call a vote to get approval you just assume you have it unless someone says otherwise.

We have a time machine (SVN) so as long as you commit early and often the community has plenty of opportunity to indicate that they do not agree with the approach. When you believe you can operate on lazy consensus just get on with it, but be prepared to roll back work if a valid objection is raised.

The key thing about lazy consensus is that it's easier for people to agree by doing nothing than it is for them to object by providing an alternative. This has two effects, firstly people are less likely to object just for the sake of it and secondly it cuts down on the amount of unnecessary traffic.

Lazy consensus stops us waiting for a decision before proceeding. However, it does require everyone who cares to watch what is happening. Objecting to far down the road will cause upset, but objecting (or asking for clarification of intent) early is likely to be greeted with relief that someone is checking on our work.

People may choose to indicate their support for the actions taken with a +1 mail - quick and easy to read and reassuring for the implementer, However, remember, in a lazy consensus world silence is support, noise is objection.

## Consensus Building

In some cases there is no obvious path to take, or you might be a new community, or a new member of an existing community. In these cases people will often need to build consensus by making proposals and eliciting responses. This is just fine too.

The confusing thing in the ASF is that some people (like me) when given one or more options will use the same notation to indicate their preferences as they would use in a formal vote. Knowing when something is a vote and when it is a preference is important. It's easy to tell though, if the subject does not have "[Vote]" at the start then it's just an opinion.

The notation used is "+1", "-1" and "0". It's also common to see "+0" and "-0".

So, what do these notations mean?

+1 means "I agree with this and will help make it happen"

+0 means "I agree with this but probably won't make it happen, so my opinion is not that important"

-0 means "I don't agree with this, but I'm offering no alternative so my opinion is not that important"

-1 means "I don't agree and I am offering an alternative that I am able to help implement"

Many people will use fractions to indicate the strength of their feelings, e.g. "+0.5". Some will even indicate this is a "no brainer" with something like "+1000".

The important thing is that this is not an exact science. It's just a shorthand way of communicating strength of feeling.

Not everyone does this, but I do. the reasons I like it is because when someone wants to summarise a thread discussing the proposal they can mentally add up the strength of feeling of the community and decide if there is consensus.

Once there is a consensus building people can proceed with the work under the lazy consensus model.

## Stating Lazy Consensus

Sometimes you will believe a specific action to be the correct one for the community but are not sure enough to proceed with the work under the lazy consensus model. In these circumstances you can state Lazy Consensus is in operation.

What this means is that you make a proposal and state that you will start implementing it in 72hours unless someone objects.

In this approach you are not requiring people to explicitly support your actions but are still allowing space for objections and corrections to the proposal. Again, most people are happy for you to do their work for them and thus in many cases there will be no objection.

People may choose to indicate their willingness to help implement the proposal with a +1 mail - quick and easy to read and reassuring for the proposer, However, remember, in a lazy consensus world silence is support, noise is objection.

## Voting

Very occasionally a "feel" for consensus is not enough. Sometimes we need to have a measurable consensus. For example, when voting in new committers or releases. We use the same system of notation for this. the only difference is you can't use fractions or "+/-0".

In a vote things mean:

+1 - yes I agree
 0 - I have no strong opinion
-1 - I object on the following grounds

If you object you must support your objection and provide an alternative course of action that you are willing and able to implement (where appropriate).

## Putting it to the test

I propose making this a "good practice" guide for the Rave project. I stress is different from a required behaviour - individuals will find their own way, but I suggest this practice has been shown to work in a great many ASF projects and thus is a model I will be using here.

If nobody objects in the next 72 hours or so I will put an (edited) version of this mail on your website on a "consensus building" page.

Ross

On 07/04/2011 10:36, Ross Gardler wrote:
My preference is Ant/Ivy (maybe EasyAnt not used that yet). It is much more 
flexible than Maven (or is that just because I know I well).   But...

I do not object to Maven as long as someone else is available to maintain it 
and use it properly. I can maintain Ant, I need to learn about Maven.

So,
-0 Maven
+0 Ant + Ivy (EasyAnt?)

Ross

Sent from my mobile device.

On 7 Apr 2011, at 09:50, Ate Douma<[email protected]>  wrote:

As we're about to bootstrap the new Rave code base, it would be good to decide 
now what build engine we will use. This choice will have impact on how we 
structure and configure our source tree, build, test and integration 
environments.

As a Java based project I think we have three options:
- Ant
- Ant/Ivy
- Maven

OSEC is Ant based, OGCE, SURFNet and Shindig are Maven based, Wookie uses 
Ant/Ivy.

I have a strong preference to use Maven as I'm using that for almost every 
other project already and IMO has nowadays the strongest (automated) ASF 
infrastructure support. But for those not accustomed to Maven this might 
require some learning curve to get used to as Maven does have specific 
restrictions and requirements, not the least concerning structure and layout of 
the source tree itself.

So I'd like to hear the preference of the other developers.
If Ant or Ant/Ivy turns out to have the biggest support, I'm fine with that as 
well.

Ate

Reply via email to