Toward time-boxed development for KDE
Kevin Ottens
ervin at kde.org
Wed Jan 9 00:09:30 CET 2008
Hi all,
--------- Executive summary
In this mail I'll be advocating the way I think we should make our release
planning from now on. Some parts will look similar to what we were doing,
some won't. I think doing strict time-based release would be a mistake and I
think we should do ourselves a favor by having something more flexible.
If you don't care about what led me to this proposal you can skip the Intro
part freely.
--------- Intro
I'm taking a white sheet for my proposal regarding the release planning in
KDE. I think we ought to learn from the past (both the KDE3 times, and the
path we followed toward KDE 4.0) to get to our release planning right.
In my opinion several things worked for us so far:
- In the KDE 3 times, the fact that our release cycle wasn't strictly time
based, it was "roughly 9 months"
- Late during the KDE 4 development, regular checkpoints to give a beat to
the development (the BIC monday, and the nice period of betas each months)
There's probably more (being innovative, enough room to people to implement
features, etc.), but I think it was two strong points. And well, points which
I particularly noticed.
Now I also think we have a couple of things to fix:
- Communicating to the outside when our release is getting ready. I'm not
talking about marketing here, but release management of related projects
(like amarok for instance) or downstream like distros. That said marketing
would surely benefit from it too.
- Understanding our own release cycle (basically communicating to the inside
how we work), KDE3->KDE4 was totally different to what we were used to, and
now we have to go back to a more "KDE3-ish" way to do things. New people have
to adapt to that etc.
Once again there's probably more to fix (some lack of driving force during the
work to get to the release, exceptions and more exceptions, etc.), but the
other problems we have can basically be tracked down to the two ones I
mentionned.
--------- Proposal: time-boxed development
What I'm proposing is to use time-boxed development. In short, we're issuing
snapshots on a regular basis and we had to this criteria to determine which
snapshots will be betas, rcs and releases.
If we keep the "criteria" part out for a second, that means we can better
communicate to the outside and the inside already, because we have a clear
schedule for the snapshots. It's predictible and will happen regularly. Also,
it means we can get more feedback from people since they can grab the
snapshots and test.
Let's be more precise from now. Giving assumptions and definitions before
explaining the cycle.
I'll assume two things in the following:
- The snapshot frequency will be one month (I think we could go to three
weeks, but I find this a bit tight)
- Every module has a release coordinator, that builds on the new release team
which is a good thing IMO
Now we have two thing to manage: snapshot cycle and phases transition.
1) The snapshot cycle
That's the first thing I introduced, every month we tag the codebase to
produce a snapshot and publish the tarballs. For that, it means we're
freezing the codebase a couple of days every month to ensure that it fully
builds and pass all the tests (ok, I'm probably dreaming on this one... but
one day!).
2) The phases and their transition
a) Warmup
When we're opening the development toward a new release (like going toward
4.1) we enter the warmup phase. During this phase, the development is free
for all, and the release coordinators collects new features for their modules
(which makes the feature lists grow). During this phase, the snapshots are
not named.
Once we get the greenlight from all the coordinators that they got enough
input for their feature lists (one to two iterations in most case) we get to
the construction phase.
At that point, the coordinators determine the lists of features that should be
in the release for each module.
b) Construction
During this phase, only small features or the ones already begun during Warmup
are developed in trunk. Any other feature should be developed in a branch (or
playground for new components) and merged when ready.
Each snapshot is called an alpha. After each alpha, the coordinators can
decide to push back some of the features at a later release if there's
already enough new features in the module and the other ones still need too
much work.
Once we get the greenlight from all the coordinators that the features still
selected to be in the release are done, we enter the stabilization phase.
Only exception: for KDE N->KDE N+1 transition, the platform will go to
stabilization before the other modules.
c) Stabilization
From now, no new feature are developed in trunk. Only bugfixes, no new
messages, translations and artwork modifications[*] are allowed.
Each snapshot is called a beta.
When we get the greenlight from the coordinators that all the major bugs are
fixed we get to the releasing phase.
c) Releasing
From now, trunk is deep frozen. Only bugfixes and translations are allowed.
Each snapshot is called a release candidate.
When we get the greenlight from the coordinators that all the known bugs are
fixed we get to the maintenance phase.
d) Maintenance
We got the main release out. The branch for the release is created. Only
bugfixing and translations are allowed in this branch.
Each snapshot is called a point release.
So in short, the benefits I see in such a scheme:
- we're more predictible
- we keep flexibility for KDE5 without having to push for a completely
different cycle (it's basically just a longer feature list, in particular for
kdelibs, and having an earlier freeze for kdelibs)
- we share the load of the release management
- we get toward a release based on the current status of the codebase and
feature lists, not some external factors
- we're better at communicating what we're doing, and the status of the
codebase
* What's the deal with time?
Well, it's not forcing 6 months, 7 months, 8 months or whatever, and that's
perfectly intended. That said during the construction phase, it's obvious
that the ability for the release coordinators to push back features to the
next release is here to ensure we release as early as possible and as often
as possible. That means, that with experience from the coordinators we can
expect to be able to release at a regular pace while keeping the safety net
of flexibility (we don't want to publish anemic releases do we?).
--------- Why I don't buy "time-based release"
Mainly for two reasons.
First as pointed out at several place (and in particular in Martin Michlmayr
PhD), there's real concerns regarding innovation with such release planning.
That means that you would have to use a radically different cycle for major
versions, that's somehow what we did to get KDE 4.0 and we probably don't
want that anymore. People are change resistant, you break habits when you
change the type of release cycle. And we don't want to prevent innovation, do
we?
Second, to me it really looks like getting the problem backward. You're
forcing regular releases of a given period onto the project taking the risk
that it would never fit (too long, too short...). My take on the subject is
that if you have time-boxed development with the coordinators per module,
you'll tend to obtain regular releases. But this time the frequency will be
natural to the project, not forced to X months because you rolled a dice
upfront. Regularity ought to be the consequence, not the goal.
--------- Potential flaws and objections to this proposal
So far I listed only two:
* The extensive use of branches during construction. That said there's an open
door regarding the definition of "small" and it's up to the module
coordinator discretion IMO.
* The extensive number of snapshots produced, one every month. I know that can
be a tedious process, even if it's already partly automated. Now I think it
could be the right opportunity to:
- automate it even more, I'd bet there's room for improvement
- attract some people during the production of those snapshots to fix build
problems (that looks like a lot of junior jobs, and the bug squashing
sessions we had during the KDE 4.0 cycle attracted people doing only that)
--------- The End
Ok, now it's late and I'm tired, just hoping I didn't write too much bullshit
in there.
Comments are of course welcome. :-)
Regards.
[*] It means, no new artwork enter the release, but previously existing
artwork can still be modified and tuned.
--
Kévin 'ervin' Ottens, http://ervin.ipsquad.net
"Ni le maître sans disciple, Ni le disciple sans maître,
Ne font reculer l'ignorance."
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 194 bytes
Desc: This is a digitally signed message part.
Url : http://mail.kde.org/pipermail/release-team/attachments/20080109/ed805eac/attachment.pgp
More information about the release-team
mailing list