[Erp5-dev] ERP5 Release System - proposal

Yoshinori Okuji yo at nexedi.com
Thu Sep 27 23:49:40 CEST 2007


Hello Łukasz,

On Thursday 27 September 2007 12:21, Łukasz Nowak wrote:
> We present our idea how to organise release management for ERP5. We
> would like to know your opinion about this idea. Any constructive
> comments as well as criticism are welcome. We are making this proposal
> in good faith - to provide the best possible solution in implementing
> and development of ERP5 system, to give as much as possible possibility
> to arise community of skilled developers around such great project as
> ERP5 is itself.

First of all, I would like to thank you for writing this proposal. I highly 
appreciate that you have made significant effort towards a better maintenance 
process.

Let me describe how Nexedi has been maintaining the code, and succeeding in 
implementing customers' projects so far:

- All the code base, including Business Templates, unit tests, functional 
tests, and many other types of tools, required for generic ERP5, has been 
always published on the subversion repository. No permission is required to 
access the source code at any time. Everything is immediately open to anybody 
in the world freely. This way, more people can take part in the reviewing 
process, and facilitating contribution. Also, developers recognize more 
responsibility for the quality, because of the potential risk.

- All the test results are sent to the public mailing list erp5-report every 
day. People are free to check for the current status in the cutting-edge 
development, thus it is easy to determine the latest stable revision from the 
history of reports. If a result is good, but the system is still unstable, 
this only means that we lack tests. Such tests should be complemented as soon 
as possible, and contribution is very welcome.

- Chanages are, in principle, peer-reviewed. Only trivial changes, such as 
fixing a typo, do not require such a review. Some people are not allowed to 
directly check in changes, when we still don't know the quality level of code 
produced by them. Once a person proves that she has a good skill, we give 
more permissions to her, so that we will not prevent her work. However, even 
experienced developers, such as me and Jean-Paul, need a peer-review, before 
committing a significant change. This way, although it may not be perfect, 
the quality of software is kept acceptally good all the time. Note that I 
have been using the same policy in another Free Software project for many 
years successfully.

- Backward compatibility is respected all the time. We break backward 
compatibility, only if it is inevitable. Incompatibility is an evil, because 
it produces too much work at a time when upgrading a system. We have been 
publishing the information on incompatibility we made in the public wiki at 
www.erp5.org, so that others will not get troubled. Still, we are always 
trying to reduce incompatibility, and only deprecate old usage.

- Code base used for a customer's project is taken out of the public 
subversion repository, under the control by a project manager. A decision is 
made mostly based on the status of unit tests and functional tests, but also 
with reviwing recent changes of the code, because some kind of problems may 
not be very visible only with automatic testing. Then, the code base is 
upgraded from time to time (the frequency depends on the constraints in a 
project) so that bug fixes and feature enchancement are incorporated. Again, 
the decision of which revision should be taken is based on the same criteria 
as above, as well as project conditions in some cases. This way, we can 
implement a stable system without much trouble.

As the technical leader of ERP5, I have been thinking of how to make releases 
for some years, in a way that the maintenance cost would be negligible, and 
woouldn't disturb development and contribution. The important questions are: 
When and How. I consider that there is no question about "Why". As you 
pointed out, releases make things more apparent and visible, so they are 
definitely nice to have.

Here are some of my ideas:

- When

In my understanding, there are three different ways to manage the timings of 
making releases.

One of them is feature-basis. When something significant is made, a new 
release is published. This is often used in proprietary software products for 
marketing purpose. Then, bug fixes are provided only in the form of patches. 
In Open Source development, this does not make sense very much, since patches 
can be included from the beginning. Instead, feature enhancement increments a 
major version. For now, I am not talking about how to name versions, so I 
don't take this way into consideration any more.

Another is regularity-basis. If I understand correctly, this is the same as 
your suggestion. In this scheme, releases are made in the same frequency, no 
matter whatever is happening. The advantage is that it is guaranteed that the 
realtime characteristics of releases against the head is quite good, that is, 
the distribution of delays behind the head is minimized. However, this way 
has a critical drawback that it does not reflect the reality of development. 
Sometimes a significant amount of development is performed in a short term, 
and sometimes not. As the nature of development, changes, in particular, 
which address new problems, tend to make software less stable. I will discuss 
this issue more below.

The other is quality-basis. A new release is made when the head has good 
quality of code. This is rather the reverse of the regularity-basis, so the 
pros/cons are also reversed. This proceeds with the reality of development, 
thus a delay can be potentially huge, but the quality of a release is well 
maintained.

Of course, in most projects, these ways are more or less mixed. Even if the 
quality-basis approach is taken, it does not make sense to make a new release 
every day, only because the quality is high. Even with the regularity-basis 
one, if the quality cannot meet criteria on time, a delay must be inserted to 
prevent catastrophy. Many factors should be taken into consideration to keep 
good release management.

As you might know, I have +10-year experience in many other Open Source/Free 
Software projects. And, I have tried both the regularity-basis and 
quality-basis ways. Overall, I have found that the quality-basis works far 
better, because, for example, when a problem can be resolved appropriately by 
a certain few people, and if they are not available for some reason for a 
while, the regularity gets broken so easily. Enforcing a release quickly, 
simply because of the policy, only produces unusable software.

