5. Build a service that can be iterated and improved on a frequent basis
There will be three environments: dev, staging and live.
Deployment will be controlled by two main Git source control branches: develop and master.
The norm will be for bug fixes and completed feature branches to be committed to the develop branch.
A commit to the develop branch triggers build and deployment to the development environment, including automated regression tests.
To prepare a candidate release, the develop branch will be merged to master, so triggering build and deployment to the staging environment, including automated regression tests.
Once the staging build is ready and has passed all tests, a notification will be sent to initiate user acceptance testing.
Once the staging build has been manually verified, a human decision is made to trigger a live deployment.
Live deployment updates the build of both the public website and the private preview website.
The public site will work on a rolling update basis, whereby back-end component(s) will be retired gracefully and new requests will be served by the new build, without the need for a maintenance window.
The rolling update model serves two key purposes: continuous improvement and avoiding the need for out-of-hours maintenance. This ensures that changes to components can be deployed with confidence as soon as they are ready and reduces the burden of operational support.