Development Lifecycle and Production deployments
- Business Planning
- Workshop and Design
- Developer Planning
- Build
- Testing/QA
- Deploy
- Ship
Business Planning
We work with an agile methodology and divide work into Slices
. These slices can contain one or two big features and several smaller features identified by business. Slices are divided into 8 week cycles with a two week period between slices where we monitor and iron out any bugs.
Workshop and Design
Before a feature can form part of a Slice, stakeholders will plan out the feature and determine what the requirements are. Several workshops are held where designers and engineers are included, and we go into further detail on the feature, establish what is required and rough estimates are given. This process is documented using Miro which is available to the entire organisation.
Developer Planning
Once workshops are completed and most of the details are fleshed out, a feature will form part of a Slice. Developers will then usually whiteboard through an Event Storming session. All requirements and details are fleshed out in a Github issue.
Build
Based off the github issue/s, we divide the work into units and assign them to individuals. All work is unit tested, code reviewed and run through a CI server. Please see our Github workflow in the Source control section.
Deploy
QA testing is done in the production environment when deployed, but isolated to QA testers only. We do this by exposing api calls to a QA client only, then once happy, we can roll out to everyone. Testing in production is not suitable for all companies, however, we do this because we are confident in our architecture. It is also important to note that when deploying, nothing is rolled out unless unit tested and code reviewed.
Here are a few great articles on why you should be testing in production:
- https://saucelabs.com/blog/why-you-should-be-testing-in-production
- https://martinfowler.com/articles/qa-in-production.html
But to highlight why we go this route:
- Our tools are resilient and fault tolerant, we can recover from unexpected events without loss of functionality and data.
- We have great production monitoring tools (LogDNA and Sentry) and we can apply fixes as they happen.
- Testing with production data gives us better insight into features we roll out and how the system actually performs.
- QA/Staging environments often don't pick up issues you wouldn't pick up with unit testing. It's also a different environment with different metrics and monitoring and not a true reflection of what happens live.
In future we would like to set up Canary deployments, which would be rolling out a new feature to a select few clients before rolling out to everyone.
Ship
Once QA testing is done we roll out to everyone. Code is then tagged with a version number and the Github issue is closed.
Monitoring
Monitoring and uptime is monitored daily by the engineering department. All errors are sent to us on Slack as and when they happen and we resolve them immediately.
Additional info
We have a weekly status meeting with any stakeholder who is interested. Here we give an update on the progress we've made for the week, what - if any - impediments were experienced, and if we have anything new to show, we demo it.
Product development has a lot of what ifs
and that's unexpected
moments, but this should give a rough overview of how work is delivered.