Agile development and deployment workflow
This series describes a development and deployment process optimized
for the needs of software-as-a-service in terms of cost structure,
agility, staging and test requirements. The resulting system will
tolerate the failure of a local hard drive and crashes of a machine -
physical or virtual. Offering good performance / low cost via Amazon's
EBS and EC2 services, the system will provide the ability to rollback
changes both on the deployed and development system (independently or
together) using Subversion.
You can enjoy instantaneous feedback when you are developing code
without affecting existing users of your website by using a two machine
development and deployment lifecycle. Deployment can be a 5 second
experience (as opposed to 5 minutes) using AppZero technology.
I have tried a number of lifecycle workflows for the development and
deployment of Drupal websites. In this series, I will describe a two
machine approach involving a local development and test machine and a
deployment machine. Deployment of files will use the Subversion Version
Control System; the local machine is Windows to make tools like
Photoshop convenient to use; the deployment machine is a Windows
machine from EC2; and we will use Apache, Drupal, and MySql.

The one-machine approach, topologically simplest, involves
developing directly on the deployed machine on the Internet. I've found
this approach, while seemingly simple, to have two serious deficiencies:
- developing a new feature for a site can often involve accidentally
breaking existing functionality or look-and-feel. This topology makes
it difficult to evolve a site without showing the public every
intermediate change.
- tools like Photoshop are not convenient to use on a remote basis
and ftp'ing files back and forth is a cumbersome process. Even text
editing on a remote machine incurs painful latencies.
For these two reasons, I advocate at least a two machine approach.
This allows you to develop on your local machine, disconnected from the
Internet if necessary, with all the tools you like, and deploying when
you desire. Of course, in a two machine topology approach, deployment
agility becomes paramount. The difference between 5 seconds to deploy
and 5 minutes makes the difference between wonderful and painful.