< Five 0.3 released!
How to delay a Zope release >

[Comments] (10) Fixing the Zope release process:

In this article, I will identify problems with the Zope release strategy, attribute blame, propose solutions, and offer some hope for the future.

While this article contains criticism, I have great faith in the Zope developers, and I hope the criticsm will be considered constructive by those it targets. I also realize I'm part of this process myself -- this article is one way in which I try to participate.

Zope feature releases

Let's look at the release dates of Zope feature releases.

Zope 2.6.0 was released in october, 2002. Zope 2.7 was released in late may, 2004. It is now march, 2005, and there is no Zope 2.8 release yet.

On the Zope 3 front, Zope 3 developed started in 2001. The first release of Zope 3, Zope X3 3.0.0 appeared in november of 2004.

Note bugfix releases of Zope do appear on a regular basis, most recently thanks to the wonderful efforts of Andreas Jung and others. We can however safely say we do not see a very regular cycle of Zope feature releases.

Zope release announcements

Let's now look at a brief history of Zope release announcements. Some of these were made in an informal mailing list setting, others during more formal settings such as a conference.

In november 2003, we got the following signal from Jim Fulton:

We want Zope 2.8 to happen as soon as possible, so we can start working on Zope 2.9. Zope 2.9 will be the release that incorprates major parts of Zope 3.

In december 2003, we heard more (mail to zope3-dev by Jim Fulton, about a sprint the following january):

Zope 2.9 will begin the transition to Zope 3 by making some features of Zope 3 available in Zope 2. This sprint will map out and begin to integrate these features.

On the Zope Development Roadmap, a presentation at PyCon 2004, in march 2004, the first release of Zope X3 was said be july of 2004 (with a question mark):

Final in July (?)

And Zope 2.8 is announced to be in quarter 3, 2004:

Q3 2004 (After X3.0)

For Zope X3.1, the release after Zope X3.0, we see the following on a wiki page:

Depending on community distributions, we are thinking about releasing X3.1 in December, 2004. This release will include several cleanups to the framework and feature the new Pluggable Authentication Service (PAS) and Workflow packages.

('distributions' is a typo for 'contributions')

In november 2004, we heard the following in the Zope 3 newsletter, from Jim Fulton:

After our initial release of Zope X3.0, we are beginning to contemplate an X3.1 release, possibly as early as January 2005.

Then, in early march 2005, we see the following post from Stephan Richter about the Zope X3.1 release:

Theoretically, this could be next week, but my experience from the X3.0 release tells me it will be more of the time scale of 2-3 months.

I wish I could give you a much narrower date range, but the community is currently too small to make sound predictions.

which puts back Zope X3.1 to may or july, 2005.

Something is wrong

The core software, Zope, that the Zope community relies on, is not evolving very quickly. In itself, too quick evolution of a mature system like Zope 2 is probably not very desirable. For Zope 3, at this stage in its evolution, a faster release cycle is desirable. In the case of both however, we need more regularity.

Why? Because irregularity and unpredictability discourage people from contributing to the Zope platform. Imagine you want to contribute a feature to Zope. You need this feature for a customer project to be released within a few months (which is the typical horizon for many projects in the Zope world). You think this feature is general enough to benefit many Zope developers, so you want to spread the benefit and the burden of maintaining it by contributing it to the Zope software itself.

But then you realize that adding this to Zope will not show up in any stable release for perhaps a year. Perhaps you can ask the lead developers of the project, but since they're wrong so often, you can't really believe them.

So what do you do? You decide not to contribute to Zope, but maintain your contribution yourself. Perhaps as a Zope product, or perhaps, worse, as a monkey patch. The community does not gain the fix, and you don't gain the input of others.

(ironically in the mail referenced I make a release prediction about what was to become Five which was way off, and I also claim I don't care about the Zope release cycle being slow -- I've since changed my mind)

Who to blame?

The easy thing is to blame the Zope core developers. But they're the ones actually doing the work, and doing their best, not paid by us, so that wouldn't be fair at all. When they make a release estimate, they're not lying; they make their honest best guess. So, Jim Fulton and all the others, thank you.

Who then? What do the core developers themselves say? Lack of resources is the most frequent explanation I see from them. If they had more resources, releases might come faster.

Since this is an open source project, a large resource is community contributions. And these are lacking. So the community is to blame itself; why whine about the lack of Zope releases? They should contribute!

We can't just turn around and blame the community however. For one, the community has in fact contributed significantly to development of Zope, for instance by hosting a whole series of Zope 3 sprints. There should be more community activity in the form of feature additions and bug fixes, but we've just given an important reason of why we're not seeing more of this -- lack of regular releases!

We're in a chicken and egg situation. Regular releases drive contributions, and contributions drive regular releases. We need to get out of this trap.

Wait a moment -- do more contribution in fact drive regular releases? No, not necessarily. The process needs to be in place to channel contributions the right way. Unstabilizing contributions shouldn't come just before a release, for instance, as in that case, the contribution will delay the release.

