2008-12-17 03:36:51 UTC
Hi developers, we need to start stating this post is result of a team work between Heng Sin Low, Teo Sarca and Carlos Ruiz.
SOME HISTORY:
When we started adempiere there was a big issue to solve - we had very few developers.
So, we have had open doors for everyone - i.e. with one line bug fix you could obtain commit permissions on trunk.
Then we saw that was problematic - having newbies working in trunk without noticing what they're breaking.
So we tried a mentor strategy with two layers - trying to give more knowledge to newbies, and trying to have guaranteed peer review.
In some way this strategy worked - newbies learned asking to oldies.
In other way the strategy failed - the peer review was not implemented.
CURRENT SITUATION:
So, we have this situation now:
- a trunk with 79 registered developers with commit permissions (good!)
- developer base kept growing (really good!)
- contributions arriving at a pace that is over our capacity of review (not so good)
- peer review is not guaranteed (bad!)
- we don't have unit testings - so every day is more frequent that a commit breaks something and it pass unnoticed (really bad!)
- we don't have enough modularity to work some things isolated from trunk (something with we still need to live for a while)
Well - that's a good problem to solve - having too many resources and trying to organize the quality control.
On the other hand - we have established in this project that we allow:
- experimental branches with lazy rules
- "private" branches - ruled by the owner (team or developer)
- and we have the trunk with 79 potential developer and some rules established - *but hard to enforce in real life*
Well, trying to bring solutions for the current situation - Heng Sin Low, Teo Sarca and Carlos Ruiz met and agreed to create a "private" branch and put some strict rules on it.
***********
ABOUT NEW BRANCH:
So, we're planning to make this movement in immediate future (this is not subject to voting, is just a decision of a team to work in a "private" branch with own rules):
- we're going to create a branch (name still not defined - suggestions welcome)
- we're going to work on such branch, initially just the three of us - the number of committers of this branch will be very limited (still not decided the number)
- and we're planning to write some strict rules about gaining and losing commit permissions on this branch
- gaining commit permissions on this branch initially will be based on merits and just voted by branch committers
We're going to write some rules in order to allow feature requests to reach the new branch.
Initially we think that to reach new branch things must be contributed in a patch format in trackers. Depending on the rules and quality of trunk - it's possible that we can consider some process to integrate things passing first via trunk.
Further actions (non-immediate) on this new branch will be:
- Inventory of things that have changed in core respective to 340s
- testing cases on those things and fix or revert potential backward compatibility problems
- evaluate implement SaaS strategy on seed to demarcate specific limits in modules - and allow enabling/disabling whole modules
- isolate new modules (creating flags or parameters to keep backward compatibility)
- freeze this branch
- make a release (name to be defined) after we finish all the fixings and testings
***********
ABOUT TRUNK:
Well - trunk has some rules actually - but every day is harder to enforce them.
We can just SUGGEST some rules for trunk (asking for votation if you want).
And if you like them we can help to enforce them - but what we need to try is that rules are so clear that we don't need to keep fighting for them to be enforced.
In past days we have written some important rules in these forums, but additionally we think that we need to set these:
- all new features entering trunk must be tested first in an experimental / project / task branch
- to integrate in trunk it must be complete - documented - testeable
- it must support oracle and postgres and pl/java
- it must support java 5 and java 6
About code it must have:
- proper indentation
- proper usage of variable names
- all comments and variables in english
- no duplicated code
- using constants or MSysConfig instead of hardcoded things
As always: Bug fixing can be done directly - it needs to be straight
***********
ABOUT LIBERO STABILIZATION:
Trying to stabilize libero in trunk is a problem because there are more things entering and unstabilizing the whole picture (i.e. posterita integration)
Our SUGGESTION is to open a specific branch with specific goal for libero stabilization, owned and ruled by Victor and Teo.
This branch can be more open for developers - but still we suggest to set some QA rules.
Specially we recommend this branch will allow just commits towards stabilization goal and manufacturing related additions, nothing else must be added or changed there.
Anyways, we encourage to define the plan for libero stabilization - this is - to have detailed tasks in order to ease the way for contributors wanting to help on this goal.
***********
ABOUT EXPERIMENTAL AND OTHER BRANCHES:
We consider that "experimental" branch is not very good approach, because it lacks of specific goal.
Maybe if ruled or defined a goal it can serve for a purpose.
Instead we encourage to create branches with specific goals, this is for specific projects, tasks, teamwork, feature request, etc.
As we're organizing ourselves with some rules to obtain quality - we encourage others to make the same - maybe in future we can set up several teams working in parallel goals.
The rule in this case could be that things in branches need to pass correctly to trunk, this is, following all rules suggested for trunk.
Regards,
Heng Sin Low, Teo Sarca, Carlos Ruiz