I have been having a lot of discussions recently about tooling to support continuous delivery and DevOps practices. There is an incredible and ever increasing array of tools available for these practices. Whilst a number of vendors have developed one-stop solutions or suites of integrated tools, many of the tools in the space tend to be tightly focused on addressing a particular problem.
Unfortunatley this can be confusing and overwhelming, especially to people starting out, making it difficult to know where to start and which tools to consider. This can also lead to particular tools being used to solve problems where other types of tools may be better suited. It is therefore important to consider tools within the context of the broader ecosystem and understand the role each one plays and the specific goal or problem(s) they aim to address. With this in mind, I thought it might be useful to visualise the broader CD/DevOps tool landscape to provide some context around the available tools and how they each fit within it.
You can see the complete visualisation here:
I divided the landscape up into 5 high-level phases broadly aligned to a generic application lifecycle: Collaborate, Build, Test, Deploy and Run. Within each phase, I then attempted to categorise the types of tools available. Some tools within the same category address slightly different problems and can be considered complimentary to one another e.g. Terraform and Puppet/Chef. Conversely, some of the tools e.g. MS Team Foundation Server, Go CD, Docker, etc. could appear in multiple categories. Where this is the case, I have tried to place them once, in the primary category for which they are known.
What is not covered
Whilst it would be great to show the entire landscape on one page some compromises had to be made and so some categories of tools were omitted. These include:
- Service Discovery and global Configuration stores e.g. Consul, ZooKeeper, etcd, etc.
- Security management and monitoring tools (Privileged Account Management, intrusion detection, secret management and certificate management) e.g. CyberArk, Snort, Tripwire, Fortify, Vault, Let’s Encrypt, etc.
- Static code analysis tools i.e. cyclometric complexity, coverage, quality, standards, etc.
- Programming languages, tools and frameworks e.g. compilers, IDEs, Frameworks like DropWizard/Nancy/etc.
- Mocking tools for testing e.g. Mockito
- Quality Management tools e.g. HPE QC
- Release Management tools e.g. LaunchDarkly
- Cloud vendor specific tools & toolchains e.g. Cloudformation and CodeDeploy for AWS
- Platform/Device specific development toolchains e.g. Native mobile apps, IoT, etc.
The visualisation is not intended to be exhaustive or represent any form of recommendation or endorsement. It would be interesting to hear other people’s perspectives and experiences. Have you used other tools that belong in this visualisation? Does the visualisation resonate with your own experiences and have you used some of the tools shown? Are there any categories you feel missing? If so, please comment and share your thoughts and experiences.