You were mentioning that developer A produces version 1.0 of some C::A subclass for application Foo. Then, developer B comes along and upgrades that same C::A subclass to version 1.1 for application Bar. All of a sudden, application Foo doesn't work the same.
To me, each application should have its own subclass, even if that class is nothing more than
package Our::Web::Apps::Foo;
use base 'Our::Web::Apps';
1;
If only to avoid the problem that you're discussing.
My criteria for good software:
- Does it work?
- Can someone else come in, make a change, and be reasonably certain no bugs were introduced?