Uncategorized

  • A replica promoted during a drill, on purpose

    A failover procedure written in 2023 and executed for the first time on a Saturday in January. A runbook that has never been executed is a hypothesis, and…

  • A rota of three, and a handover note

    A third person on the rota, and the artefact that makes a weekly rotation work. Three sections and a five-minute write-up is the whole mechanism, and it is…

  • Pattern overrides, one year on

    A synced pattern with overridable blocks, used on forty-one pages, and what a year of editors using it produced. Detaching is a one-click operation with no confirmation and…

  • Load testing before a launch, again, and the same finding

    A second launch, a second load test, and the same class of finding as last year for a different reason. Two years, two resource limits, both of them…

  • The trait I replaced with a constructor argument

    A trait providing a logger to eleven classes, each of which called a static accessor to get one. The trait was hiding a service locator behind a method…

  • The composite key I got the wrong way round, again

    Equality before range, for the fourth time in ten years, on an index created in a hurry. This is the most common index mistake and knowing it does…

  • The foreign key that documented an assumption

    A constraint added not for integrity, which was already sound, but because the relationship was undocumented anywhere else. A schema is the most-read document in an application and…

  • A search index that could be rebuilt in eleven minutes

    A rebuild time short enough that the index stops being something to protect. A derived store that can be rebuilt quickly does not need a backup, which removes…

  • array_find, array_any and array_all

    Four array functions that every project had written as helpers, finally in the language. array_any short-circuits, which is the difference from array_filter followed by a count and matters…

  • #[Deprecated] on a method, and what the engine does with it

    Deprecating a method had been a docblock tag that only an IDE respected, and 8.4 makes it something the engine reports. It works on functions, methods, constants and…