I can't remember exactly when the concept of the three environments was introduced to me. It's been several years back now. It has taken me until fairly recently to fully utilize them in all projects I find that taking care to provision and utilize all three is critical to doing professional work. Let's review what they are.

Development

The development environment is strictly for development. It exists only on the computer of the developer. My personal preference is to use Vagrant as a platform for keeping the environment consistennt between all developers and to provide a development environment that more closely resembles the staging and production environments.

Staging

The staging environment seeks to resemble production as closely as possible. The main difference is simply that it's not production. If the site sends emails, for example, those would be collected for review but not sent to their recipients. Transactions process in a sandbox. The domain is private and perhaps the site requires HTTP authentication to gain access.

Production

Production is the real thing. This is the finished product. It's worth mentioning that without the two previous distinct environments, production could not be realized in the most reliable fashion.

So let's review. The developer builds features in their local development environment. Once changes are ready for review they get pushed to staging for testing, QA and client approval. If more changes are needed, the project bounces between staging and development until the release is ready. Once the release is approved the site gets pushed into production.