Posts
Types Are Not Safety
TypeScript's type system is a tool for thinking through your data and your boundaries, not a way to buy a feeling of safety.
Struct Tags and reflect
reflect reads Go struct tags at runtime. Lookup tells an empty tag from a missing one; reflect is slow and panics, so keep it at startup, off the hot path.
One Responsibility per Layer, and the Discipline It Takes
Each layer should own one job you can state plainly; blur it and debugging becomes guesswork. On over-abstraction, under-abstraction, and when not to abstract.
Error Messages Are Written for the Next Person
A useful error message says what happened, where the boundary was, and where to look next. Write it for whoever gets paged at 2:30 in the morning.
net/http and the Middleware Pattern
Most Go web frameworks (Gin, Echo, chi) sit on net/http: http.Handler and ServeHTTP are the only abstraction, and middleware is a closure wrapping a Handler, outermost first.
Running Docker and Linux Machines on macOS with OrbStack
OrbStack is a lightweight Docker Desktop alternative — fast to start, light on resources, and it runs Linux machines and Kubernetes too.
Introducing My Docker Compose Template Collection
Docker Compose templates on GitHub for MySQL, Redis and other services: clone, adjust, docker compose up -d. For local development and integration testing, not production.