A typical website desing process happens on several machines in parallel, particularly when multiple developers are involved. We are not yet following best practices in all these areas and should improve the overall workflow. Particularly drupal featurees module would make versioning and reusing of the code much less time consuming.
- Developing environment: every developer has a version of the website installed locally on their machine.
- Staging environment: This is online and serves as the 'stage' where the client can test the site
- Production environment: This is the actual web site, not the place to test out new things.
Best practices include using a VNS (Version Control System) to be able to roll back the code and using the Drush module: makes updaing drupal simpler via the command line.
Here are some good reads: