Patterns and Tooling
In order to fully close the loop on running useful experiments within your organisation and deriving value from the process, you need to cover the full development process. In this context, we can take a slightly narrower view and consider:
- Continuous delivery of software to production.
- Monitoring of software running in production.
- Alerting on deviations from SLAs for running software.
As the industry has started to embrace a greater degree of automation around the process of development software, and evaluating the results of these experiments, a number of platforms have been developed to support the various stages of automation.
For CI/CD we have off-the-shelf tools such as:
- GitLab with CI/CD support.
- Jenkins with Pipelines to support CI/CD.
- Travis CI supporting CI/CD for GitHub projects.
While for gathering telemetry and monitoring systems we have tools such as:
- StatsD for aggregating telemetry emitted from software.
- CollectD for collecting and collating a broad range system telemetry.
- Graphite for collecting, collating and graphing telemetry.
- Graphana for collecting telemetry and building dashboards.
- Prometheus for collecting telemetry and defining alerting rules.
The actual choice of the tooling for a specific organisation or software engineering team depends both on the existing context and the problems being addressed.
When approaching the problem of continuous delivery, I work with software engineering teams to ensure, that the complete software development life-cycle will benefit from these investments; that the rapid delivery of software to production is counter-pointed against the collection of meaningful data from production; that all disciplines supporting a software engineering effort can benefit from the rapid release cycle; and that the rate of change to production systems is aligned with the business needs for agility and early feedback.
Continuous delivery and early feedback are cross-cutting concerns that, as with any other system design, need to be aligned with the expectations and needs of the business.
By building this alignment into the development processes and sharing the common principles of directed experimentation, it is possible to see high quality software systems being engineered that deliver value to the business.