So let's not blame anyone; let's blame the process. Let's now look at how to fix it.

How to handle lack of resources

Lack of resources delay a release, but we also need to face it: there is always a lack of developer resources. Good developers experienced with a project are always scarce. Doing regular and predictable releases will hopefully attract more resources, but they'll never be sufficient, as human ambition always outstrips any resources

If you want to do a release, you need to manage these scarce resources and prioritize correctly, so that the release will happen. Without this management, developers will only tend develop more cool features, and never release anything.

Luckily, Zope isn't the first project with this problem. We have examples to study. One project that faced a very similar problem and solved it is the Gnome project. The problem and the solution were presented in this post in mid 2002, by Havoc Pennington. This quote applies to Zope as well as it does to Gnome:

There are two goals of a release strategy: to create stable releases, and to generate a lot of excitement and productive work that moves the software forward.

and this one does too:

If we get "stuck" on the stable branch and don't make the jump to unstable, then pressure builds to add features to stable, stable destabilizes, unstable stagnates and stops being usable because only a few people are using it, and it's all downhill from there. If we get stuck on the unstable branch, then we never provide anything to the majority of end users - we become useful to hackers/testers only.

Gnome has been on a time-based released plan since then, shipping new feature releases of the Gnome platform to end users regularly.

How to prioritize?

So, how does one prioritize matters to have releases happen on time? This is all well-known, though it can't hurt quickly repeating some concepts.

A special recommendation for Zope

One thing that repeatedly seems to have gone wrong with Zope in the past is setting a release date and sticking to it. I hope I have pointed out that this important. In my opinion, it should at times be more important than features, quality, or cleanups. By that I mean is that on a regular basis, the highest priority should be given to making a release happen on time, and everything else should be compromised to a certain extent to make this happen.

When you announce a release date, stick to it. Not announcing a release date or announcing it and then missing it by months are both bad options, as I hope to have explained convincingly in this article. Saying "When it's ready, it's ready", will inevitably delay releases almost indefinitely.

Hope for the future

Thanks to the efforts here at the Paris Zope 3/Five sprint, we may have given the final push to make the Zope 2.8 release possible. We hope to distribute Five along with it, which should finally help realize what was planned originally for Zope 2.9 in 2004.

For Zope 3, Jim has stated repeatedly that he intends to move to a time based release schedule. This is great! Jim, consider this article as a firm reminder. :)

I hope that our efforts here at the sprint will be followed up by a commitment of the various parties involved, such as the Silva, CPS and Plone developers, as well as Zope corporation to continue working together and to continue contributing on a regular basis. It's in all our best interest.

Filed under: , ,

Comments:

Posted by Andreas Jung at Thu Mar 17 2005 18:53

The Zope 2 development has currently two major problems:

- there some parts of the Zope core e.g. ZODB, Zope security
where only a *very* small number of people have a very deep detailed knownledge about how things work(maybe Jeremy, Tim, Jim and Dieter for ZODB). This implies that fixing hard problems can only be done by these people due to the complexity of the implementation.

- more people of the Z2 community are commited to projects like Plone. At lot of ongoing efforts belong into the Zope core or CMF but instead they are handled somewhere outside of the Zope core (maybe the Zope contributor agreement and IP question is a problem here?!).

As Z2 release manager I would love to have the virtual stick to urge people to make their contributions in time. As co-worker of Dieter I see that a lot of extensions to Zope and CMF are being made in our own company Zope version but they don't appear in the official Zope core.

Another (minor) problem that ties some resources are efforts to provide backward compatibility. In my opinion we should get rid of features and code that is actually obsolete, unmaintained or buggy: ZClasses, ZODB versions (which are already gone afaik), Gadfly, HelpSys...maybe some more. I don't think we need to support ancient stuff.

Andreas

Posted by Chui Tey at Fri Mar 18 2005 00:36

Since Zope is a platform, we actually expect it to move slowly, and in response to need. Supporting ancient stuff is also part of the platform's duty. Breaking apps are the lowest kind of respect one affords to the other developers who develop on top your platform. FWIW, the ZGDChart demo actually uses Gadfly. All the help in ZGDChart is in HelpSys. If Zope breaks it, I'll probably give up Zope and never come back.

Posted by Andreas Jung at Fri Mar 18 2005 06:59

There is always an alternative to for ancient subsystems. It is also the task of a programmer to adopt its software to new versions. HelpSys is something that I believe is used by only a small number of people. There are better ways
to provide documentation than through the HelpSys.

Posted by Martijn Faassen at Fri Mar 18 2005 09:59

On Zope moving slowly:

* I think Zope 2.x should indeed move deliberately. (Zope 3, at this stage, should move more quickly)

* but there is always room for improvement of Zope 2, and cooperation, and we don't see enough of that. We also need more for Zope 3.

* and other platforms will pass us by left and right if we move too slowly.

The best stick to have people contribute is to be able to set a release date and have the reputation for *sticking to it*. It is motivating in two ways:

