architecture

  • Cardinality is what makes a metric expensive

    A metric with a label is one time series per distinct label value, and a label with unbounded values is an unbounded number of series. The failure is…

  • An indicator, an objective, and a window — in that order

    Everyone wanted the site to be fast and nobody could say what fast meant, so the alert threshold was a round number somebody picked. The order matters because…

  • Read-after-write goes to the primary, always

    A read immediately following a write is the one query that cannot tolerate replication lag, and it is also the query most likely to be written without thinking.…

  • Versioning by media type, and why the URL usually wins

    The purist position is that a version belongs in the Accept header because a URL identifies a resource rather than a representation, and the practical position disagrees. Both…

  • Profiling before you optimise

    Two days spent optimising a function that was 3% of the request. The profiler said so in ninety seconds, and nobody had run it.

  • The migration that squashed two hundred files

    A test suite spending ninety seconds replaying six years of schema history. Squashing is a good idea with two failure modes worth knowing first.

  • Composer 2 is not a minor upgrade

    A dependency resolver rewritten and parallel downloads, so install went from ninety seconds to eleven. And a plugin API that broke three packages.

  • Choreography and orchestration, and the debugging difference

    A multi-service flow can be a chain of events where each service reacts, or a coordinator that calls each in turn — and the difference shows up when…

  • Module federation exists and is probably not for you

    5 shipped the ability for one bundle to load modules from another at runtime, which is genuinely novel and solves a problem most applications do not have. The…

  • webpack 5, and the polyfills that stopped being automatic

    The build broke on a package importing crypto. webpack 4 quietly bundled a browser shim; 5 does not, and the error is the correct one.