April 20, 20269 min readJohnny UnarYour AI Feature Ships Fast and Rots FasterShipping a GPT-4o integration takes a weekend. Maintaining it takes a policy. Here's the one-page lifecycle template we actually use.Read more
April 13, 20269 min readJohnny UnarPostgres Outbox Beats RabbitMQ for Webhook Ingestion Under 5k RPMBefore you bolt on SQS for webhook reliability, read this. A Postgres outbox table and a Go worker will serve most startups better.
April 8, 20269 min readJohnny UnarPostgres RLS Is Your Real Tenant Isolation Layer, Not DjangoManual WHERE clauses in your ORM will eventually leak tenant data. Here's how to wire Postgres 17 RLS into Django 6.x properly.
April 6, 202612 min readJohnny UnarStop warming pools: adaptive CPU-bursting that actually saves moneyWarm pools feel like a win until the AWS bill arrives. Here's a concrete pattern with Go worker pools, Redis token buckets, and KEDA that gets you sub-200ms p95 without paying for idle CPUs.
April 1, 202612 min readJohnny UnarEdge for delivery, Go for domainA strict partitioning recipe for Next.js 15 and Go 1.22, with auth, SSR streaming, flags, observability, and none of the hand-wavy edge hype.
March 30, 202610 min readJohnny UnarOne npm package nearly owned our Next.js 15 appA postinstall hook, a remote loader, and a few ugly hours in CI. The fixes were simple once we stopped pretending JavaScript supply chain risk was theoretical.
March 26, 202610 min readJohnny UnarStop Paginating in the Client, Let Next.js 16 Do ItClient-side pagination burns memory, inflates TTFB, and makes UX flaky. Cursor APIs plus route-segment caching fix the mess without a rewrite.
March 25, 202610 min readJohnny UnarA sane monorepo needs hard boundariesMonorepos work fine in 2026, if you treat boundaries as code and automate enforcement. Our setup is boring on purpose, and that’s why it holds.
March 24, 202610 min readJohnny UnarSwap Encoders Without Torching RetrievalEmbedding model upgrades break search in quiet, expensive ways. This is the rollout playbook we use to ship encoder changes without wrecking retrieval.
March 23, 202611 min readJohnny UnarEdge observability is mostly a telemetry problemNext.js 15 edge functions and Go 1.22 services need different observability than long-lived servers. Trace cold starts, collect sampled flamegraphs, and tail-sample hard.
March 22, 202610 min readJohnny UnarDon’t ship agent chains to SMB customersAgentic tool orchestration looks clever in demos and turns ugly in production. Use typed function calls, deterministic proxies, and explicit fallbacks instead.
March 21, 202610 min readJohnny UnarStop shipping business logic in Next.js edgeUse Edge for fast decisions, keep stateful work in Go. This split fixes correctness bugs, retries, and observability holes that keep showing up in SaaS systems.
March 20, 202610 min readJohnny UnarKill the GraphQL gateway at 12 servicesFederation adds a governance tax most mid-stage startups can't afford. Typed OpenAPI and consumer-driven contracts bring back speed and make failures obvious.
March 19, 20269 min readJohnny UnarZero-Downtime Django Postgres Migrations Need Multi-Step PlansSafe schema changes in a Django monolith come from staged rollouts, backfills, and boring operational discipline. Squashed migrations won't save you.
March 18, 202614 min readJohnny UnarMulti-tenant Postgres 16: pick RLS unless proven otherwiseMost SaaS teams should default to Row Level Security in Postgres 16. The hard part isn't SQL, it's pooling, migrations, and operational discipline.
March 17, 202610 min readJohnny UnarStop Forcing Analytics Through Django ORMReporting code packed into chained QuerySets gets slow, fragile, and unreadable. Put heavy analytics back in SQL, where Postgres can actually help you.
March 16, 20269 min readJohnny UnarShip prompts like code, or expect regressionsProduction LLM features rot quietly. Version prompts, test them in CI, canary against shadow traffic, and make rollback boring.
March 15, 20269 min readJohnny UnarShip one correct admin workflowConfig panels feel like product progress until they turn your SMB app into a support machine. Pick one strong admin path and defend it.
March 14, 202610 min readJohnny UnarTreat hallucinations like system failuresHallucinations leave fingerprints. Instrument token probabilities, track evidence provenance, and gate actions with cheap verifiers before anything touches production.
March 13, 20269 min readJohnny UnarGPU, API, or CPU batching for AI inferenceMost startup AI infra decisions get made on vibes. Use throughput, tail latency, token volume, and ops burden to pick the least painful option.
March 12, 202611 min readJohnny UnarBill compute, kill per-request pricingPer-request billing punishes automation and rewards waste. Meter compute instead, and your SaaS economics stop behaving like a bug.
March 11, 202611 min readJohnny UnarAPI rewrites are governance failuresMost API rewrites happen because teams skipped contracts, versioning, and deprecation discipline. A small amount of governance fixes that without slowing delivery.
March 10, 202610 min readJohnny UnarEmbedding drift will quietly wreck your retrievalVector search degrades slowly, then all at once. Measure drift before recall collapses and model upgrades torch production.
March 9, 20269 min readJohnny UnarMessy PDFs will wreck your pipeline unless you pin every stepNaive OCR and embeddings pipelines fail quietly on real PDFs. A layout-aware, deterministic ingestion stack gives you drift detection and rollback.
March 8, 202610 min readJohnny UnarDeterministic Tests for RAG Pipelines or Don't ShipLLM features fail quietly. A real test suite for RAG needs frozen snapshots, adversarial prompts, and contracts around retrieval and attribution.
March 7, 202610 min readJohnny UnarHTMX inside Next.js cut our frontend messFor internal tools and B2B portals, HTMX inside Next.js ships faster, ships smaller, and breaks less than a full SPA stack.
March 6, 20269 min readJohnny UnarStop trusting Lighthouse for product decisionsLighthouse is fine for smoke tests. Revenue decisions need RUM, user journeys, and performance data tied to conversion.
March 5, 202611 min readJohnny UnarStop Choosing Microservices for Your ERPMost startup ERP teams don't need microservices. Django 4.2 and PostgreSQL 15 will carry you much further, with less pain and fewer 2am surprises.
March 4, 202610 min readJohnny Unarpgbouncer before more workersPostgres connection limits usually point to bad app config, not a scaling crisis. Fix pooling first, then decide if you need more compute.
March 3, 202610 min readJohnny UnarNext.js Edge Functions Are a Bad Place for Real Backend LogicEdge runtimes look fast in demos, then fall apart under real backend constraints. A hybrid edge plus regional model gives you speed without wrecking correctness.
March 2, 202610 min readJohnny UnarModular Django without the circusMost teams don't need microservices. They need Django apps with hard boundaries, versioning, and upgrade paths that won't wreck production.
March 1, 20269 min readJohnny UnarMost RAG systems fail because nobody designs for auditRAG breaks in production for boring reasons: weak provenance, fuzzy retrieval, no evaluation. PostgreSQL plus pgvector fixes more than another vector DB ever will.