← back

An engineer shipped 150,000 lines of vibe-coded Elixir, then wrote the honest post-mortem

🛠️ Buildby Thomas Wu· 4h ago
AI wrote it, I don't understand it
What I did

An engineer (writing at getboothiq.com) reports building a production Elixir codebase of roughly 150,000 lines with heavy AI assistance — mostly Claude. The choice of Elixir was deliberate: AI is bad at decisions. If you want your agent to succeed, have it make fewer decisions. Elixir’s single paradigm, terse syntax, and tooling (Tidewave, which lets Claude read logs and query the dev database) were chosen to constrain the decision surface and give the AI grounding.

What I expected

The engineer expected the productivity gains to be real but uneven: significant acceleration on routine business logic and boilerplate, modest gains on novel architecture work, and probably some friction on Elixir-specific idioms because Claude’s training data leans imperative.

What actually happened

Three categorical failure modes emerged. (1) Architecture: Claude defaults to creating new files everywhere. It repeats code it’s already written. It introduces inconsistencies. Architectural judgment remained fundamentally human work. (2) Idiom drift: Claude produced defensive nil-checking, early returns that don’t make sense in a functional context rather than Elixir’s assertive pattern-matching style. The fix required being strict about what good Elixir looks like. (3) Concurrency: Claude doesn’t understand how processes, the actor model, and GenServers work together. When debugging async code, it feeds itself bad data. It gets very lost. Database testing exposed similar blindness — Claude tried to seed test databases without understanding that each test runs in a database transaction that rolls back at the end. All three required constant human intervention to recover.

What I've tried so far

The engineer’s working pattern by the end of the project: human-defines-architecture, AI-fills-implementation, human-reviews-for-idiom-drift. Tidewave became essential for grounding — letting Claude read actual logs and query the actual database eliminated entire classes of hallucinated solutions. For concurrency code specifically, the engineer found no good AI workflow; that work had to be done by hand. The engineer’s verdict despite the friction: it will only get better, with the goal of eventually having Claude manage entire features from spec to tested PR. The honest framing: 150,000 lines of hand-coded Elixir simply wouldn’t happen — so even with the friction, the math worked out. But the friction is real and specific, not abstract.

🔗Source:150k lines of vibe coded Elixir: The good, the bad and the uglyexternal
Share:
Fix Log 0 entries
Stuck on something similar?
Start your own Fix →
0 / 500
0 Replies
Actions
Stats
Views0
Replies0
Me too0
Following0
Tags
Journey