Thinking, in public
Field notes on design, engineering and growth — written by the people who ship the work. No thought leadership, just lessons with receipts.
Choosing a framework without the fashion show
How to choose a web framework honestly in 2026: content site vs app, team skills, hiring, SSR needs, ecosystem gravity, exit costs — plus our decision memo.
CSP without the tears: a security baseline for content sites
A copy-paste security headers baseline for content sites: Content-Security-Policy with nonces, report-only rollout, and the headers nobody checks until audit.
Funnel metrics: measure the movement, not the moment
Snapshots lie; cohorts and velocity tell the truth. How to define funnel stages across teams, pick the metrics that find the constraint, and run the weekly review.
Switching agencies mid-flight: a transition playbook
How to leave an agency — or inherit a fired one's work — without losing the project: asset inventories, handover audits, the two-sprint overlap rule.
International SEO without tears: hreflang, ccTLDs and content reuse
Going international without tanking search: ccTLD vs subfolder trade-offs, hreflang that doesn't break, translations that respect local intent, staged validation.
Invite flows: the social onboarding of team products
The invite flow is where one user bets their reputation on your product. Role choice at invite time, shareable links vs email, and viral-loop honesty.
Brand voice in the bad moments: errors, churn and apologies
Brands break character exactly when character matters. Voice principles for error states, downtime, price rises, cancellations and apologies that aren't theatre.
Setting goals for a redesign that aren't vibes
How to turn 'make it feel modern' into measurable redesign goals: primary metrics, kill criteria, baseline capture, and reporting that survives launch fog.
How to read an agency SOW before you sign it
Most SOW disputes were visible in the document. How to read scope boundaries, assumptions, change control, acceptance criteria and warranties before signing.
Co-branding without the mush
Partnership branding without the logo soup: hierarchy rules, lockup maths, shared-palette strategy, and the pre-nup questions that prevent ugly co-brands.
Product search UX: from query box to answers
In-app search is a product decision wearing an engineering costume: scoping, suggestions, typo tolerance, filters vs facets, and no-results states that navigate.
Zero-downtime Postgres migrations, without heroics
Zero-downtime Postgres migrations with expand-migrate-contract: safe backfills, the locking hazards that catch everyone once, and our pre-flight checklist.