how to deploy from dev to staging and production?
Any deployment strategy can be broken down primarly into three main streams


Content(Node,taxonomies etc.)
Code
Configuration(Content types, Vocabularies etc.)


Content Deployment

I am assuming you are not targeting content deployment as part of your deployment. Its a complex peace based on your content strategy.

Configuration Deployment

Configuration Deployment, since content and configuration are kind of tightly coupled till Drupal 7, there is no way out of the box you can just keep the configurations in sync. But there are couple of modules which let you pull your configuration into code, features is definitely one and I believe most widely used module for deployment.
Sometime you can not get all the configurations just by features module, there is another helper module strongarm module which will let you exporting variable configurations by contributed module.

Just wanted to bring the keypoints for feature module.


Features module let you bring the configuration in code.
Either you update your feature or revert your feature based on if you want to get the configurations as in feature code and revert any manual override configuration we do feature revert, if you want to get the manual updated configuration in feature code we do feature update/recreate.
Feature module compares the configuration in code and configuration in database, based on it features allow to revert/update.


Code Deployment

For code any versioning tool will do the job.