Our method has evolved to a situation where anybody is free to change anything to meet their particular needs, providing they do not break other code (or provide suitable work arounds and do the work themselves to fix things).
With practice, building generic interfaces that are applicable beyond the problem at hand for useful looking functions becomes second nature.
Along with freedom to change things without a lengthy negotiation process comes a responsibility to not break things at all. This means no committing broken code to CVS (unless with the agreement of those working on the same code).
Everybody becomes proficient with CVS branches after a while because of this.