Guides

The blog runs newest-first, which is right for reading along and useless if you have turned up with a problem. These are the routes: everything on one subject, ordered so you can start at the beginning.

12 guides Everything, newest first

Building a command-line tool in GoEverything I have written about building command-line tools in Go, in the order it makes sense to read it. A five-part tutorial that leaves you with something that works, then the decisions underneath it and the mistakes that produced them. 19 posts5-part tutorial Building a web service in GoSix parts from an empty directory to a service with a gRPC contract, a REST face, generated documentation and a trace you can follow end to end. Each part leaves you with something that runs. 10 posts7-part tutorial From one framework to fifty modulesgo-tool-base started as one framework and is now the place most of fifty-odd modules were extracted from. This is how that went: what got graded, what refused to leave, the config package that had to be rebuilt to let anything go, and what the split costs every time a core changes. 10 posts Security for a one-person estateThe attack surface of a small independent maintainer, and what closing it actually costs. Secrets that scrub themselves, dependencies you did not choose, and a cleanup tool that nearly deleted its own hands. 29 posts Part of Security Signing your releasesWhoever controls your release page can swap a binary, and a checksum hosted beside it proves nothing. Everything on fixing that, in the order it makes sense. 18 posts7-part tutorial Infrastructure with AWS and OpenTofuStanding up an AWS account from nothing, with OpenTofu and no long-lived credentials anywhere. The bootstrap that deliberately does almost nothing, and the cleanup tool that nearly deleted its own hands. 15 posts CI/CD, and getting things releasedPipelines you include rather than copy, a toolchain baked into one image, and a release that is just another merge request and tags the commit that actually landed. Plus the jobs that silently never ran, the cache that filled a disk, and a runner fleet that scales to zero. 23 posts Media in pure GoMost Go programs that need FFmpeg shell out to it and inherit a CLI's argument syntax and a process with the run of the disk. This is the other way: FFmpeg's libraries compiled to WebAssembly, driven from Go, and pointed at a filesystem that only exists in memory. 8 posts Rust, and what survived the portrust-tool-base is a sibling to the Go toolkit rather than a port, and building it was the clearest way to find out which decisions were design and which were just Go habits wearing a confident face. 24 posts Building with AIThe engineering of putting a model inside your own software: a chat interface that fits on one screen, tool calls that are typed rather than parsed, and an agent held to a build that has to pass. 21 posts Running an estate with a fleet of agentsA session per repository keeps agents from trampling each other and leaves them no way to talk. These are the posts about everything that follows from that: the handoffs, the checking, the documents, and knowing when to take one off the job. 10 posts What I think about AIThe arguments, kept deliberately apart from the engineering. I use this stuff every day and I am an advocate rather than a sceptic, which is exactly why the loud takes are worth arguing with. 10 posts

Or read everything, newest first →