As software engineers we strive for a rational, disciplined approach to manage complexity. Automation and methodology has been the response. Continuous Integration and Continuous Deploy is the du jour best practice.
The DevOps goal for any project is to reach a level of software development practice discipline that achieves full traceability of a story/defect so that we know:
- Who wrote the code and when? (blame)
- What requirement or defect is the code associated with? (requirements traceability)
- Was the code tested? (test coverage)
- Did the code pass its tests? (test reporting)
- Is the code deployed to SIT/UAT/Production and when was it deployed? (release management)
I should know with absolute certainty that no assets outside of source control or an artifact repository (such as Maven) have been deployed to any systems, especially production.
I should be able to look at any asset in source control and definitively say if it is deployed now or not.
I should be able to produce a production or test release by configuration change only.
I should be able to get answers to all these questions without having to interact with another person.
I created a scorecard to quickly assess each project and identify areas of improvement.
Software Development Discipline Project Scorecard
|Can identify who wrote the code and when||𝤿 yes 𝤿 no|
|Can identify the requirement or defect the code associated with||𝤿 yes 𝤿 no|
|Verify the code was tested||𝤿 yes 𝤿 no|
|Verify the code passed testing||𝤿 yes 𝤿 no|
|Know exactly where and when the code was deployed to system X||𝤿 yes 𝤿 no|
|Confirm that all assets on system X were deployed from source control||𝤿 yes 𝤿 no|
|Can produce Production Releases with only configuration changes||𝤿 yes 𝤿 no|