About

Our purpose is not to “write code”, but rather add value.

Platform and infrastructure engineer with 15+ years shipping software and growing teams. I build the delivery pipelines, application platforms, and multi-site data stores other teams ship against, along with the web applications that run on them. Just as much, I help teams learn to operate and recover what they run — instrumentation, incident response, and disaster recovery.

Open Source Contributions

A selection of my open source work, grouped by the kind of contribution — the projects I help maintain, the changes I’ve authored and merged upstream, work I have in review, and bugs I’ve reported and diagnosed.

Maintainer

powerhome/redis-operator

https://github.com/powerhome/redis-operator

A Go Kubernetes operator that manages highly-available Redis with Sentinel-based automatic failover. I help maintain it, as release owner from v1.8.0 through the current v4.4.1. That work brought HAProxy-based client routing, master/replica failover healing that disconnects clients from demoted nodes, and ongoing Kubernetes-version support. For my team, adopting it meant retiring commercial Redis Enterprise licensing in favor of an internally-run, open-source alternative.

Merged Upstream

HAProxy

https://github.com/haproxy/haproxy

The reliable, high-performance TCP/HTTP load balancer. I contributed an init-state server-configuration feature (commit 50322df) that closed a years-open issue and fixed a Redis-failover bug responsible for past production incidents.

Shopify/shipit-engine

https://github.com/Shopify/shipit-engine

Shipit is a deployment tool that makes shipping code better for large teams who build and deploy GitHub repositories together. Contributing as an outsider from 2019 to 2021, I reshaped part of its domain model — renaming PullRequest to MergeRequest to make merge requests a first-class concept — which cleared the way for Review Stacks (PR #1102), the feature I authored: ephemeral, full-stack preview environments spun up per pull request. Alongside that I hardened operational internals: task timing on a monotonic clock, and recovery from git-cache corruption.

derailed/k9s

https://github.com/derailed/k9s

A popular terminal UI for managing Kubernetes clusters. I contributed the Gruvbox light and dark skins (PR #1088).

percona-xtradb-cluster-operator

https://github.com/percona/percona-xtradb-cluster-operator

Percona’s Kubernetes operator for XtraDB Cluster. I contributed a fix merged upstream (PR #521) that resolved a crash when the operator pod started without a HAProxy PodDisruptionBudget.

rubyforgood/mutual-aid

https://github.com/rubyforgood/mutual-aid

Mutual Aid is when people get together to build community by voluntarily sharing resources with each other. Mutual Aid groups are more concerned about local resiliency than global campaigns, and prefer solidarity before charity. I contributed a series of changes hardening the Docker-based development environment for new volunteers.

In Review

basecamp/kamal

https://github.com/basecamp/kamal

Basecamp’s tool for deploying web applications anywhere. I’ve proposed a SOPS secrets adapter so Kamal can pull deploy-time secrets from a SOPS-encrypted file (PR #1906), along with the accompanying documentation (kamal-site PR #201). Both are open and under review.

Reported and Diagnosed

rubocop/rubocop

https://github.com/rubocop/rubocop

I reported a correctness bug where a Style/InvertibleUnlessCondition autocorrection could silently break application logic (issue #11800).

percona-xtradb-cluster-operator

I reported that the example configuration ships a sourceRetryCount that diverges from MySQL’s default and breaks replication on routine source restarts (issue #2523).

PagerDuty/terraform-provider-pagerduty

I reported a “product limit exceeded” failure when updating a service’s escalation-policy reference (issue #1025).

Side Projects

resque-alive

https://github.com/indiebrain/resque-alive

A Kubernetes liveness probe for Resque, written in Ruby, so a stuck or dead worker is restarted automatically rather than silently draining the job queue.

asdf-guile

https://github.com/indiebrain/asdf-guile

An asdf version-manager plugin (Shell) for installing and switching between GNU Guile versions.

.files

https://github.com/indiebrain/.files

My personal dotfiles: a modular Emacs Lisp configuration and shell setup, organized with GNU Stow and still actively tended.

futurist

https://github.com/indiebrain/futurist

A Ruby take on futures and promises, inspired by Celluloid’s block-based futures, that transparently backgrounds work by forking processes.

Talks

Git Internals

https://github.com/indiebrain/talks/blob/master/git_internals/git_internals.org

Explains the inner workings of git, and sheds some light on how the internal structure of git as a data store shapes its user interface.

Git Workflow

https://github.com/indiebrain/talks/blob/master/git_workflow/git_workflow.org

Treats version-control history as project metadata: a workflow built for reason-ability (what, exactly, is in production?), communication, and a semantic commit history that records the intent code alone can’t.

Release It!

https://github.com/indiebrain/talks/blob/master/release_it/release_it.org

A brief, messy history of releasing software — from ENIAC and the 1968 “software crisis” to how modern practices arrived at continuous, lower-risk delivery.

Elsewhere

Recent Posts