Uncategorized

  • The read model that finally earned its place

    A projection deleted in 2023 for being premature, rebuilt in 2025 because the query is now eleven seconds.

  • Disabling the admin updater on purpose

    A Composer-managed install where an update through the admin would be silently reverted on the next deploy. Disabling it is correct and the confusion it causes is a…

  • An idempotency key that a consumer reused for a different body

    A documented idempotency contract, and the first consumer to exercise the conflict case. The conflict response is the part of an idempotency contract that has to be specified,…

  • Docker Compose in production, and why it is still here

    Six years of Compose on a VPS, and an annual conversation about orchestration. Nothing is wrong, which is why the conversation keeps happening.

  • A firewall rule for a service that moved in 2023

    A rule allowing a port from a specific address, for a service that had been containerised and moved two years earlier. A rule allowing traffic to a closed…

  • A cold start after a deploy, warmed deliberately

    A deploy that invalidates the opcode cache and the application cache simultaneously, and a first minute that is measurably worse. Warming before the health check passes is the…

  • A consumer that had to be idempotent and finally was

    A handler documented as idempotent since 2022, which was not, and a redelivery that proved it. A docblock claiming idempotency is a claim and not a mechanism, and…

  • Debian 13, and a rebuild that took an afternoon

    A major distribution release, and a rebuild rather than an upgrade, which took four hours because the provisioning script had been fixed in February. The February exercise is…

  • The anti-corruption layer that needed a second mapper

    One supplier, two API versions running simultaneously during their own migration, and a translation layer built for one shape. The layer had assumed one upstream shape at a…

  • OIDC to a second cloud, and the trust policy I got wrong

    A second provider, a second trust policy, and a subject claim pattern that was broader than intended. The wildcard is the default in every example and it is…