Skip to main content

Engineering the open web.

Long-form writing on Drupal, PHP frameworks, AI tooling, automated testing and everything else in a working programmer's stack — shipped from production, not theory.

Cache tags vs cache contexts: the mental model that ends “why won't my block update?”
drupal

Cache tags vs cache contexts: the mental model that ends “why won't my block update?”

The single most misunderstood corner of Drupal, and the root of ~90% of 'stale content' and 'user B sees user A's data' bugs. The one-line model: stale = a missing cache tag, leaking = a missing cache context. How they bubble, why max-age:0 quietly poisons a whole page, and the debug header that finds the culprit in seconds.

2026-08-03 / 04 min
Your 1M-token context window is a lie (context rot)
ai

Your 1M-token context window is a lie (context rot)

Chroma tested 18 models: accuracy falls well before the advertised limit, and semantically-similar distractors hurt more than the raw token count — models even did better on a shuffled haystack than a coherent one. Plus RULER's 'effective context' and Lost-in-the-Middle. Why curated retrieval still beats stuffing everything in the window.

2026-08-03 / 04 min
We deleted the LLM call and everything got faster, cheaper, and more honest
ai

We deleted the LLM call and everything got faster, cheaper, and more honest

A peer-reviewed study found regex tied an LLM on accuracy for structured extraction while running 28,000× faster. The case for AI as seasoning, not flour: route the predictable 90% to deterministic code, escalate only the fuzzy long tail to a model. A decision rule, real numbers, and the honest counterpoint (don't parse HTML with regex).

2026-08-03 / 05 min
Your healthcheck is not monitoring
engineering

Your healthcheck is not monitoring

depends_on waits for 'running', not 'ready'. Docker does NOT restart an unhealthy-but-running container — restart policies key on exit code, not health. And a naive curl localhost returns 200 from Drupal's page cache while the DB is down. A Drupal-specific healthcheck that doesn't lie, and why healthcheck ≠ readiness ≠ monitoring ≠ alerting.

2026-08-03 / 05 min
Why turning on JIT won't speed up your Drupal site (and the math that proves it)
php

Why turning on JIT won't speed up your Drupal site (and the math that proves it)

PHP's own JIT authors admitted it barely helps real apps like WordPress — ~3.5%. Here's why: a Drupal page is I/O-bound, and Amdahl's law caps what JIT can ever do to ~11% even if it made the CPU work infinitely fast. What actually speeds a site up instead (OPcache, preloading, a real cache backend), and the CPU-bound cases where JIT genuinely earns its keep.

2026-08-03 / 04 min
When the founder burns out: Jellyfin's leadership exodus and your homelab's bus factor
tooling

When the founder burns out: Jellyfin's leadership exodus and your homelab's bus factor

Three core Jellyfin people, including the founder, stepped away in one week of July — mostly burnout, told fairly. The project isn't dying, despite the headlines. But it's a clean look at the bus factor of volunteer FOSS, and the unglamorous things a self-hoster should actually do about it.

2026-07-29 / 05 min
Subscribe to Home
One email a week. No noise.
Every new article, plus the tools and patches I’m watching.