Skip to main content

Posts

2026


Introducing jjw: a workspace manager for jj

·4 mins
I released jjw, a Go CLI for managing jj workspaces with bookmarks and lifecycle hooks. This post explains why I built it, how it works, and how to get started.

How I lost a database and learned to actually use AI

·7 mins
I ran AI-generated SQL without reading it properly and lost a database. The experience changed how I work with AI tools, replacing freeform chat sessions with a structured process built around PRDs, small tasks, and frequent commits.

2025


Building an MQTT client in Go

·9 mins
Build a robust MQTT client in Go with real Home Assistant examples. Covers concurrent processing, wildcard matching, and device integrations including Aqara sensors and EV charging data.

Go 1.25's new JSON encoding package

·8 mins
Discover how to use the new json encoding package in Go 1.25 in your projects for improved performance and flexibility.

Go 1.24's new tool directive in go.mod

·3 mins
Go 1.24 introduces the tool directive in go.mod, letting you declare project tools as proper dependencies instead of using the tools.go hack. Here’s how to use it.

Building an HTTP server in Go with zero dependencies

·7 mins
Go 1.22 made the standard library router powerful enough for most projects. This post builds a complete HTTP server using only net/http, covering routing, path parameters, and middleware without any external dependencies.

Processing UK rail data in real-time

·6 mins
A Go service that consumes UK rail data from Kafka and persists it to PostgreSQL using table partitioning. Built with franz-go, it handles millions of daily messages while maintaining data consistency.

Engineering arrogance

·10 mins
Innovation and rapid execution drive success in technology companies, but arrogance within engineering teams can silently erode this foundation. When technical expertise becomes a barrier rather than a bridge, it threatens the very innovation it claims to protect.