changes which pose a risk of corrupting the database
The framework we’re using has an Object Relational Model which means things in the database look and feel like class objects in the code. So changes there can be unit tested before even hitting the production or any database at that. We’re also able to introduce mock tests which supply a temporary in ram database filled with test data that we run automated test units on to verify we’re working as expected.
We’re also moving more to a 12 Factor application design model with Behavior Driven Development so this would be less than likely to be an issue at all but still an item that needs to be approved via the Pull Requests and change approval process.
yes I’m aware of how much that sounds like red tape and extra steps but its not. Just means developers fork the code then submit pull requests to github which have unit tests written first then code to make the unit tests work. When the pull request is submitted the cicd (travis-ci) runs all the tests. If it fails then nothing goes upstream from there. if it passes then we tag the master branch for release using semantic versioning (ie v1.0.0) and the new release gets push into the production cluster.
different levels of scrutiny?
This breaks down like this:
- Committee chairs and other stakeholders attend the Development Priority Meeting to select items for sprint & groom the backlog
- developer picks available tickets selected for the sprint
- developer creates unit tests
- developer writes only enough code to make unit tests pass
- developer commits code and submits a pull request to the development branch on github
- travis-ci test code on pull request and emails development team (also shows up as an alert bell on github)
- review process of code begins, if acceptable pull request is accepted
- docker hub builds image for “latest” release
- community grid auto deploys “latest” release to development systems
- developer team then can run end to end tests and acceptance tests
- with passing all the above the “latest” gets blessed with a semver tag
- docker hub builds the version tagged release
- developer team logs into the community grid and bumps up the production tagged version to the new release
- community grid deploys the the tagged version into production.
From a developer’s POV:
- Write tests, run tests, write lease amount of code needed
- run tests again and do a pull request
- Sip coffee/beer and have fun making things for DMS
From DMS’s POV:
- Only needed predefined changes are picked and available for work
- All the things are tested and bugs squashed before it hits the servers / membership
- Able to track issues to which release and able to roll back to a working known working state with a push of a button
- Sip coffee/beer knowing things get done and members are happy
From the member’s POV:
- New features and things just work