Developer Automation Stack

The modern software engineer is called upon to work across a wide array of languages and technologies. We need a toolchain that is compatible with all of the various technologies and projects we may work with in a single day, and we need automation to help us combat the cost of context switching.

Shell Software

You’ll spend a lot of time in the shell, so you should make sure it works for you. If you’re already comfortable with a custom shell set up then you may not want to change things much. If you’re still using the defaults provided by your OS, then these tools can dramatically improve your productivity in the shell:

OhMyZsh

OhMyZsh provides a huge range of features to improve the default zsh experience. The most useful are the plugins for auto-complete for git, docker, kubectl, helm, and more… You’ll quickly find yourself tab-completing your way through complex commands, which is especially helpful for things like docker container names with procedurally generated suffixes.

asdf

Not every project is containerized, and sometimes you want the IDE integration or debugging options that come with having a runtime installed locally. But what do we do when one microservice uses node v8.4 and another uses latest? For that example, nvm would be a viable option, but when you multiply this problem by all of the various package managers it becomes apparent why a universal solution is needed. asdf is this universal package manager, allowing you to keep multiple versions of most languages installed. It can even automatically switch which version of a language is used based on what directory you’re in.

Editor Software

A good editor is capable of being both a swiss-army knife and a surgical blade depending on the needs of the moment. For modern applications, it’s important to be able to switch between languages and technologies without any fuss. 

VS Code

Plugin compatibility, remote sessions

There was a time when every software engineer used an IDE purpose-built for their preferred language stack. Unless you want to maintain 10 different IDEs, this doesn’t work in the modern microservices world. VS Code provides all of the functionality that a polyglot developer could ever need, and is compatible with the other plugins we recommend.

Github CoPilot

Automatic Code Completion, Translation

AI-powered code completion is amazing in that it gets us closer to the ideal of being able to type as fast as we can think.

Github CoPilot in particular comes with some hidden features available in Beta: it can translate a code block to another language, or it can even explain the code to you in plain English. 

Often, the most difficult part of a task is finding the right line of code to modify. As an example, recently I was working in an Erlang service. Erlang and Elixir share many of the same features but I’m much more familiar with the Elixir’s Ruby-like syntax. By having CoPilot translate the Erlang to Elixir for me, I was able to much more quickly understand the module before finally editing the original Erlang code. 

Lightrun

Production Profiling & Debugging

Debugging using editor tools is one of the most important skills a new software engineer will develop. But now we work on dozens of services and some of them may never even run on our local machines. At some organizations like twitter, there isn’t even a staging environment. With so much testing “shifted right”, Lightrun’s ability to instrument, profile, and troubleshoot production applications on-the-fly becomes an invaluable asset.

Server & Application Software

To truly leverage observability we need the ability to monitor our services from inception to release. At each stage, our stack requires instrumentation, an agent or collector, a backend and an accompanying UI. Full observability platforms are complex and cumbersome to run in small local environments. Instead, we can leverage OpenTelemetry instrumentation to ensure observability in all stages of our application life cycle, regardless of the backend.

Local

Pre-Production + Production

Service Instrumentation

OpenTelemetry libraries

OTel libraries + Instana Sensors

Host Agent

Prometheus

Instana Agent

Host Collector

OpenTelemetry

Instana Agent

Tracing Backend

Jaeger

Instana

Logs Backend

ELK

Instana

Metrics Backend

Prometheus

Instana

Open Source Instrumentation

Shift-left observability reminds us to consider observability from the earliest stages of the application development lifecycle. Open Source tools allow us to ensure we are gathering valuable telemetry from any service, even before it has ever been deployed outside of a local development environment. 

OpenTelemetry provides instrumentation libraries for most popular languages. Jaeger and Prometheus can easily be run locally inside docker containers in order to validate trace and metrics data respectively from services being actively developed.

  • OpenTelemetry Collector & SDKs
  • OpenTelemetry Operator
  • Jaeger
  • Prometheus
  • ELK

Instana

Instrumentation, Tracing, Alerting, Dashboards

The Open Source tools listed above provide a great starting point for fresh services without real load. As we move our services into integration with our existing legacy applications and the full breadth of our application topology, more robust automation becomes indispensable. Instana’s AutoTrace and unsampled trace collection give us complete visibility into the network calls between our services, allowing us to easily debug and troubleshoot distributed applications. 

DB Marlin

Database Query Analysis & Optimization

Instana can help you quickly identify slow-running database queries, but when it comes to understanding why a query is slow nothing compares with DB Marlin. Instana integrates seamlessly with DB Marlin, allowing you to seamlessly navigate between any application context in Instana and the relevant query analysis in DB Marlin. 

Logging

Instana can provide the core logging functionality that most organizations will require. For more complex requirements, an additional solution can be added. ELK is an excellent open source choice for logging, especially in local and pre-production environments. However, ELK data storage can get extremely expensive quickly, and for large volumes of logs a vendor solution such as Instana, Humio, or Splunk may offer significant cost savings in addition to all of the other benefits.

v2 The Developer Automation Stack