The company I currently work with recently made the transition from Basecamp to ActiveCollab. Reasons? We wanted more flexibility, the source code, and ActiveCollab offers more features that were of interest to us.
There are some important tweaks that we would like to make to the system, having now used it for a little while. I started looking into module development, but was unable to find any evidence of being able to override any of the core/out-of-the-box modules. I recently posted this thread on ActiveCollab’s forum, and was really disappointed at the response.
Unlike Magento, which allows you to override pretty much anything, you cannot do overrides like that with ActiveCollab. It does allow you to hook into some events, but the flexibility for what you can actually change is very minimal. If you want to make changes, you have to actually change the existing modules. And, like you guessed, every time you want to do an upgrade, your changes will get wiped out.
You can of course write your own modules to add new functionality, which we will be exploring. But, if you want to modify existing functionality, be sure to document all the changes you make, as you may need to make those changes again and again with each upgrade.
Don’t get me wrong about ActiveCollab though. It is a nice system, and it is working well for the most part. There is just a very disappointing level of documentation for developers. As they said, ActiveCollab is a solution, not a platform/framework. We developers wish it wasn’t that way of course, but that is how they decided to do it.