/blog

Notes from the backend: PHP, Go, integrations, and the unglamorous details that keep production systems running.

post-004 2026-05-12 golang · php

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 →

post-003 2026-03-28 integrations · soap

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 →

post-002 2026-02-09 redis · architecture

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 →

post-001 2026-01-15 golang · concurrency

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 →

Disagree with a post? Tell me. POST /contact → best conversations start with a code review

POST /contact →