Skip to content

Automation Tools

As an engineering leader, time is your scarcest resource. Any task you do more than a couple of times is a candidate for automation — so before you grind through it again, ask whether a tool could do it for you.

Below is a high-level tour of the automation tools I reach for most, with concrete recipes. The examples use the free online REST API at jsonplaceholder.typicode.com, so you can run them as-is.

💡
Automate to demonstrate value, not just to save keystrokes. A small script that surfaces team health data nobody had before is worth more than one that shaves five seconds off a task you do once a week.

curl

curl is a command-line tool for getting or sending data — including files — using URL syntax. Most machines already have it. To check, open a terminal and run curl --help.

A few recipes worth memorizing:

# Pull a response straight into the terminal
curl https://jsonplaceholder.typicode.com/posts/1

# Download a response into a file (then read it with cat)
curl -o test.txt https://jsonplaceholder.typicode.com/posts
cat test.txt

# Send data with a POST
curl --data "title=Hello&body=Hello world" https://jsonplaceholder.typicode.com/posts

# Update data with a PUT
curl -X PUT -d "title=Hello" https://jsonplaceholder.typicode.com/posts/3

# Delete data with a DELETE
curl -X DELETE https://jsonplaceholder.typicode.com/posts/3

# Authenticate on routes that require it
curl -u carrie:12345 https://example.com

# Follow redirects (http://google.com → https://www.google.com)
curl -L http://google.com

# Upload / download a file over FTP
curl -u name@example.com:12345! -T hello.txt ftp://ftp.example.com
curl -u name@example.com:12345! -O ftp://ftp.example.com/hello.txt

A couple of flags worth knowing:

  • -X (or --request) specifies the HTTP request method.
  • -d (or --data) sends data in a POST request. There are more examples here.

Pulling stats from Jira or GitHub

You can use curl to pull stats out of GitHub or Jira when a proper tool isn’t available. That said, try first to buy something off the shelf — a tool like Jellyfish’s Team Health already joins Jira and GitHub data in a meaningful UX, and your time is better spent elsewhere.

For Jira, create a Personal Access Token (PAT) on the API tokens page, then use it directly:

curl --request GET \
  --url 'https://your-domain.atlassian.net/rest/api/3/issue/{issueIdOrKey}' \
  --user 'email@example.com:<api_token>' \
  --header 'Accept: application/json'

Or, more compactly, piping through jq -C for colorful JSON:

curl -u email@example.com:<api_token> https://your-domain.atlassian.net/rest/api/3/issue/FAM-493 | jq -C

If you want to use that token in code rather than on the command line, you’ll need to Base64-encode it. For more ideas, browse this collection of Jira shell scripts.

CLIs

Command-line interfaces are a clean way to script against third-party tools. The GitHub CLI is a great example — its full command reference is here.

First, authenticate. The docs cover gh auth login --with-token, including reading a token from a file. For automation inside a pipeline, this post on gh auth in GitHub Actions walks through the options.

gh auth login --with-token < token.txt

curl -H "Authorization: Bearer $GH_TOKEN" \
  -s "https://api.github.com/search/issues?q=type:pr+author:$AUTHOR+user:KonaCoder+created:>=2022-07-01" | jq '.total_count'

What’s happening in that second command:

  • -s (or --silent) disables the progress meter.
  • -H (or --header) adds an extra header to the request.
  • | jq pretty-prints the JSON, which makes it readable — no more pasting output into a text editor to format it. Learn jq from its manual or this helpful walkthrough.
  • Appending '.total_count' narrows the output to just that one key.

GitHub Actions

GitHub Actions lets you build automation right into your pipeline — for example, labeling PRs based on the number of files and lines changed.

Using the Pull Request Size Labelling action, drop a workflow file at .github/workflows/pr_size_labeling.yml:

name: "Pull Request Size Labelling"
on:
  pull_request:
    types:
      - opened
      - reopened
      - synchronize
jobs:
  addLabels:
    runs-on: ubuntu-latest
    steps:
      - uses: JoshwJB/pull-request-size-labelling-probot@v1.2.1
        env:
          GITHUB_TOKEN: ${{ secrets.API_CALLS_TOKEN }}

Now every PR gets a size label automatically — which gives you a concrete, data-backed way to coach engineers toward smaller, more iterative pull requests.

Google tools

You can automate a surprising amount inside Google Workspace.

From Google Docs or Sheets, open Extensions → Apps Script to build reusable tasks. For example, here’s a Jira REST API call inside an Apps Script for Google Sheets.

In Google Docs, typing @ exposes a wealth of smart chips and building blocks:

  • @date inserts a date chip
  • @name inserts a person chip
  • @titleOfMeeting + Tab creates meeting notes for the selected event

For something more advanced, you can build a Google Apps Script web app to securely pass in a token when you need to share the automation with others.

Ansible

Ansible is an open-source, command-line IT automation tool written in Python. It can configure systems, deploy software, and orchestrate workflows for application deployment, system updates, and more — a good way to demonstrate value and deliver real efficiencies for your organization.

Terraform

Terraform lets you automate infrastructure on any cloud.

One management-friendly use case: define consistent Datadog monitors across teams so observability isn’t a snowflake per squad. Datadog’s own guide to managing Datadog with Terraform shows how.

📚 Go Deeper

Books

Tools

Last updated on