Your config file allows different deployment setting for branches, thus following Continuous Deployment practice - deploy everything. However it forces me to use Gitflow-like branching model, which I don’t like because it excessively couples stateless code with deployment, making rollbacks really hard.
I prefer Continuous Delivery model, where development is done on master branch (with feature branches), and only selected commits gets deployed to production environment. Imagine build pipelines such as on this image http://i.stack.imgur.com/pkYfs.jpg
Is it possible to set up CircleCI to support Continuous Delivery model with development on master branch and manually triggered deployments?