Spicy takes.
Essays on engineering, leadership, and refusing to let a temporary hack become load-bearing architecture. Strong opinions—loosely held, occasionally correct.
The Interface Tax
A frontend-leaning staff engineer on the unwritten rule that makes UI work culturally illegible as 'real engineering'—and why the machines, having automated the backend, just proved the prejudice backwards.
Read the essay
The Interface Tax
A frontend-leaning staff engineer on the unwritten rule that makes UI work culturally illegible as 'real engineering'—and why the machines, having automated the backend, just proved the prejudice backwards.
Read
Observability on the Edge
Retrofitting structured, request-correlated logging onto Cloudflare Pages Functions: why winston won't run in workerd and pino loses its speed there, how AsyncLocalStorage carries request ids through 58 orphaned console.error calls without touching a signature, and a request-id scheme that survives system boundaries.
Read
Six Security Findings from One Day of Code Review
One day of manual review on a Cloudflare governance platform: a CORS allowlist trusting an unclaimed pages.dev domain, hashed low-entropy tags posing as anonymization, a scalar trust score, GDPR erasure vs. an append-only hash chain, an HMAC unsubscribe token, and PII in logs. A scanner found none of them.
Read
Let the Bots Do Bot Shit
A software architect on a heretical proposal: stop pointing AI at replacing humans and point it at the banal machinery no human wants to run—then quarantine the bots into their own lane and let the human internet be a neighborhood again.
Read
Astro After Next.js
Astro's islands versus the Next.js everything-is-React default, on a real Cloudflare Pages project: a 663 KB icon package that ships zero bytes to the browser, a hand-rolled catch-all route that silently ate a prerendered page, and the typechecking gap where nothing in the build verified my React components.
Read
Management by Vibes: A Field Guide
A software architect on what happens to an organization—and to the people inside it—when nobody defines what winning looks like before they start playing, and why the request for a ruler keeps getting mistaken for dissent.
Read
University Education Isn't Trade School
A software architect on why we spent two decades funneling kids into CS as if a degree were a job requisition—saturating the market, then watching AI eat the very jobs we promised—and what a university was actually for before we confused it with a placement office.
Read
better-auth After Auth0
Replacing Auth0 with the better-auth library on Cloudflare Pages: sessions as joinable rows, per-request plugin composition, three distinct 403s (trusted origins, missing Origin headers from React Native, and a pages.dev hostname we didn't own), and the silent Secure-cookie trap.
Read
Testing Workers Against Real Bindings
Getting @cloudflare/vitest-pool-workers running tests inside workerd against real D1 and R2: an ESM-only config trap, per-file (not per-test) storage isolation and the resetStorage that fixes it, seeding real better-auth sessions, and the rate limiter that fought back.
Read
The Death March Is a Confession, Not a Strategy
A software architect and motorcycle racer on why the death march is neither strategy nor strength—but a confession. Delivered deadpan, with error bars.
Read
Durable Objects Are the Actor Model Wearing a Database Costume
Cloudflare Durable Objects give you mutual exclusion by construction—one single-threaded actor per orbit id—plus per-entity scheduling via setAlarm. What they don't give you is cross-store atomicity: the saga machinery stays, and serialization and transactions turn out to solve orthogonal problems.
Read
Storage Without Transactions
D1 gives you an atomic batch() that forbids data dependencies; R2 gives you etag compare-and-set and nothing else. How a guarded UPDATE shipped a silent permanent-data-loss bug, the executed_at column that fixed it, and a 17-write orbit-split saga journaled with a partial unique index instead of a distributed lock.
Read
The Tide Is Going Out, and Nobody Brought Trunks
A software architect lays out the game-theoretic case that the financialization class has strip-mined labor, customers, and society—and that the correction is already underway.
Read
Pages Functions vs a Cluster of Microservices
Collapsing what would have been three or four services behind an ingress into a single Cloudflare Pages Functions directory—filesystem routing, middleware as code instead of sidecars, a D1-backed rate limiter, and the fallback bug where every unmatched /api/ route returns the SPA shell with a 200.
Read
Wrangler After Kubernetes
Four sharp edges of wrangler.toml after years of Helm: compatibility_date as a base-image pin, Pages' undocumented two-environment limit, zero inheritance in [env.preview], and the .dev.vars precedence trap that silently pointed preview deploys at the production D1 database.
Read
The Parlor Trick That's Burning Down the House
What we call AI is a subset of a subset of AI that's really just a parlor trick—elegant maths in a tuxedo, sold by people who can't tell a loss curve from a leveraged buyout, while the experts who built it stand just outside the door.
Read
Trendslop and the Invisible Hand
On the long con of corporate DE&I, the selfish genius of Adam Smith's invisible hand, and why the trendslop running your leadership team is just a mirror with bullet points.
Read
Cloudflare vs AWS: The Mental Model That Doesn't Transfer
AWS-to-Cloudflare translation table, honestly graded: Lambda→Workers and S3→R2 mostly hold, D1 is not Aurora, and IAM's replacement—bindings as injected capabilities—is the one concept that doesn't map. Plus the cross-deployment Durable Object binding that actually bit me.
Read
The Invisible Man Has a Shadow (and It Isn't Very Bright)
The Invisible Man runs your company. He lives in the boardroom, doesn't know what your job entails, and makes every decision that matters with the capricious energy of a toddler who just discovered screaming gets him Goldfish crackers.
Read
Open to Opportunities
I added 'Open to opportunities' the second my pay rise didn't match inflation—and you should too. This isn't a thought-leader koan. It's a taxonomy.
Read
Progress Is Not a Goal
On engineers, thoughtlessness, and the sentence that gave the game away. Hume on the is-ought gap, Arendt on the banality of evil, Durkheim on the anomie of prosperity—and what all three demand of the people who build the tools.
ReadStrong opinions, but not that specific one. Try clearing the filters.