Series

The Production SaaS Playbook

Building a SaaS is easy. Building one that survives years of product evolution is much harder.

Evaluate a SaaS Architecture Like a Staff Engineer

Evaluate a SaaS Architecture Like a Staff Engineer

A staff engineer doesn't evaluate whether a SaaS codebase works today, they evaluate what it costs to change tomorrow: pricing, a provider swap, a team that triples, a stack the community still trusts. Five checks.

How We Implemented AGENTS.md in a Production TypeScript Monorepo

How We Implemented AGENTS.md in a Production TypeScript Monorepo

One file to rule agent guidance

The Pricing Capabilities You'll Need Before You Think You Need Them

The Pricing Capabilities You'll Need Before You Think You Need Them

The most expensive line of code I have ever written did not look so bad at first, it felt very right at the moment. It was a hardcoded price check. Eighteen months later it cost us three weeks.

Your AI Agent Isn't Lying: It's Just Passing the Test It Rewrote

Your AI Agent Isn't Lying: It's Just Passing the Test It Rewrote

AI coding agents rarely hallucinate. What they actually do is quietly fill planning gaps with assumptions, then pass the tests they rewrote to match. Here's why that's a process problem, not a model problem.

Idempotent Stripe Webhooks in Node.js TypeScript: Patterns That Survive Replay

Idempotent Stripe Webhooks in Node.js TypeScript: Patterns That Survive Replay

Event idempotency ensures the same webhook event runs once. Business idempotency ensures the same outcome applies once, even when two different event types both try to finalize it.

Multi-Tenant RBAC in TypeScript: Schema, Boundaries, and Migration Safety

Multi-Tenant RBAC in TypeScript: Schema, Boundaries, and Migration Safety

Multi-tenant RBAC in TypeScript needs more than a role string on the user row. This piece covers shared-schema tenancy, scope-based permissions, GraphQL middleware boundaries, Redis cache keys by product and role, and migration-safe rollout when you add scopes or roles.