[Erp5-dev] ERP5 Release System - proposal

Shrenik Bhura shrenik.bhura at intelliant.net
Fri Sep 28 08:47:29 CEST 2007


Hello,

It would be beneficial if this valuable discussion could be moved and 
continued at the Discussions section of the wiki.

I shall do it 24 hrs from now if all are fine with it. In case of any 
objections/thoughts please let me know prior to that.

Thanks,
SB

Yoshinori Okuji wrote:
> 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
>   

-- 
Shrenik Bhura, IntelliAnt CEO - Tel. +91(0)98310 33483
IntelliAnt: Consulting and Development of Free / Open Source Software
URL: http://www.intelliant.net




More information about the Erp5-dev mailing list