I used Chef for server provisioning in AWS using the knife-aws plugin.
I also used Chef as a configuration management tool. It did all the setup and configuration for all the software packages for multiple servers. To make any updates to the server setups, all we did was update the recipes on the Chef Server.
Manual deployments came to a halt completely. Server provisioning became lightning fast. Chef-docker enabled us to have fewer sets of source code for different purposes. Configuration management was a breeze and all the servers were as good as immutable servers.
Configuration management is the most useful feature and is used by everyone. Provisioning is also an important feature. Since Chef collects a lot of inventory using Ohai, the inventory can also be used to integrate with third-party tools.
Although deployment can be done a lot better with other tools on the market, Chef also accomplishes this. However, remember that rollback can be problematic here.
In my presentation to SAP engineering, Ansible was chosen over Chef by all the admins for one reason: simplicity. If only Chef were easier to use and code, it would be used much more widely by the community.
Chef is an extremely amazing tool and has been extensively developed in the last couple of years. There are tons of plugins and integrations available for it, my favorite being the Chef-docker plugin.
I started with Chef as a QA engineer and wrote some beginner level recipes for some easy setups on AWS. I then worked on a bank project where I used the knife-vcloud plugin for Chef to automate provisioning for VMware vCloud. I did some initial evaluation, comparing Chef and Ansible for SAP to automate deployment on bare metal. In some recent projects, I wrote Chef recipes for deployment automation. I integrated it with Fabric/Python.
I would definitely rate Chef an eight out of 10. Although Chef is easy to code, it still has a little learning curve, since you need to know Ruby.