When using features to manage deployment, should I break my functionality into many little features or one big feature?
Make several little Features, split by conceptual layer.

Advantages:


Granularity when reviewing Overrides and performing Reverts — so you don't have to revert everything at once.
Modularity — even if you don't plan to reuse individual components, breaking things down into discrete modules will help with maintainability.


For deploying a single site from development to test to production, we use the following taxonomy (where "site" is replaced with a unique machinename for the site) —


site_types Feature — declares Content Types, Fields, ImageCache settings, User Roles
site_structure Feature — declares Contexts, Views, Menus and Menu Links, Blocks, User Permissions, Variables

depends on site_types Feature

site_content Feature — declares Nodes

depends on site_structure Feature



If there are multiple distinct site sections (for example, Public vs Private), consider splitting things up further:


site_types Feature
site_structure Feature — declares structural components common to both Public and Private

depends on site_types Feature

site_public_structure Feature

depends on site_types Feature

site_public_content Feature

depends on site_public_structure Feature

site_private_structure Feature

depends on site_types Feature

site_private_content Feature

depends on site_private_structure Feature