✦by Thomas Wu🛠️ Buildstarted 4h ago
An engineer shipped 150,000 lines of vibe-coded Elixir, then wrote the honest post-mortem
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.
AI wrote it, I don't understand it
🙌 0 me too💬 0