system-design

  • A shared database between two services is one service

    Two deployables reading and writing the same tables cannot be released independently, cannot change their schema independently and fail together — which is every property a service was…

  • Autowiring, and what the container is allowed to guess

    services.yaml went from four hundred lines to twelve. Where the guessing stops is the part worth knowing before it stops in production.

  • A queue table is not a queue

    SELECT … WHERE processed = 0 LIMIT 1, and two workers taking the same row. SKIP LOCKED makes the table viable; it does not make it a broker.

  • What the regulation actually asks of a schema

    The deadline is in May and the work is not a cookie banner. An inventory first, because everything else depends on knowing which tables hold what.

  • Consent is a record with a timestamp, not a boolean

    A marketing_opt_in column stores the current answer and nothing else, and the question that gets asked is always “when, and to what exactly did they agree”. Append-only is…

  • 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…

  • 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.

  • 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.

  • Compose file version 3, and what swarm changed

    v3 exists to be deployable to a scheduler, and that removes things a single-host file relied on. What went, why it had to, and what replaces it.