CODEX, POSTER

Tools supporting software growth

An overview of the tools we use in DevOps.

Christian Clausen
Jan 25, 2021 · 11 min read

Collaborate

The most basic thing for software development is collaboration. We work directly or indirectly with many other people; users, stakeholders, team members, and other development teams. Therefore we use a flurry of tools to minimize the overhead of all this communication.

Instant messaging

Popular choices: Slack, Microsoft Teams, Discord.

Document management

Popular choices: Confluence, Sharepoint, Stack Overflow, Google Drive.

Ticket management

Popular choices: Jira, Azure DevOps, Trello.

Version control

Popular choices: Git, SVN, Mercurial, Pijul.

Automate

After the collaboration phase comes time to automate, this is important because it enables continuous integration (CI), continuous delivery, and ultimately continuous deployment, which are known to cause fewer errors and increase development speed.

Build pipeline

Popular choices: GitLab, Azure DevOps, Jenkins.

Artifact management

Popular choices: Artifactory, Nexus.

Deploy pipeline

Popular choices: GitLab, Azure DevOps, Jenkins.

Release management

Popular choices: Launch Darkly, Optimizely, make your own.

Measure

With our code flowing seamlessly and continuously into production, the next most pressing thing is to be aware of the state of production we need to measure. Continuously. We need to know both what is running and how it is running. The final stage of this phase is when we can discover faults before our users. Let’s discuss how tools can help us achieve this.

Logging

Popular choices: ELK Stack.

Monitoring

Popular choices: Honeycomb, Prometheus.

Alerting

Popular choices: Prometheus.

Decompose

With collaboration, automation, and measurement in place, we have usually acquired a lot of inter-dependencies. These can be in the code, in the organization, in the processes, in the communication, everywhere. Therefore the final phase focuses on managing these. Increasing team independence reduces the cognitive load and enables faster experimentation and learning. From a tool perspective in this post, it is about enabling independent building, runtime, and deployment of services.

Indirect communication

Popular choices: RabbitMQ, Kafka, AWS SNS & SQS.

Virtualization

Popular choices: Docker, VMware.

Cloud capabilities

Popular choices: Heroku, AWS, Azure, Kubernetes.

Summary

We have gone through the entire life-cycle and growth of software development from the perspective of tooling. Starting from collaboration, discussing the tools necessary to communicate efficiently about software. Adding automation to reduce waste and increase quality. Using measurements to operate the code internally and externally. Finally, bringing down dependencies by decomposing.

  • Automation
  • Lean
  • Measurement
  • Sharing — which I often explain as “scaling,” as that is a major part of it.

CodeX

Everything connected with Tech & Code. Follow to join our 650K+ monthly readers