Operations

Reliability

Service level objectives for a personal website. The scale is faintly absurd, which is the point: the method survives contact with small systems, so it can be trusted near big ones.

The objectives

Declared first, measured second, argued about never. Current window: Q3 2026.

  1. Reader surfaces answer

    Met

    The homepage, the articles index, an article page and the feed return 200 to a probe.

    target 99.5% of recorded probes · current 100.0% (8 of 8)

    Static pages on a CDN should make this the easiest promise on the page. That is why it is here: a miss means something structural.

  2. The MCP endpoint answers

    Met

    POST /mcp/ completes an initialize handshake.

    target 99.0% of recorded probes · current 100.0% (2 of 2)

    A slightly looser target than the pages, chosen on purpose: the agent door matters less than the human one.

  3. ask_matt answers the canary correctly

    Met

    A synonym-shaped question returns the essay it should, not a confident wrong answer.

    target every recorded probe · current 100.0% (2 of 2)

    The one that earns its keep. A dead semantic index does not return errors; it returns the wrong articles with a straight face, and only a correctness check notices.

  4. ask_matt answers promptly

    Met

    The canary question completes within a tolerable wait for an agent mid-conversation.

    target median ≤ 3000ms · current median 2501ms

    Model inference on a serverless cold start is the slow path; the target absorbs one cold start, not a habit of them.

  5. The semantic index covers the corpus

    Met

    Every published post is present in the committed embeddings index this deploy shipped with.

    target 100% of published posts · current 32 of 32 posts

    Checked at build time, per deploy. This is the failure the canary exists for, caught before it ships.

  6. The running numbers are fresh

    Met

    The committed Strava snapshot is recent enough for its date to be a credential rather than a confession.

    target ≤ 28 days old · current 13 days old (as of 2026-07-28)

    Production carries no Strava tokens on purpose; freshness is a human running npm run strava and committing. The target keeps the human honest.

  7. The golden questions stay green

    Breached

    Every retrieval eval in data/ask-evals.json passes against the shipped index and thresholds.

    target 19 of 19 evals · current 17 of 19 passing

    Run by npm run eval through the same handler production serves; the committed results file makes a ranking regression a visible diff.

The error budget

A target below 100% is not resignation; it is permission to change things, priced in advance.

The availability target of 99.5% buys a budget of 0 failed probes out of the 8 recorded so far this quarter; 0 have been spent. At this sample size the budget rounds to almost nothing, which is honest: with sparse measurements you get a conscience, not a confidence interval. The arithmetic gets interesting exactly as the probe history gets long, and the file only grows one honest row at a time.

How this is measured

Snapshot-first, like everything else here. No pager was harmed.

  • Probes run from npm run slo, which exercises the reader pages, the feed and the MCP endpoint in production and commits the results. The page renders that committed history and fetches nothing at request time. Last recorded run: 29 Jul 2026, one of 2 this quarter.
  • The ask_matt probe is a canary, not a ping. It asks a synonym-shaped question and checks the right essay comes back, because the failure mode that matters does not look like an error: a missing semantic index degrades into confident wrong answers while every status code stays 200.
  • Two of the objectives never need a probe at all: index coverage and snapshot freshness are computed from the repository at build time, so a deploy that would breach them arrives already knowing.

Jump to

32 articles