We often encounter the situation where after a large, content-managed website has gone live, the client wishes to add sizeable new features and sections. Sometimes the site is planned to launch in phases from the outset. The new features and sections will often require new code that needs testing and approval by the client before it gets put live, and new data and content needs to be added to the database, or existing data needs amending, using the content management system, in order to test the code fully.
Sometimes it may take a significant amount of time for all the content required by the new developments, to be added to the database. During this period, the content of the site may be incomplete, incorrect or even the code may not work without the required content!
To reduce these undesirable consequences, we release the new code for testing on, and add content to, a copy of the site on our staging area. This uses a different database to the live site, so clients and our guys working on the project can test code and content, safely in the knowledge that the live site won’t be affected until we’re ready.
However, there is still an issue when it comes to migrating the content added to the staging database, to the live database. There would normally, inevitably have been changes made to the live site’s content between the time the copy was taken and put on staging, before the development started, and the time we’re ready to deploy the new code and content back onto the live site.
Content in databases is usually assigned a unique ID (incremental numbers) at the point it is added. When content in one section of the database relates to another piece of content in another section of the database, we use this ID to link the 2 pieces. These relationships can get incredibly complex, with many different pieces of content all being related to one another using their IDs.
If new content is added to both the live and the staging databases after the copy has been taken, both pieces of the content will be assigned the same ID, thus making it impossible to simply copy just the new content that has been added to the staging database, back to live when we are ready.
There is only one really fail-safe solution to this problem, which is to impose a content freeze on the live site, from the point at which the copy of the live database is taken to staging, to the point at which we copy it back to live. I.e. no content may be added, deleted or updated during this period.
However, we can minimise the impact of the freeze by excluding certain parts of the database, such as public member details and sections that drive data-driven parts of the site that are un-related to the sections being developed in the new release. Alternatively, we do not have to enforce a strict content freeze, i.e. small, urgent amendments can be made to the content, but these amendments will need to be remembered and re-done once the staging database is copied to live.
I’ve posted on this topic really just to let people know about the implications of post-launch releases of this size, and explain the reasons behind some of what us programmers do.
If you are a client and this situation applies to you, we will let you know in advance so you can make all urgent updates that you have in the pipeline before the content freeze needs be applied. If you have any questions, please contact your account manager.