/blog
Notes from the backend: PHP, Go, integrations, and the unglamorous details that keep production systems running.
From PHP to Go: what twelve years of PHP taught me about writing Go
Switching languages after a decade isn't about syntax — that part takes a weekend. It's about unlearning reflexes. In PHP every request starts from zero; in Go the process lives forever and state outlives the request. Here's what carried over, what didn't, and the mistakes I made so you don't have to.
~3 min read · read post →
Talking SOAP to the Spanish Tax Agency — and surviving
Government APIs don't care about your deadlines. Building an automated invoice pipeline against AEAT's SOAP services taught me more about defensive programming, schema validation, and retry strategies than any REST API ever did. A field guide for anyone integrating with a system that was designed before you started programming.
~3 min read · read post →
Redis as a message queue: when it's enough, and when it isn't
You probably don't need Kafka. For years I ran caching and queuing for multiple production client systems on Redis alone. This post draws the honest line: the workloads where Redis lists and streams are exactly right, and the warning signs that you've outgrown them.
~2 min read · read post →
Goroutines for PHP developers: a mental model that actually sticks
If your whole career has been one-request-one-process, channels feel like magic at first and like footguns shortly after. A practical mental model for concurrency built on the backend concepts PHP developers already know: queues, workers, and locks.
~3 min read · read post →