Also, I have found that release management is far from trivial. Of course, as 
you suggested, we use the result of tests for making estimate on stability, 
but tests may not cover everything. It is sometimes because not all tests are 
implemented yet. It is sometimes because managers are not capable of 
determining whether software is stable enough or not. Especially in the 
preparation of a new release, bug fixes must be encouraged, but contributors 
have their own time constraints, and may not always follow a release cycle. 
In this case, managers must be able to define what bug fixes can be postponed 
with the idea of possible danger, and address problems by themselves, 
whenever necessary.

Another perspective is how to facilitate people to contribute. Usually, 
excellent developers want good feedback from managers. If they feel that 
managers fully understand their changes, and evaluate the contribution 
appropriately, they tend to help managers. Otherwise, they stop. This is not 
related to whether they are paid or not. For instance, although workers at 
Nexedi are paid, they are not always paid to contribute publicly. This part 
really depends on their feeling and will. If they think that managers would 
not understand their effort, they will just put changes locally and hide 
them. This has been always the same as in volunteer-based projects, so I am 
rather sure. Therefore, I believe that highly skilled persons must be 
selected as release managers for ERP5. Otherwise, release management will 
corrupt.

- How

There are two matters to consider: how many branches should be maintained or 
developed, and how long a branch should be maintained.

The simplest approach is to use a single trunk, and no other branch. This is 
the current way. The benefit is that all the effort heads towards one place, 
so the efficiency of development is very high. We do not need to worry about 
forking. The drawback is that the quality can be random along the time, no 
matter however much effort is put into stabilization.

The semi-simple approach is, as you proposed, to use a main trunk, and one 
branch to keep stability. And, to abandone older branches, once a new branch 
is created. This is somehow easy and realistic. The benefit is that, without 
having a lot of maintenance cost, stability is more or less ensured on a 
branch. The drawback is that this way additionally requires porting changes 
between a trunk and a branch, thus the development energy is scattered, and 
extra effort and time are required for the maintenance.

For now, I compare only these two. Again, I have experience with both 
approaches in the past. In short, I met difficulty in the latter approach, 
because the cost of porting patches was quite higher than I expected. After 
all, I gave it up, and I chose a single trunk method.

The way I did was the following: when I started to feel that I wanted to make 
a new version, for example, because we had a good set of new functionality, I 
forced people to stop writing a new feature, but encouraged people to test 
the head, and fix it. In the meantime, all patches sent to me were waited, 
and kept pending. Once I was satisified with the quality of code, I put a tag 
and release it. Then, I restarted the normal cycle of development, and 
integrating pending contribution.

Actually, this was so effective. All contributors understood that this was 
required, and accepted that patches were in a pending state. Besides stopping 
people to modify the head brutally, no extra cost was raised.

Surely, we must analyze if this way is effective for ERP5 as well, but I feel 
that this is more appropriate.

The reason is really the cost. Unfortuantely, nobody is a superman. I don't 
think it is a bad thing to have a stable branch, but at the same time, I 
doubt if it is feasible. If we use branching, another team for a branch would 
be necessary to be formed, just like the security team in Debian, because the 
backporting is surprisingly hard and time-consuming.

If anybody wants to perform the backporting job, I would appreciate very much. 
But be prepared that it is not trivial at all. One must be able to say what 
is a pure fix, and must be able to segregate safe parts of patches from a 
trunk, and adapt API usage, and so on. For now, I don't think this is 
feasible with the current size of our community, but I would be very happy if 
I am wrong.

So, at the moment, my suggestion is to use a single trunk. We have proven that 
writing tests for a good coverage makes projects successful, because tests 
always notify us of the current status, and what must be fixed, without any 
branching. Release managers should promote people to write more tests for 
missing parts, and negotiate with developers when next release should be 
made, so that others can collaborate.

Now, this mail is getting too long, but let me describe some more additional 
notes.

- It is a very good idea to describe API changes. We already do upgrade notes, 
but this is a nice complement.

- Upgrade tests must be automated very well, otherwise it is too costly. Not 
only unit tests, but also functional tests must be performed. Currently, the 
number of functional tests is not good enough, in particular about 
configuration-related stuff. Contribution is very welcome.

- Release management may not be independent of development management. Both 
are very tightly coupled, because releasing depends on the status of 
development. Only experts can perform this kind of job, so that other 
developes will listen to their advise.

- I myself prefer co-maintenance, that is, having multiple maintainers. This 
has a significant advantage in that even if one is not available (sick, busy, 
or whatever), the project will not be stalled. I was proposed to be a 
co-maintainer in a project, and it worked very well, so I'm proposing others 
to do the same with me these days. I like it. For ERP5, 2-3 persons will be 
good. Having too many is no good.

I hope my message would be useful for further discussion. Please let me know 
what you think.

Regards,
YO
-- 
Yoshinori Okuji, Nexedi CTO
Nexedi: Consulting and Development of Free / Open Source Software
http://www.nexedi.com
ERP5: Full Featured High End Open Source ERP
http://www.erp5.com
ERP5 Wiki: Developer Zone for ERP5 Community
http://www.erp5.org



More information about the Erp5-dev mailing list