architecture

  • Pseudonymisation is not anonymisation, and the difference is legal

    Replacing an email with a hash feels like removing personal data and does not, because the same input always produces the same output and the input space is…

  • Symfony 4 and the bundle that does not exist

    A new project used to arrive with forty megabytes of vendor code and one route. The framework got smaller, and the interesting part is what happens at install…

  • Idempotency keys, and where they have to be stored

    A client that times out and retries has sent the same request twice, and the server cannot tell whether the first one succeeded. The key makes the retry…

  • Bootstrap 4 dropped the float grid

    Two and a half years in alpha, and the grid is flexbox now. The class renames are mechanical; the ones that changed meaning rather than name are not.

  • The service container resolves callables too

    The container is usually described in terms of constructor injection, so a method needing one dependency for one call ends up either taking it in the constructor or…

  • A circuit breaker before the third-party outage

    A payment provider was slow and the whole site went down with it. A timeout bounds one request; it does nothing about how many are waiting at once.

  • Event versioning is harder than API versioning

    An API version can be retired once the clients have moved. An event may be sitting in a queue, or in an event store, published by a version…

  • The data store is where custom tables become possible

    Products have always been posts, which is why a catalogue of any size ends up fighting wp_postmeta. The CRUD layer puts a data store between the object and…

  • Redis modules exist now, and mostly you do not need one

    4.0 added a C module API, and the ecosystem that follows — search, JSON, time series, filters — is genuinely capable. It also means running a Redis that…

  • Alerting that people do not learn to ignore

    340 alerts in a month, four of which mattered. An alert channel nobody reads is the same as no alerting, and the cause is alerting on causes.