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:
https://community.openatrium.com/documentation-en/node/1943
In my opinion, a typical development scenario requires two different tools ( in concept).
Tool 1: Automating compiling -if needed- copying from development to testing server, applying series of tests, and lastly, uploading to the version control system.
An excellent tool for this is Ant. It can do almost anything. It is command based and is support in Linux(obviously) and also in Windows. There is a plugin for Eclipse and other popular IDEs which allows you to execute the Ant script from inside them. One will have to know how to structure the script workflow well before using it.
Tool 1.1 (so it seems we will need 3 different tools !) Testing tool: Automation of testing is vital. A testing strategy that covers all aspects of the application is required, but automating this is needed to avoid death caused by routine and boring testing tasks. Testing is a bug topic, but a good approach usually does stress testing which simulates a hudge number of simultanious clicks, and user interaction simulation test, which basically is a script that simulates clicks and forms submission and access to different areas of the application. A good tool for this is HTTP Unit
Tool 2: Versioning tool: Linux kernel uses Git. That should say enough :). Of course there are many others, but the important point is to know how to structure the repository and when to apply branches and when to merge them.
Good reads ( and "watchings")
Excellent version control concepts and Git video: http://excess.org/article/2008/07/ogre-git-tutorial/
How to use Ant (For deploying Drupal )http://blog.sternthal.org/2008/12/19/using-ant-to-deploy-drupal/
A test tool for Drupal: http://drupal.org/project/simpletest
Happy reading š