Application Kustomize image

When creating Applications in Argocd I always prefer to use kustomize for my own manifests. It allows me to create a simple “base” of manifests and then alter it for the specific use case via the kustomize attribute within the application. This allows a single place (the Application or ApplicationSet) to stores all the high level information for configuring the installation. While working on one project or another, I don’t remember anymore why I needed to figure this out, I noticed the images attribute works differently in Argocd than it does in kustomize. Since you the reader might be interested in the solution as opposed to the exploration, let me get that out of the way now: ...

February 28, 2026 · 1 min · 188 words · Paul Montag

Golang Package Structure

I have been developing with Golang for about 10 years now, and over that time I have learned many things about the language, but the biggest one might be this. Directories are not just Directories Within golang a directory with new golang source code in it creates a new interface. One that requires you to think through what is public and what is private. One that forces you to consider the relationship between these packages since golang does not allow for circular dependencies. You need to strike a balance. I tend to see the following in codebases ...

November 10, 2025 · 5 min · 924 words · Paul Montag

Grabbing a Go Time with BPFTrace

Recently I found myself debugging an application where I needed to understand what value a time.Time object had. What I thought was going to be a trivial experience turned into a multi day confusing conundrum which left me confuddled and cranky. Alright, that is already too much alliteration for the first paragraph of the post. Long story short, I gave up and found a duration which gave me the context I needed to understand what was going on. ...

October 7, 2024 · 10 min · 2095 words · Paul Montag

Go Nil Slice

var names []string for _, person := range bus.People() { names = append(names, person.name) } This probably looks pretty familiar. If it doesn’t and you are like “OMG, how is that working?!?! Doesn’t that nil panic?!”, no worries, append will instantiate the slice for you. However you are leaving it up to Golang to guess how many items will end up in the final slice, and it has 0 context. Let’s dive into what a slice is under the hood. ...

March 12, 2024 · 7 min · 1416 words · Paul Montag

BPFTrace and Go

You know what is awesome! BPFtrace! There is nothing more magic than showing someone exactly what is happening in their application, RIGHT AT THAT MOMENT. There is something neat about peering under the hood of a running application and finding that your pristine software, your baby which you have labored over making perfect is still marred with logical errors that don’t show themselves when viewed holistically. Sadly, when you are reaching for something like BPFtrace you are typically in a bind, and the complexity of such a tool is frustrating. This is compounded by the fact that Go, in no way, makes your life easier here. Hence I will write down what I know in hopes to clear someone else’s frustrations. (more likely my future self) ...

January 28, 2024 · 10 min · 2080 words · Paul Montag