150,000 Lines of Vibe Coded Elixir: The Good, The Bad, and The Ugly

Great writeup. My experience overlaps but with a different mitigation strategy.

I’m building an FBP (Flow-Based Programming) framework in Elixir — visual pipeline editor, distributed processing, 30+ node types. Using Claude Code daily.

The “AI can’t organize” and “OTP/async is ugly” problems hit me hard early on. My solution: don’t let AI make those decisions at all.

I built MCP servers that enforce architectural constraints at the tool level. AI can’t violate patterns because the tooling prevents it, not because I correct it afterward.

For the OTP blindspot — the FBP node abstraction hides it entirely. Node authors implement handle_message/2, the framework handles GenServers, supervision, message routing. AI doesn’t need to understand process lifecycles because it never touches them.

Basically: constrain the problem space until AI’s weaknesses don’t matter.

The defensive/imperative code issue persists though. Still correcting if/else chains that should be pattern matches.

4 Likes