Platform engineer with deep experience in distributed systems and startup infrastructure. Writing on technical architecture, observability, SRE practices, team dynamics, and personal experiences navigating mental health and recovery.
"Context sprawl" is what happens when agents lean on grep to navigate a codebase — the active window balloons, every request costs more, and compaction hits sooner. In this post I compare four open-source tools taking different swings at the problem — CodeGraph, GraphMind, basemind, and my own CodeSearch — covering how each indexes, what they expose over MCP, and where each one fits (or breaks) in…
When I joined Gigawatt AI in late 2025, one of my early projects was shaping how we would ingest and store utility meter data at scale. With aggressive SLOs (99.99% uptime, 10k writes per second, sub-200ms queries) and real risks around out-of-order data and write amplification, we needed to evaluate our options carefully. In this post, I walk through how we benchmarked four open-source data…
A reflective look at 2025: navigating employment transitions from an AI company layoff to a startup's founding engineering role, speaking at major conferences, and addressing personal challenges through mental health support. Celebrating wins despite setbacks and sharing lessons learned.
After struggling with treatment-resistant depression, I sought out EMDR and Ketamine therapy to address the underlying trauma and Complex PTSD. In this post, I share my experience with both treatments, how they complemented each other, and what it means to confront the broken parts of myself while embracing growth and healing.
During OpenSource Summit North America 2025, Josh and I co-presented our thoughts on unifying organizational data (business intelligence, observability, and security) under one single pane of glass. Our talk was the culmination of a series of discussions that we had during the course of 2024 and continue to have in 2025. Building on our collaboration and dynamic, we decided to start a new limited…
Formally known as Austin Startup Week, Austin Tech Week provides founders, funders, and freelancers the opportunity to meet, connect, and share with one another. This year was my first year in attendance and there were many things about this conference that I liked better when compared to many others. I made a lot of new friends and connections around the startup scene in Austin and learned a lot…
After 5 months since my last relapse, I figured it was a good time to check in on my recovery. In this post, I wanted to share more about my journey and the challenges I’ve faced along the way, including finding a non-faith based group. Most people refer to Alcoholics Anonymous (AA), but don’t understand just how religious (specifically Christian/Catholic) those groups can be. While I’m still…
Back in February, I found myself quite frustrated with many of the "modern" observability stacks on the open source market. At my previous company, my infrastructure engineer spent a good amount of time fighting with the LGTP stack. After work, I found myself venting to a friend about how unnecessarily complex the open source ecosystem has become. Having worked at startups for the last 4 years,…
A few months back, I remember seeing some concerning discourse minimizing the impact eating disorders have on someone's life. I wanted to say something at the time, but wasn't in a place where I could. For years, I've struggled with an eating disorder that I didn't know was there. It's claimed months of time from my work over the years, and has sent me to the emergency room on more than one…
Over the summer, I made a more conscious effort to spend dedicated 1-1 time with my child. We often spend our time together playing board games, playing piano, watching movies, among other activities. Recently, I've been watching clips from the UK game show "Countdown" and found myself really enjoying the math portion. In this post, I discuss how my child and I came up with a way to play this game…
Let's take a slight detour from the health and healing series to talk a little more tech. Specifically, I want to share a story of a project I worked on back in the Summer of 2016 while at Indeed. It's a great example of where working smarter, and not harder, led to less hands-on work, and being able to spend my day playing pool (billiards).
While it's not something that I actively sought support for during FMLA, loss and grief has been a fairly consistent theme throughout the last few years. From going no-contact with some family members, to saying goodbye to several key relationships in my life, to the death of a chosen family member.
Today, I want to share with you the best investment that I decided to make in my life. The investment I made in me. Since the end of May, I've been on a journey piecing my puzzle back together. It was not a decision I took lightly and required great sacrifice along the way.
While peer one-on-ones can provide a lot of value, a big argument against them is that they require a lot of time and can cost a lot of money. In this post, we’ll take a deeper look into the time commitment and cost for peer one-on-ones.
I took my Twitter account that I reserved back in 2012 with hundreds of followers and deactivated it. Before deactivation, I created a new account and invited folks to follow me there. This not only gave me a fresh start, but it also gave me a chance to curate who I follow and who I allow to follow me a bit better than I had before. After having it up for a few months, I finally decided to…
It doesn't happen a lot, but every so often I come across a device that isn't wi-fi supported. This latest case was my security system. On one hand, I like that my cameras aren't taking up bandwidth on my home network and that the system is largely a closed loop. On the other, not having access to my security system without having it tethered into the router is a bit of a pain. Today, I show how I…
Recently, I've found myself using [Redis][] for more of the projects that I work on. Redis can be used in a variety of ways. It provides functionality for queueing, set operations, bitmaps, streams, and so much more. In this post, I dive into the variety of ways Redis can be deployed. I'll cover the benefits, tradeoffs, and even some uses for each deployment. Finally, I'll describe the deployment…
Recently, I noticed Renovate submit pull requests for dependencies in my Helm v3 charts. This gave me an idea. What if Renovate could automatically manage something like a GitOps repository? This means organizations would no longer need to tediously query for newer versions of applications. Instead, they'd automatically receive a pull request when an update becomes available. In this blog post, I…
Historically, my blog has largely been focused on technology. This was because of where I was in my career. And yet, my career doesn't solely reside in tech. As a transgender individual, I frequently need to correct peoples use of my and other peoples pronouns. Whenever a transgender person needs to correct someone, we pay an emotional tax. While it might seem small at first, you need to consider…
Many people have asked how to support deploying service mesh to Raspberry Pis. It wasn't until September that this started to be possible. Linkerd recently released support for arm64, but has had support for it in edge versions since August. Many envoy based service mesh have been blocked by support for an arm-compatible envoy image. In this post, I'll demonstrate how to deploy Consul to support a…
Path based routing can be an extremely useful feature. It enables you to serve a single page app and an API on the same domain. This can often be helpful when starting a project, but don't want to handle things like cross-origin resource sharing. In a recent project, I wanted to split traffic between a static site hosted on GitHub (or S3) and an API running in the cluster. In this post, I'll…
DockerHub's impending download rate limit presents an interesting challenge for some. From hobbyists to open core ecosystems, projects are trying to find ways insulate their users. For my projects, I chose to deploy a simple registry mirror. One nice thing about this project is that the system is largely stateless (and cheap to run). In this post, I'll walk you through my deployment.
Tools like minikube and kind make it easy to get a kubernetes cluster up and running locally. Unfortunately these tools are limited in their capabilities, namely a lack of load balancer support. As a result, the community developed solutions like kubefwd and minikube tunnel to expose services. While this approach works, keeping a dedicated terminal open during development can be tedeous. In this…
Indeed had an internal blog series called "Show us Your Setup." It was a great way to get an idea of others workspaces, the equipment they use, and software they run. Recently, I had noticed a few folks doing a walk through of their equipment. In this post, I will show and walk through my setup. I'll discuss the things I like, and the things I don't.
Jsonnet is a powerful data templating language. It extends JSON with variables, conditionals, functions, imports and more. As an engineer who never touched the technology before, I often struggled to understand it. In this post, I share my experience learning Jsonnet and my thoughts behind developing a starter.
Open source software has been used to build organizations for years. From libraries to complex infrastructure systems, the open source landscape provides a vast sea of solutions. For larger infrastructure projects, organizations are asking maintainers for service level objectives (SLOs). Many do not publish or provide any, even when projects come from organizations who likely had SLOs in place. In…
Google's Protocol Buffers can be a power piece of technology. Yet, I often feel they are undervalued, underutilized, and underappreciated. Since joining Indeed back in 2013, I've had a fair amount of experience working with them. In this post, I discuss many of the benefits to using the technology.
deps.cloud is an open source project that I started. It's a tool that helps companies understand how their projects relate to one another. While graph databases do exist, finding administrative and engineering support is often hard. On the other hand, finding support for relational databases is easy. In this post, I share lessons learned while implementing a graph system on top of common…
In a Twitter thread between Vito Botta, Alex Ellis, and myself, we talked about how expensive DigitalOcean can be for personal projects. You often start off small with just a cluster for compute. Eventually you need a database to store your user's information. As time goes on, these needs only continue to grow. In this post, I share some cost-saving techniques I've used to reduce my bill.
In this post, I bring a conclusion to my recent series on tracking impressions on repositories. While it's the last in the series, I will likely continue to post updates as time goes on. For now, I feel my current approach has yielded a wealth of information that I'm still fully digesting. In this conclusion, I will walk through how several of my metrics have changed since my original approach.
Last week, I put a tracking pixel on my GitHub repositories. And I've got to say, the results have been really interesting. In this post, I follow up on what I've learned since last week, changes I've made, and improvements I'm working through.
When working on open source projects, I often wonder how to improve the experience for my users. In order to improve my users experience, I first need to be able to measure and monitor it. On a website, I have Google Analytics which can help me understand my users paths through my site. This capability isn't as accessible on GitHub or GitLab as it requires JavaScript execution.
Last year, I wrote a series of blog posts covering the set-up of my home lab. The first post was on my decision to run Rancher's k3s on my Raspberry Pis. Since then, I've made a few modifications to how its all managed. In this post, I discuss some of these changes I made over the last year.
In November 2018, I decided to return to Indeed.com. The decision to return did not come easy. Since then, I have frequently been asked about my reasons for rejoining. In this post, I hope to cover my interviewing process and some reasons that I had for returning.
Over the last year, I've been heavily working on deps.cloud. deps.cloud draws it's inspiration from a project that I worked on at Indeed.com. Since it's original inception, there had been a heavy push to move it into the open source space. In this post, I'll discuss the process and rationale I applied as I rewrote this project in the open.
Back in July, I found myself needing to better coordinate deployments of my applications to Kubernetes. After searching around, I found many ways that people where trying to solve this problem. Some used shell scripts to apply multiple YAML files with a fixed time sleep between them.
When you build a container image, it's typically only built for one platform (linux) and one architecture (amd64). As the Internet of Things continues to grow, the demand for more arm images increased as well. Traditionally, in order to produce an arm image, you need an arm device to do the build on. As a result, most projects wind up missing arm support.
In my last few posts, I talked a bit about my at home development cluster. Due to the flexibility of my cluster, I wanted to provide a monitoring solution that was valuable across each technology I use. In this post, I discuss how monitoring is setup on my cluster. I'll walk through setting up each node, the Prometheus server, and the Graphana UI.
Previously, I talked about the different orchestration technologies that I've run on my Raspberry Pi cluster. That post was rather high level and only contained details relating to k3s. In this post, we'll take a more in depth look at my cluster setup and my management process around it.
Over the last few days, I've been revisiting Kubernetes on my Raspberry Pi cluster. I hope to share what I learned in the process and some of the tooling that I discovered along the way.
I was quite surprised to see how under documented installing a 64-bit operating system onto a Raspberry Pi is. Many articles out there talk about needing to compile Linux, which sounds oh-so-pleasant. One day, I stumbled across a 64bit OpenSUSE version that was compatible, but the installation instructions required a Linux OS to be done properly. Since I primarily work on OSX, this presented yet…
During my first employment at Indeed, I cloned every repository down to my machine. This approach worked for a while when the number of repositories was small. As the organization has grown, the solution quickly became unmanageable.
Every now and then, a friend of mine reaches out and discuss previous projects we had worked on together. As we looked back at code, there was some obvious lessons that we took away from the project. In this post, I reflect on several JavaScript projects that I have worked on over the course of my career.
While working at Dosh, I had pretty heavy exposure to managing NodeJS services running in AWS Lambda. During that time, I had learned a few things about the platform that can be leveraged when writing Lambda services. Some of these lessons may influence how you write services but can also give you some performance boosts. It’s important to note that some of the behaviors that I observed about AWS…
While working at Dosh, I had pretty heavy exposure to managing NodeJS services running in AWS Lambda. During that time, I had learned a few things about the platform that can be leveraged when writing Lambda services. Some of these lessons may influence how you write services but can also give you some performance boosts. It’s important to note that some of the behaviors that I observed about AWS…
While working at Indeed, I did a fair amount with gRPC. I became rather familiar with the Java, Go, NodeJS, and python implementations. During my vacation between jobs, I decided to revisit one of my old projects and try to migrate it to using gRPC. By doing so, I would be able to support a larger variety of request types (streaming, non-streaming, etc).
At Indeed, we always consider what’s best for the job seeker. When a job seeker applies for a job, we want them to have every opportunity to be hired. It is unacceptable for a job seeker to miss an employment opportunity because their application was waiting to be processed while the employer makes a hire.
Component scanning packages can be both your best friend and worst nightmare. In this post, I will cover several bad practices when it comes to component scanning. In detailing a few of these anti-patterns, I will also offer a few better patterns that are much cleaner to use.