Notes on shipping software — .NET, TypeScript, multi-tenant SaaS, and the boring parts that make systems last.
Throwing for a not-found or a validation error turns your happy path into a minefield of invisible exits. Return the failure instead, and the compiler starts working for you.
If your SaaS could ever onboard a second customer, every table needs a tenant column from the first migration. Bolting it on later is a rewrite, not a refactor.