* if you get your code in, you know it'll be released by date X. So less uncertainty and more motivation to contribute.

* if you *don't* get your code in before (date X - feature freeze time), you know it's only going to get in by the next release, so you better hurry and shift priorities for a bit; there's no infinite amount of time the process will wait for you.

Posted by Godefroid Chapelle at Fri Mar 18 2005 11:16

I'd like to mention a concrete example of the effects of fuzzy release cycle on contributions by modest community members.

I was ready to code on improving I18N by integrating z3 message ids in ZPT engine (summer 2003) for 2.7.

I was told it was too late to add new features to a soon to be released 2.7. Nevertheless, it took another 6 monthes before rc1 actually came out (January 2004).

Could I have plugged it in HEAD ? Well, at that time, 2.8 was supposed to be quickly out as well and with a fixed set of features. It's first alpha came out in October 2004 ;-)

This small work is still waiting on my TODO list and I wonder where and when I should do it.

Posted by Michael Hudson at Fri Mar 18 2005 12:01

Also, I think it really helps to lower the cost of releases. Automate as much as possible. Document the rest so thoroughly a trained monkey can do it.

Posted by Jens Vagelpohl at Mon Mar 21 2005 10:31

Excuse my chuckling - the decision to incorporate a huge wad of new stuff in 2.8 seems to go against several of the good guidelines proposed here. But it's too late now I guess :)

2.8 could have been a great "low risk" candidate for trying the "timed release" policy, which I think is an excellent policy. But with all the new stuff and inherent risks it's become a lot harder to keep it stable *and* support timed releases. I just wish the powers that be had stuck to the original plan and incorporated Z3 machinery in 2.9 instead :(

Posted by Tom Lazar at Mon Mar 21 2005 12:21

I would just like to chime in from the perspective of an 'end user' in regard to Zope. While your points seem certainly valid and relevant from the perspective of a contributing developer one should perhaps not forget that one of Zope's major assets is the large install- and userbase.

So while in theory I'm all for timebased release cycles I would just like to say "Yes, but only if you can maintain the high level of stability and (thus) 'customer satisfaction' that Zope has achieved."

Also, I've linked to this entry from my blog [1] in hope of getting some more 'end users' into this discussion ;-)

[1] http://tomster.org/blog/284

Posted by Martijn Faassen at Mon Mar 21 2005 18:40

Jens wrote:
> Excuse my chuckling - the decision to incorporate a huge
> wad of new stuff in 2.8 seems to go against several of the
> good guidelines proposed here. But it's too late now I
> guess :)

I agree it's extremely ironic; this was my main worry last week and I expressed it clearly at the sprint. A mitigating factor is that it's a distribution deal and it's not actually "new stuff" but bundling existing software (Zope X3.0 and Five), without adding features to them. This software also doesn't dig deep into Zope 2, so the stability impact should be very low. If you don't use the stuff, it shouldn't be there at all (but that's probably too optimistically spoken :).

Adding Five at this stage made me worry, but it's what motivated many of the developers to actually work on Zope 2.8 at the sprint. When I proposed just releasing Zope 2.8 without it, lots of people objected that it wasn't worth doing then... Actually it's still possible to do a plain Zope 2.8 release first and do Zope 2.9 later, but you'll have a lot of people to convince.

There appears to be a big pent-up demand for the Zope 3 stuff (bundled so it's easy to deploy), from a lot of the Zope communities. Zope 2.9 development was originally to have started in january of 2004, and Zope 2.8 was originally supposed to be released february of 2004 or so, so getting this stuff out in april or may 2005 isn't exactly premature... Trying 'time based' with Zope 2.8 is rather impossible at this stage. :)

The perspective of a release with new features in a reasonable time frame is what motivates people to contribute. I think time-based is the way to accomplish this but on the short term 2.8 should just be done and over with.

Posted by Martijn Faassen at Mon Mar 21 2005 18:50

> So while in theory I'm all for timebased release cycles I
> would just like to say "Yes, but only if you can maintain
> the high level of stability and (thus) 'customer
> satisfaction' that Zope has achieved."

Not all Zope releases have historically been equally stable. :)

I think getting a solid, stable release is more easy to accomplish if people actually are interested in working on the release, instead of just having it lingering forever, until the key people have time -- which they never will have. People will be interested to contribute to Zope if they know their work won't linger for an unspecified amount of time before they can benefit from it themselves.

There hasn't been a feature release of Zope 2.x since may last year. *That* release cycle was semi-frozen at least half a year before that -- 2.7 took forever to come out. I remember Stephan Richter talking about doing 2.7 in the summer of *2002*, and adding Zope 3 features to it. This was overambitious, but now it's 2005 and we're still not there. In the mean time the rest of the web development world isn't standing still.

Of course in that period there was a lot of innovation on the systems on top of Zope, and the core needs to be fairly stable, but we also created a lot of islands and reinvented lots of wheels that could've been in Zope long ago.


[Main]

Unless otherwise noted, all content licensed by Martijn Faassen
under a Creative Commons License.