#Devops
Put ten people in a room and ask them "What is DevOps?", and you will get ten answers.
Here is my answer:
DevOps is the application of Agile software delivery techniques to infrastructure delivery and the software delivery lifecycle.
That does not imply any particular methodology or technique. DevOps will sit comfortably with Agile, Scrum, or whatever. It will even work with SAFe.[1]
This is commonly described with this image:
Here's a longer take about what facets or capabilities make up what I might describe as DevOps.
- Automation for everything. CI. CD. Configuration. Testing. Everything.
- Infrastructure as Code. It's repeatable. It's fungible. It's auditable.
- Disposability. Ideally you will not be reliant on a single tool, technology, or provider. (I ackowledge that in the real world this can be a really quite difficult thing to do. Software has gravity, and you always require an amount of escape velocity to move on from using a particular tool.)
If somebody is new to DevOps, where should they start?
With some fundamentals.
And then move on to the items in the infinity loop.
- Planning the work using Agile, Kanban, or something else.
- Code versioning tools such as Git or Mercurial. (You will get more mileage out of learning Git. It is ubiquitous, mostly, I think, because of how great a job Github have done of making Git workflows as easy as they can be.)
- Building software with Continuous Integration.
- Testing, especially the basics of the different types of testing.
- Deploying Software and then Releasing Software. Note that this is a different order to the DevOps Loop above. There are tools and techniques that let you deploy new code without masking it visibility to users such as Feature Flags and Canary Releases.
- Finally, Operations and Monitoring.
Once that understanding is in place I would move on to learning some tools that can help with the different stages. Things like Terraform and Crossplane [2] for infrastructure deployment, Ansible for configuration management, Hashicorp Vault for secrets management, and Consul for dynamic configuration management. And if you have deep pockets, services like Datadog and Honeycomb for handling logs, metrics, and tracing, and Pagerduty for alerting. For those of reasonable means, self-hosted Prometheus (for metrics) and Jaeger (for tracing) with a Grafana front-end is probably the way to go.
If you think that sounds like I am being dismissive of SAFe then you would not be far off the mark. I am not a fan. One day that link might go to a page where I explain why. ↩︎
I think that the future of infrastructure management lies more with tools like Crossplane than Terraform for reasons to be described in here. ↩︎