Patterns for deploying webapp updates with no downtime
wvenable: I've got a pretty good setup going, most of the changes do not require any downtime at all.  Adding a table or column rarely requires any downtime (the existing code knows nothing about the table/column and continues on it's way) -- push the DB change first then the code.  Removing a table or column can work as well, push the code change first and then remove them.For more grueling changes (those that require data conversion), I still take down the site.  I script the changes and then take the site down, convert, deploy, bring the site back up.  Smaller changes take only a few minutes, longer changes can take hours.  However, the length of the downtime is inversely proportional to how frequently you need to do it.Sometimes taking the site down is appropriate.  For really big changes, users simply cannot continue to use the site and be unaffected.