You have heard of Spaghetti code if you’ve done procedural or scripting-based programming. A similar thing can happen in Ruby with it’s polymorphism and the super-dynamic behavior. Ruby can become a frustrating “Lasagna” sometimes with all these dynamic classes, dynamic instances and dynamic behavior. All this can be hard to debug and follow. It’s almost like too many lisp macros.
Chad Fowler recently wrote “I love the tricks you can do with Ruby. method_missing, const_missing, autoloading, and their friends make really powerful things possible. But they do so at a price. When something goes wrong in a piece of code that relies heavily on one of these tricks, it can be much much harder to track down. So the decision to use such a tool shouldn’t be taken lightly. These are power tools. Used effectively, really cool things can happen. Used incorrectly, you can easily find yourself limb-less and bloody. So when you decide to use one of these power tools, you have to ask yourself: is it worth the risk?”