Returning to Indeed

January 27, 2020

In November 2018, I decided to return to 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.

Read More »


January 24, 2020

Over the last year, I’ve been heavily working on draws it’s inspiration from a project that I worked on at 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.

Read More »

Checking Service Dependencies in Kubernetes

October 17, 2019

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. Others used shell scripts and tailed the rollout using kubectl rollout status -w. Now, I manage a lot of my deployments using GitOps and Flux. So leveraging these shell scripts to manage my rollouts into clusters wasn’t really an option.

It wasn’t until I came across Alibaba Cloud’s blog post on solving service dependencies that I felt like I had something to work with. The article described two techniques. The first was inspecting dependencies within the application itself. At Indeed, we leverage our status library to do this. The second was to enable services to be checked, independent of the application.

In this post, I’ll demonstrate how to use my service-precheck initialization container (built off of the Alibaba blog post) to ensure upstream systems are up before attempting to start a downstream system.

Read More »

Using docker-buildx for Multi-architecture Containers

May 07, 2019

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.

BuildKit provides emulation capabilities that support multi-architecture builds. With BuildKit, you build container images across multiple architectures concurrently. This core utility backs docker buildx, a multi-architecture build utility for docker. In this post, I’ll discuss why you should produce multi-architecture container images and demonstrate how to use docker buildx to do it.

Read More »

Moving Licenses - Apache 2.0 to MIT

May 02, 2019

Yesterday, I decided to switch the license that I apply to my personal projects. Many open source projects use the Apache 2.0 license. After reading through it a few times, I liked the level of coverage that it provided. It was however a bit wordy in my opinion. These were often simple little side projects that I was hacking on in my free time.

After some discussion with others in the community and a few podcasts, I decided to make a switch. I wanted to preserve a lot of what the Apache license granted, but simplify the wording quite a bit. The MIT license enables many of the same grants, while reducing the verbiage used to describe them. As an Engineer, I understand MIT much more than I understand the Apache license. From discussions, the MIT license often presents a lower barrier to entry when compared to Apache. This was exactly what I was looking for on my side projects.

Read More »