Zachary Sherman
I build tools for people
Zach is a pleasure to work with, a passionate engineer who has great instincts and technical understanding.
He is an invaluable steward for the infra team’s platform. He cares deeply for the experience of his fellow engineers and reliably seeks their input to inform product direction. In this work he especially values ease of use and maintainability.
I think it is important to point out that everyone who gave feedback expressed joy and pleasure working with Zach, appreciated his dedication, and committed to help him continue to grow and succeed. This was fairly unique in my experience and I think is a reflection of Zach as a person.
Software development requires some skill with computers and even more skill with people. Much of my relational experience comes from four years community-organizing in Chicago. I fought side-by-side with college kids and old south-siders to better our community. We came together to understand the root causes of injustice which fueled our campaigns for universal healthcare, climate action, and ending police brutality. In software I rely on similar high-trust relationships. In deep collaboration, I identify the root causes of friction and build tools to address them. Zen practice also informs my work: it's much easier to understand others with a little understanding of myself.
Here's my approach to software development. I build tools that help people work faster and with less frustration. I focus on "scratching my own itch" because it makes the work more satisfying and means I build more intuitive tools. Working in close relationship with the users of my tools helps a lot too. In these relationships, I focus on understanding how developers or users work and what slows them down. I build smaller fixes to address present-day problems while designing systemic changes that address longer-term issues. Sharing my work throughout helps me stay attuned to users' needs.
I work best when I can directly engage the people using my software. So my skillset is best suited to places that encourage that engagement, like small teams and developer-tools companies.
I've been building software for people I know (both friends and colleagues) for five years, so I have plenty practice working out what they need and implementing it. For full project descriptions see my resume. Some highlights:
- developer environments: I maintain the ngrok developer environment and associated tooling using nix/nixos, golang, typescript, bash, systemd.
- CI systems: I lead ngrok's CI development and maintenance using nix/nixos, bash, typescript (as a way to programmatically generate YAML for pipeline configurations), CircleCI, DroneCI, buildkite (we stuck with buildkite).
- environment configuration: I lead the ongoing design and maintenance of a custom typescript program that allows developers to change environment, cluster, service configurations and infrastructure without diving into YAML (or terraform) hell. Like a very fancy version of helm. This involves kubernetes manifests, terraform, dockerfiles, and a whole lot of fun with the typescript type system for maximum ergonomics.
- agent packaging: I developed and maintain docker, snap, homebrew, and chocolatey packages for the ngrok agent. I automated releases with go and buildkite.
- observability: I have experience operating vector (logging), veneur and datadog agents (metrics), and otel-collector and refinery with honeycomb for tracing data.
- e-worm.club: I also built e-worm.club a few years ago. It's a social site just for my friends that's been through several iterations before I settled on something like a private, more user-friendly tilde.club. Using async rust! which was very fancy back in 2020.
- miscellaneous dev tools: ...built as an engineer at repl.it and open work labs using typescript, react, redux.
Building these tools has taught me a ton about working in the messy space in between people and software.