Hi folks --

Starting today, we're going to be making some minor but significant changes
to the way the Django core committer team "does business."

Put simply, we're changing the way we make decisions so that we can make
important policy and design calls more quickly and easily. In a nutshell:

* We're substantially reducing the number of decisions that Adrian and I
  need to make as BDFLs, thus removing us as a decision-making bottleneck.

* We're cutting back on our reliance on consensus for decision making,
  thus ensuring that decisions can be made in a timely manner.

* Finally -- and I think most importantly -- we're relaxing our policy on
  adding new core committers.

I've just made a couple of changes [1] to our "Contributing to Django"
guide [2] which explain these changes; read them if you want the short
explanation of the new rules.

[1] http://code.djangoproject.com/changeset/13962
[2] http://docs.djangoproject.com/en/dev/internals/contributing/

For those who've been following our development process closely -- and
calling for these kind of changes for quite some time -- I'll explain some
of the background and ramification in more detail below.

Some background
---------------

The discussion leading to these changes began with conversations Russ had
at DjangoCon. I wasn't there, but he reported that there was a repeated and
general dissatisfaction with the activity and responsiveness of the core
team. I don't think this came as a surprise to any of us. I, at least, have
felt like we've been lax in our responsibilities lately.

Now, I don't really care to examine the merits of individual complaints or
make excuses/explanations for the lack of time and attention the core
team's been paying. Any way you cut it, it's clear that the core team --
and Adrian and I in particular -- have some work to do to regain the
confidence and trust of the community.

It's clear this won't happen overnight, and I don't expect the changes
we're making today to magically grant us that confidence back. Instead, I
see these changes as the first step in a general process towards more
openness and inclusiveness in Django's development process.

Making decisions
----------------

One of the main reasons we've ended up in this situation is our decision
making process. When we first came up with Django's development process,
Django was a tiny project with a handful of developers and a
not-much-larger group of users. In that context, decision by consensus made
some sense, but it simply doesn't scale as the number of participants increases.

In particular, our reliance on consensus means that any developer can
accidentally execute a veto simply by not having time to participate in
discussions!

We've always had the "out" of appealing to Adrian or I for a BDFL decision.
However, that, too, did't scale as the number of decisions-to-be-made
increased (and our own spare time decreased).

So we've adopted a new, simple, streamlined voting process. This deals with
situations where we can't reach a quick consensus, and it cuts out the
requirement that Adrian and/or I rule on each and every decision.

This new process allows a proposal to be carried if:

* There are at least 3 "+1" votes from core committers.
* There are no "-1" votes from core committers.
* A BDFL hasn't issued a ruling on the issue.

Since this process allows any core committer to veto a proposal, any "-1"
votes (or BDFL vetos) should be accompanied by an explanation that explains
what it would take to convert that "-1" into at least a "+0".

More details are in the contributor doc, but in essence this means that we
can move forward without needing to wait for the entire core team to weigh
in. It does maintain our fairly skeptical attitude towards feature-creep by
allowing any one contributor to object if something rubs him/her the wrong
way, but it also forces that contributor to explain how she/he may be
overruled.

With luck, we'll see the pace of development speed up a bit as a result.

I should stress that this voting procedure DOES NOT replace community
discussion, nor does it remove entirely the desire for consensus. In other
words, this new process is a new way to "break ties" without having to ask
for a BDFL ruling. Whenever possible, we should continue to strive to reach
consensus on issues, and use the voting process only as a fallback where
consensus can't be reached for whatever reason. I, at least, plan to vote
"-1" if I see community discussion being skipped, or if I see no attempt at
consensus before a vote.

Committers
----------

It's been clear for quite some time that there's a really right bottleneck
at the top of the project: we simply don't have enough committers. The
issue of adding new ones comes up fairly regularly, but has never come to
any conclusion.

We've deliberately set the bar for new contributors quite high: new
committers required unanimous approval of all existing committers. We've
resisted lowering that bar out of a fear that the quality of Django would
degrade; we're quite proud that many users of Django run the latest trunk
revision in production.

However, like other decisions, requiring consensus simply stops scaling.
Over the last year we've discussed a number of candidates for commit
access, but many times failed to reach consensus often simply because not
every committer was familiar with the candidate's work. Looking back, we
all agree that we've failed to give the commit bit to some very deserving
people. It's not that these folks failed to clear the bar; it's that we set
the bar at an unobtainable height.

So we're lowering the bar a bit: from now on, we'll decide on new
committers using the same voting procedure described above. In essence,
instead of unanimity we'll now simply require 3 champions and no strong
votes against.

This doesn't represent a huge change from our existing approach. No core
committer will be committing big features without some sign-off and review
from at least one other committer. No bug fixes will go in if we're not
sure we've gotten it right. We'll continue to encourage new committers to
"start small" and work up towards larger commits as the rest of the team
gets to know their work.

All that we're doing is making a change in our "default" opinion about
proposed committers: instead of assuming that un-received votes are "no"
votes, we're assuming that most committers will be happy to see new blood,
forcing ourselves to articulate objections if they're serious.

We've already started discussing a group of new committers under this
policy, and the new process seems to be working out well. I expect we'll
see some new names on the core committer list shortly. Actually, they won't
be new names at all: anyone who's been around for a while will recognize
these names.

[If, when we add these new members, you don't see *your* name and think you
should have, please let one of us know so we can discuss it with you and
probably nominate you. Please do ask: we won't be able to intuit who's
interested.]

What's next
-----------

Again, this is just the start of an ongoing process.

For example, one of the things we haven't done well is to articulate
exactly what our criteria for the commit bit ought to be. Our "we know it
when we see it" policy doesn't set clear goals for community members who'd
like to work towards commit, and we need to do a better job mentoring
potential and new committers.

We're going to continue to work on these areas, and on improving our
process in general. If you have other suggestions please feel free to make
'em here -- we're listening.

Thank you!

Jacob

PS: And if anyone feels uncomfortable raising process issues -- related or
unrelated to the above -- please always feel free to contact me privately.

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-develop...@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to