Home / Building / Failure Museum
Twenty-plus projects taught me one thing above all: the failures pay the best tuition. This museum keeps them on display, not as confession, but so the lessons don't fade. Success stories are on the building page; this room is for the rest.
under curation: the exhibits below are reserved while I write them up properly. A museum deserves true stories, not rushed ones.
Exhibit 01
What was it? I replaced MongoDB with SQLite in a production side project to see if a single-file database could simplify deployment and cut costs. Why did I build it? MongoDB Atlas bills were climbing, and SQLite hype was peaking. Everyone was shipping SQLite in production. I wanted to know if it worked for real workloads. Why did it fail? SQLite was faster for reads — no network overhead, zero latency. But my analytics dashboard relied on MongoDB's aggregation pipeline for per-user stats, monthly trends, and cohort analysis. Rebuilding all of that in raw SQL was days of work for features MongoDB gives you free. The simplicity win didn't cover the feature loss. What it taught me: 'Use the right database' doesn't mean 'use the trendy one.' MongoDB earned its place. SQLite is for apps that fit in one process, not for dashboards with five years of data.
Exhibit 02
What was it? I migrated a mid-size project to TypeScript 6 pre-release, chasing the promise of the Go compiler — 10x faster builds, native binaries, a new era. Why did I build it? The TypeScript 6 announcement was everywhere. Everyone was benchmarking, comparing, claiming it would change everything. I wanted to be early. Why did it fail? I'm putting 'fail' in quotes here — the migration itself shipped. But the Go compiler wasn't the revolution people promised. Build times improved, yes. But the real lesson was that I'd accumulated enough tech debt that a compiler rewrite exposed more problems than it solved. Loose types, skipped strict checks, implicit `any` everywhere. The compiler didn't fail me; I'd been failing the compiler for years. What it taught me: Tooling upgrades don't fix bad code. The TypeScript 6 migration was fine. Cleaning up the mess it found was the actual project — and that took three times longer.
Exhibit 03
The failure that changed how I build today, the one DocPilot quietly benefits from. This exhibit is reserved; the story exists, it just hasn't been told yet.
The exhibit format
01
What was it?
02
Why did I build it?
03
Why did it fail, honestly?
04
What did it teach me?
welcome to the failure museum.