I have a site with drupal commons distribution. I updated the existing content type to add some fields which made the feature in overriden state. Now, I am not sure the best practice to follow. Should I update the feature in profiles/commons/modules/... or is there another way to update the existing content type without changing the default code? Should I move all profile modules under sites/all/modules/...? Please help me to follow the best practices. Thank you.
Once your features are overridden you have stepped away from the distribution. Sure you could struggle with Features overrides and such but I really think you will end up in a stressful situation.
There might be update hooks in an upcoming release of Commons that reverts all your features, another administrator unknown to the overridden state of things might get terrified and ninja click revert on all overridden features.
I'm not so sure about features overrides also as a long term solution to keep you changes working. Let's say the original feature changes a lot, then your feature override might actually try to override things that no longer is a configuration. I haven't worked that much with the module so I can't say for sure, but it gets messy...
The effort you need to invest in each update of Commons is also depending on what kind of overrides you do. In one installation of Commons I have made a subtheme to what is shipped with Commons. So all changes goes in there and Features is left as is. There might be some work that needs to be done in each update of Commons to keep my sub theme good looking and up to date. But having to double check that all feature overrides etc play along with the update is a lot of work!
Another way is to simply say that Commons is a starting point to your platform. That you take what Commons have, override it all over. Then export what you have into features and say that's your version of Commons. It's a bit of work to get done but it is possible to export all components from a site into new features and then disable the old features. You are now detached :)
Last words :)
It's really hard to override a distribution and still benefit from updates. The distribution itself must sort of be compatible with it. If you feel you still benefit from keeping your overrides up to date in each update of Commons, go for it. If you're not ready to spend time in each update to verify your overrides, don't override or just do simple stuff in the theme or new modules. Or third go bananas and build your own thing but don't expect upgrade paths to play nice.
Once your features are overridden, then the configuration is moved from the files to the database (i.e. Drupal no longer looks for the configuration supplied by the feature module and uses your configuration in the DB). This means you can update the files without overriding your changes/additions (Just don't hit the revert button in the Features admin UI). That being said, if you changed/updated a content type, you will no longer be able to take advantage of any changes/updates that were made to the commons distro supplied content type. This is the same for views, contexts, rules, etc. Some devs will use the Features Override module to allow them to store their site specific overrides in a feature. This allows you to store your overrides in files and still leverage any changes/additions from the distro.