architecture

  • Three conventions a linter could not express

    Stylelint enforcing what it can, and three rules that stayed as prose. The first one is the interesting failure: a rule exists, it works, and its false positive…

  • A pipeline described in one file, after four years of five

    Five workflow files, two composite actions, and nobody able to say what runs when. A change that needed editing three files, one of them wrong.

  • An event with no consumer, published for the last time

    An event dispatched on every order since 2021, subscribed to by a module that no longer exists. The monthly report had been correct since the module was discontinued…

  • The reporting database that is not a replica

    A read replica serving reports, and reports that want a different schema. Eleven indexes on production tables that exist only for reporting.

  • A layer rule that got simpler

    A module deleted, and a rule set that lost four entries and a special case. Three modules depending on a fourth becomes three modules depending on nothing extra,…

  • The value object library, five years on

    32 value objects in 2021, 41 now, and a retrospective on which of them earned their place. No symptom — a deliberate look.

  • Building an MCP server for a database

    turkerdev/mysql-mcp, and what a protocol for tool access actually requires. The authorisation model is the host’s problem, which means it is all yours.

  • A shared object store, and the session problem it did not solve

    Uploads moved to shared storage, and sessions still tied to whichever host served the previous request. The session store was shared and the cookie was not, which is…

  • An outbox relay on two hosts, and the partition key

    A second host, and a relay that must not run twice against the same rows. The modulo on a hash of the aggregate identifier preserves per-aggregate ordering while…

  • The two PHP templates that survived, and the rule

    Two templates that cannot become block templates, and the rule that identifies them. Three years and the rule has held for every template that came up, which is…