Features-based development allows multiple developers to collaboratively work on a Drupal project. Features are modules that define certain configuration (e.g. content types, views) in code so they can be version controlled. A "controller feature" acts as a central module to install/uninstall other features and track configuration changes through hook updates. This workflow separates content and settings, avoids data loss, and makes it easy to push changes between environments.
3. Real life example
Peter
Location: Barcelona, Spain
Plans for Friday evening: working on stuff.
Antonio
Location: Brussels, Belgium
Plans for Friday evening: couple of Belgian beers, he’ll work later.
8. Major drawbacks
• Not ideal for a distributed team
• Makes it difficult to push settings to production
• Content and settings are mixed in one db dump
• Easy to lose control
16. From DB to code and vice versa
$ # Dump your changes into code.
$ drush features-update feature_name
$ # Restore your changes into the db.
$ drush features-revert feature_name
17. Want to add a component to a feature?
1. add it to the .info file
2. $ drush features-update feature_name
18. Want to remove a component from a feature?
1. remove it from the .info file
2. $ drush features-update feature_name